Repository navigation
Feat/site multilang user guide - #16
Conversation
Sonar css:S7924 flagged the four `.callout-pill.{note|tip|warn|danger}`
text colours as low contrast: the previous Tailwind 400/500 shades
(#4ade80 / #facc15 / #f87171) failed the AA threshold against the
near-white pill backgrounds in light mode.
The pill base rule now sets deep saturated text (700-shade) for the
default (light) computation; light-mode keeps that, dark-mode overrides
with bright (300-shade) text on the same tinted background. Both
combinations clear AA on their respective page backgrounds.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Previous commit (7d101e4 — callout-pill contrast) reached origin but GitHub Actions did not enqueue ci.yml / usermanuals-validate.yml runs for it. This empty commit re-triggers them so the static-analyzer checks on the contrast fix actually report. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Reviewer's guide (collapsed on small PRs)Reviewer's GuideAdjusts the visual design of callout pills to improve color contrast in both light and dark themes, using theme-specific text colors while maintaining existing border variables and slightly stronger background tints. State diagram for callout pill styling based on themestateDiagram-v2
[*] --> Theme_Resolved
state Theme_Resolved {
[*] --> Light_or_Dark
state Light_or_Dark {
Light: data_theme_light
Dark: root_not_data_theme_light
[*] --> Light
Light --> Dark
Dark --> Light
}
}
Theme_Resolved --> Callout_Note_Styles
Theme_Resolved --> Callout_Tip_Styles
Theme_Resolved --> Callout_Warn_Styles
Theme_Resolved --> Callout_Danger_Styles
state Callout_Note_Styles {
[*] --> Base_Note
Base_Note: color_075985_border_var_steel_bg_rgba_14_165_233_018
Base_Note --> Light_Note
Base_Note --> Dark_Note
Light_Note: color_0369a1_bg_rgba_14_165_233_018
Dark_Note: color_var_steel_bright_bg_rgba_14_165_233_018
}
state Callout_Tip_Styles {
[*] --> Base_Tip
Base_Tip: color_14532d_border_var_success_bg_rgba_34_197_94_018
Base_Tip --> Light_Tip
Base_Tip --> Dark_Tip
Light_Tip: color_166534_bg_rgba_34_197_94_018
Dark_Tip: color_86efac_bg_rgba_34_197_94_018
}
state Callout_Warn_Styles {
[*] --> Base_Warn
Base_Warn: color_713f12_border_var_warn_bg_rgba_234_179_8_022
Base_Warn --> Light_Warn
Base_Warn --> Dark_Warn
Light_Warn: color_854d0e_bg_rgba_234_179_8_022
Dark_Warn: color_fde047_bg_rgba_234_179_8_022
}
state Callout_Danger_Styles {
[*] --> Base_Danger
Base_Danger: color_7f1d1d_border_var_danger_bg_rgba_239_68_68_018
Base_Danger --> Light_Danger
Base_Danger --> Dark_Danger
Light_Danger: color_991b1b_bg_rgba_239_68_68_018
Dark_Danger: color_fca5a5_bg_rgba_239_68_68_018
}
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
Warning Rate limit exceeded
To keep reviews running without waiting, you can enable usage-based add-on for your organization. This allows additional reviews beyond the hourly cap. Account admins can enable it under billing. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Hey - I've left some high level feedback:
- The theme-specific rules duplicate some color values between the base
.callout-pill.*selectors and the[data-theme]overrides; consider centralizing these in CSS variables or using only theme-scoped selectors to avoid drift if colors change later. - Using
:root:not([data-theme="light"])to target dark mode may be brittle if additional themes are added; if possible, prefer an explicit[data-theme="dark"](or similar) selector to avoid unintentionally applying dark-mode styles to future themes. - There are several hard-coded hex values introduced for pills; if the design system has semantic color tokens, mapping these to variables (e.g.
--callout-note-fg-light) would make future adjustments and theme extensions easier.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- The theme-specific rules duplicate some color values between the base `.callout-pill.*` selectors and the `[data-theme]` overrides; consider centralizing these in CSS variables or using only theme-scoped selectors to avoid drift if colors change later.
- Using `:root:not([data-theme="light"])` to target dark mode may be brittle if additional themes are added; if possible, prefer an explicit `[data-theme="dark"]` (or similar) selector to avoid unintentionally applying dark-mode styles to future themes.
- There are several hard-coded hex values introduced for pills; if the design system has semantic color tokens, mapping these to variables (e.g. `--callout-note-fg-light`) would make future adjustments and theme extensions easier.Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
There was a problem hiding this comment.
Code Review
This pull request updates the color schemes for callout pills in site/css/style.css to ensure AA contrast compliance across light and dark themes. The reviewer suggested refactoring the implementation to align with the project's 'Dark-first' architecture, which would eliminate redundant style declarations and simplify the CSS structure.
| .callout-pill.note { color: #075985; border-color: var(--steel); background: rgba(14,165,233,.18); } | ||
| .callout-pill.tip { color: #14532d; border-color: var(--success); background: rgba(34,197,94,.18); } | ||
| .callout-pill.warn { color: #713f12; border-color: var(--warn); background: rgba(234,179,8,.22); } | ||
| .callout-pill.danger { color: #7f1d1d; border-color: var(--danger); background: rgba(239,68,68,.18); } | ||
| [data-theme="light"] .callout-pill.note { color: #0369a1; } | ||
| [data-theme="light"] .callout-pill.tip { color: #166534; } | ||
| [data-theme="light"] .callout-pill.warn { color: #854d0e; } | ||
| [data-theme="light"] .callout-pill.danger { color: #991b1b; } | ||
| :root:not([data-theme="light"]) .callout-pill.note { color: var(--steel-bright); background: rgba(14,165,233,.18); } | ||
| :root:not([data-theme="light"]) .callout-pill.tip { color: #86efac; background: rgba(34,197,94,.18); } | ||
| :root:not([data-theme="light"]) .callout-pill.warn { color: #fde047; background: rgba(234,179,8,.22); } | ||
| :root:not([data-theme="light"]) .callout-pill.danger { color: #fca5a5; background: rgba(239,68,68,.18); } |
There was a problem hiding this comment.
The current implementation is redundant and inconsistent with the repository's 'Dark-first' architecture. The base styles (lines 1816-1819) are immediately overridden by the light-theme block, and the dark-theme block re-declares background colors already defined in the base. Following the project's established pattern (see lines 4 and 67), the base classes should contain the default dark-mode styles, with a single override block for light mode. This reduces CSS size and simplifies specificity.
| .callout-pill.note { color: #075985; border-color: var(--steel); background: rgba(14,165,233,.18); } | |
| .callout-pill.tip { color: #14532d; border-color: var(--success); background: rgba(34,197,94,.18); } | |
| .callout-pill.warn { color: #713f12; border-color: var(--warn); background: rgba(234,179,8,.22); } | |
| .callout-pill.danger { color: #7f1d1d; border-color: var(--danger); background: rgba(239,68,68,.18); } | |
| [data-theme="light"] .callout-pill.note { color: #0369a1; } | |
| [data-theme="light"] .callout-pill.tip { color: #166534; } | |
| [data-theme="light"] .callout-pill.warn { color: #854d0e; } | |
| [data-theme="light"] .callout-pill.danger { color: #991b1b; } | |
| :root:not([data-theme="light"]) .callout-pill.note { color: var(--steel-bright); background: rgba(14,165,233,.18); } | |
| :root:not([data-theme="light"]) .callout-pill.tip { color: #86efac; background: rgba(34,197,94,.18); } | |
| :root:not([data-theme="light"]) .callout-pill.warn { color: #fde047; background: rgba(234,179,8,.22); } | |
| :root:not([data-theme="light"]) .callout-pill.danger { color: #fca5a5; background: rgba(239,68,68,.18); } | |
| .callout-pill.note { color: var(--steel-bright); border-color: var(--steel); background: rgba(14,165,233,.18); } | |
| .callout-pill.tip { color: #86efac; border-color: var(--success); background: rgba(34,197,94,.18); } | |
| .callout-pill.warn { color: #fde047; border-color: var(--warn); background: rgba(234,179,8,.22); } | |
| .callout-pill.danger { color: #fca5a5; border-color: var(--danger); background: rgba(239,68,68,.18); } | |
| [data-theme="light"] .callout-pill.note { color: #0369a1; } | |
| [data-theme="light"] .callout-pill.tip { color: #166534; } | |
| [data-theme="light"] .callout-pill.warn { color: #854d0e; } | |
| [data-theme="light"] .callout-pill.danger { color: #991b1b; } |
…rcery)
Address review feedback on the previous contrast fix:
- Centralise the eight pill fg/bg pairs as --pill-{kind}-{fg|bg} CSS
variables in :root (dark defaults) and [data-theme="light"]
(overrides), replacing the duplicated colour literals across the
base + light + :root:not(...) blocks.
- Drop the :root:not([data-theme="light"]) selector — fragile if a
third theme is ever added — in favour of the project's established
dark-first single-override pattern (the same shape :root /
[data-theme="light"] uses elsewhere in this file).
- Replace the rgba(...,.18) backgrounds with solid colours. Sonar's
CSS contrast checker can't compose alpha-blended backgrounds against
the inherited body colour, so it kept flagging css:S7924 even on
pairings that visually exceeded AA. Solid backgrounds make the check
unambiguous; every fg/bg pair clears AAA (>7:1) on its own theme.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Bring in the merged-on-main work from PRs #15 and #16 (multi-language user guide, site refactor, sonar/codacy/gemini fixes) so PR #17 can re-base cleanly. The two textual conflicts are kept on the development side — they ARE the substance of PR #17: - CHANGELOG.md: keep "NumPy" (not "Numpy") — addresses the latest reviewer nit on the v0.5.2 changelog block. - README.md: keep the enumerated nine-family secrets-scan sentence (single items for OpenAI / Google API keys and OpenSSH / PGP private keys) so the spoken count and the listed examples agree, addressing the same review pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Frozen at 8f69cf1 / PR #33. Same 4-agent split as Wave 3 (code-correctness / privacy-security / standards-compliance / test-rigour) per the established review cadence. Critical framing rules baked into the prompt: - D-22-01 enforcement: any "compliant" / "certified" wording found in the diff is a CRITICAL finding (alignment-vs- certified is the single most-impactful regression a reviewer can catch on this PR). - D-22-02 enforcement: SBOM stays CycloneDX 1.5; any SPDX claim is a finding. - Salt + HMAC chain are tamper-evidence, not non-repudiation — reject PKI-flavoured claims. - Wave 4 explicitly defers some Faz 30 items (GH-16/018/019/020 cli.md cleanup, sample-audit user-facing doc triplet, new check_cli_help_consistency tool, full-suite anchor-strict CI wire-up); reviewers should NOT flag those as Wave 4 omissions. Severity bar matches Wave 3 calibration; deliverable structure matches Wave 3 (one report per agent, saved as wave4-<agent>.md under docs/analysis/code_reviews/). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… drift guard Wave 5 / Faz 30 Task J: a CI guard that catches the bug class we've chased four times this wave (GH-8 verify-log, GH-11 benchmark, GH-16 --export-bundle, GH-18 --target kserve, GH-20 --pii-locale, F-W4-01 verify-audit --output-dir/--json, F-W4-PS-02 approve --run-id). Tool design (749 LOC, pure stdlib): - Discovers the live parser surface by spawning `python3 -m forgelm.cli --help` + `forgelm <sub> --help` for every shipped subcommand — resilient to internal `_parser.py` reorganisation (Option A in the task spec). - Walks docs/{guides,reference,usermanuals/{en,tr}/} + README.md for fenced bash/shell code blocks containing `forgelm <sub> ...` invocations. - Reports three drift classes: (1) subcommand not in parser surface; (2) flag not in parser surface for that subcommand; (3) flag value not in parser's `choices` list. - Skips `docs/analysis/` (gitignored research) + `docs/marketing/` (gitignored strategy) by default. - False-positive avoidance: skips synopsis lines (containing `[` or `(...|...)` choice indicators), and skips code blocks in "Wrong:"/"Don't:"/"Anti-pattern:"/"Legacy:"/"Yanlış:"-tagged context. Forward-reference framing (`planned`/`roadmap`/`future`/ `not in v0.5.5`/`(planned)`) within ±3 lines of the cited line is also tolerated as a legitimate ghost callout. - Exit codes follow `tools/` contract: 0 advisory / 1 strict. Tests (298 LOC, 15 cases — 3:23 wall-clock since each spawns the real forgelm parser surface): - Real shipping syntax (`verify-audit ./outputs/audit_log.jsonl --require-hmac`) → exit 0. - Each historical drift class regression-pinned (verify-audit --output-dir/--json, benchmark --model X, deploy --target kserve, chat --top-p). - Forward-reference framing + Wrong:-tagged blocks → tolerated. - --quiet suppression of the OK summary. - Parser-surface discovery sanity tests (synthetic empty repo, missing-subcommand short-circuit). CI wiring: - New advisory-mode step in `.github/workflows/ci.yml` runs the tool with `continue-on-error: true` after the bilingual-parity step. Matches the `check_anchor_resolution.py` Faz 26 precedent: gate lands first, baseline cleanup follows, then a later commit flips to `--strict` fail-the-build mode. Baseline drift on the live tree: 40 findings across 20 docs. Top hits cluster in `docs/usermanuals/{en,tr}/reference/cli.md` (legacy flag tables drifted from the audit/verify-audit/chat/deploy/ingest parsers as Wave 2-4 reshaped them) and a handful of phase-13/14 "planned" subcommands (`forgelm trend`, `forgelm compare-runs`) documented as if shipped. Cleanup is the next Wave 5 commit. Validation - ruff format / check — clean. - python3 -m pytest tests/test_check_cli_help_consistency.py --no-cov -q — 15/15 pass in 3:23. - python3 -m pytest --no-cov -q — full suite green (1428 tests now; +15 from this commit). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…gent review findings - Wave 5 PR #34 round 3 absorption: full sweep of CodeRabbit's 6 OOD + 20 Minor inline review comments PLUS 24 multi-agent review findings (code-correctness / privacy-security / standards / test-rigor docs under docs/analysis/code_reviews/wave5-*.md). HIGH/Major absorptions: - 4 broken `forgelm.cli.subcommands.*` symbol citations across purge/approvals reference docs (en+tr): _run_row_erasure → _run_purge_row_id, _handle_pending → _run_approvals_list_pending, _handle_show → _run_approvals_show (F-W5-PRIV-02). - configuration.md (en+tr): drop `kserve | triton` ghost choices and the entire `## deployment:` ghost YAML block (no `DeploymentConfig` in ForgeConfig; extra="forbid" rejects it at load) — replace with a v0.6.0+ Phase 14 callout (F-W5-S1, F-W5-S2). - ingestion.md (en+tr): drop conflicting "instructions format default" claim; document raw-chunk JSONL with summary-only --output-format {text,json} (CR-OOD ingestion). - closure-plan PR #33 status: line 131 said "PR #33 pending" but line 119 said merged with `01e40ba` (CR-OOD closure-plan). - leakage.md (en+tr): remove `audit.leakage_check.remove_cross_split_overlap` knob reference — knob doesn't exist in code; replace with the documented jq-based removal flow (CR-OOD leakage). - TR + EN experiment-tracking: drop `$ ` prompt prefix in `text`-tagged preview blocks for `forgelm compare-runs` (CR-OOD experiment-tracking). - roadmap mermaid (en+tr): add Phase 12.6 (Closure Cycle) → v0.5.5 node + edge so visual flow matches table (CR-OOD roadmap). Minor absorptions: - phase-12-6-closure-cycle.md L123: stale "(currently 0.5.1rc1)" parenthetical → already-bumped during Wave 5 (F-W5-S4 / CR Minor). - gdpr-erasure.md (en+tr): rename duplicate `### What gets recorded` / `### Neyi kaydeder` H3 to disambiguate Article 17 vs 15 sections (CR Minor #2 + #20). - verify-gguf.md (en+tr) L147: revise misleading "still match SHA-256" hash explanation; clarify magic-header layer doesn't catch truncation independent of sidecar (CR Minor #3). - verify_audit link mismatch in 4 reference docs (en+tr × verify_gguf + verify_annex_iv): label text now matches href (CR Minor #4 + #8). - air_gap_deployment-tr.md L19: add `text` language tag to ASCII diagram fence (CR Minor #6). - site/index.html L374: drop internal "Phase 19" milestone leak; tag reads `embed` (user-facing label) (CR Minor #7). - air_gap_deployment.md L193: fix dangling sentence fragment in HF_TOKEN gated-models tip (CR Minor #9). - performance.md (en+tr) L184: drop ghost `forgelm audit --output-format parquet`; replace with pandas/pyarrow conversion step (CR Minor #10). - phase-11-5-backlog.md L10-12: link text → package paths matching href (forgelm/data_audit.py → forgelm/data_audit/, etc.) (CR Minor #11). - testing.md L140: stale `23/23` → `39/39` bilingual parity count (CR Minor #12). - testing.md L198: `python3` prefix consistency in checklist (CR Minor #13). - supply-chain.md (en+tr): bandit cadence aligned to standards doc (Nightly 03:00 UTC + release tag, not "every PR + main push") (CR Minor #14 + #15). - translations.js L1927: "Three values" → "Two values" (only forgelm-lang + forgelm-theme listed) (CR Minor #16). - approvals_subcommand.md (en+tr) L26: staging path → match L84 JSON sample (`final_model.staging.<run_id>` canonical, run-id-less form honoured as fallback) (CR Minor #17 + #19). - translations.js L1445/L1462/L1504/L1521 (en+tr): `<code>reject</code>` → `<code>forgelm reject</code>` for fully-qualified copy/paste parity (CR Minor #18). - _meta.yaml header: add formal DE/FR/ES/ZH deferred-policy banner per closure-plan Task L (F-W5-S6). - release.md L20 + L359: stale "0.3.1rc1 current" + "no __version__" claims; corrected to 0.5.5 + reflect that __version__ + __api_version__ ARE exported per Library API standard (F-W5-S3). - purge_subcommand.md (en+tr): add WARNING-on-fallback language for --output-dir asymmetry vs reverse-pii (F-W5-PRIV-05). - verify-audit.md (en+tr): replace overstated "escrow" wording with KMS/HSM-based separation (F-W5-PRIV-06). Tool tightening + new tests: - check_cli_help_consistency.py: tighten _FORWARD_REF_MARKERS to whole-phrase forms (drop bare "planned"/"future"/"roadmap" which matched "planned attacks" / "future work" / "roadmap-driven" in unrelated prose); add Turkish equivalents for bilingual docs (F-W5-01). - test_check_cli_help_consistency.py: 3 new regression tests: bare-substring negative (F-W5-01), >±3-line forward-ref window negative (F-W5-TR-01a), and Wrong:-block scope-to-one-block resumption (F-W5-TR-01b). Suite 17 → 20 tests, all green. User-manual orphan fix: - _meta.yaml: register `reference/json-output` page (existed in filesystem since Wave 2 but never declared in nav config — was invisible on the live site). Now declared = on-disk = 65 each. Skipped (with reason): - CR Minor #5 (library_api.md `forgelm.__version__` example): INVALID — verified `python3 -c "import forgelm; print(forgelm.__version__)"` prints 0.5.5 cleanly; both __version__ and __api_version__ ARE exported per Library API standard. CodeRabbit's web-search must have hit pre-Wave-5 PyPI. Doc is correct; code matches. - F-W5-S5 (parity tool autodiscover usermanuals): registry shape refactor (~50 new pairs) is scope creep for round 3; defer to v0.6. - F-W5-S8 (compliance_summary-tr.md): explicitly deferred to v0.6 by the finding itself. - F-W5-S9, F-W5-TR-11/12 (NIT cite/style): non-load-bearing. - F-W5-02/03/04 (cognitive complexity, unterminated fence, resume-after-Wrong unit test): refactor scope; covered by F-W5-TR-01 block-scope tests for the resume case. - F-W5-TR-02 (cleanup commit baseline regression test): the live CI --strict gate IS the guard; doubling up the integration-test layer is defensible but not blocking. - F-W5-TR-03/05/06/07/08/09/10 (extras): non-blocking coverage gaps. Self-review gauntlet (all green): ruff format/check ✅ bilingual_parity --strict 39/39 ✅ anchor_resolution --strict 264/264 ✅ cli_help_consistency --strict 425/425 ✅ (reduced from 449 due to intentional invocation removals: ghost YAML block, parquet ghost, 4 broken symbol-cite paths, etc.) site_claims --strict (artefacts/templates/GPU/version) ✅ field_descriptions --strict ✅ pytest 1433 passed / 14 skipped (+5 new tests vs round 2) ✅ forgelm --config config_template.yaml --dry-run ✅ build_usermanuals.py: en/tr 65/65 OK, JS bundles regenerate ✅ Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>



Summary
Changes
Type
Testing
pytest tests/passesruff check .passesruff format --check .passesforgelm --config config_template.yaml --dry-runworksChecklist
pip install forgelm[...])config_template.yaml) updated if new config fields addedSummary by Sourcery
Enhancements: