fix(docs): relocate ADR content to clear briefing-budget warnings - #531
Conversation
archgate check flagged 7 Decision/Do's-and-Don'ts sections across 5
ADRs as exceeding review-context's 2000-char briefing cap. Move the
overflow (mechanism detail, rationale, enumerated identifiers) into
new Key Definitions sections or existing Consequences/Compliance
paragraphs instead of truncating, so nothing is lost — only relocated
out of the capped sections. Verified per-file against the originals
with independent review agents.
Drop the resulting "briefing-budget floor" exception paragraphs added
along the way: they narrated the edit itself ("previously exceeded",
"has been relocated"), which GEN-004 prohibits in project prose,
Markdown included.
Signed-off-by: Rhuan Barreto <rhuan@barreto.work>
|
Warning Review limit reached
Next review available in: 39 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
📝 WalkthroughWalkthroughUpdated several ADRs and related developer guidance. Testing documents now clarify mocking, teardown, environment restoration, parametrization, and matcher usage. The AST context ADR defines unified parsing, subprocess, guardrail, revision, and comment-extraction requirements. The rule sandbox ADR consolidates module and raw-text scanning rules. Comment guidance now specifies concise forward-only comments and enforcement details. New memory guidance documents relocation-based resolution of briefing-budget warnings. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
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 |
Deploying archgate-cli with
|
| Latest commit: |
2a6ddf4
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://a3f4f3e2.archgate-cli.pages.dev |
| Branch Preview URL: | https://claude-mutable-exploring-pix.archgate-cli.pages.dev |
Code Coverage
Full HTML report available in workflow artifacts. Per-directory breakdown
|
Not operational knowledge — the PR and its commits already record what happened and why. Nothing here survives that the git history doesn't already carry. Signed-off-by: Rhuan Barreto <rhuan@barreto.work>
There was a problem hiding this comment.
Actionable comments posted: 5
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.archgate/adrs/ARCH-005-testing-standards.md:
- Line 162: Update the NODE_ENV wording in the cross-file pollution bullet to
explicitly say it is “left unset instead of set to ‘test’,” while preserving the
existing explanation of Sentry initialization behavior.
- Line 46: Update the testing guidance and examples at the fetch-mocking
references to require saving the original globalThis.fetch before direct
replacement and restoring it during teardown. Keep mock.restore() for Bun mocks
and spies, but do not rely on it to undo direct fetch assignments; apply this
consistently at both documented locations.
In @.archgate/adrs/ARCH-022-ast-aware-rule-context.md:
- Line 43: Clarify the guardrail ordering in the ADR around the “Guardrail
ordering” requirement and probeInterpreter flow: path and language checks must
run first, followed by the guarded interpreter probe as the first sanctioned
subprocess, then the guarded real invocation. Explicitly state that no unguarded
subprocess may occur, while preserving the requirement that all guardrails
execute inside createRuleContext().
In @.archgate/adrs/GEN-004-concise-forward-only-code-comments.md:
- Around line 49-50: Add `@satisfies` to the structural-tag exemption list in ADR
GEN-004, matching the companion ruleset and the identical-list claim at the
referenced synchronization point. Keep both enforcement-layer tag lists
synchronized without changing the narrative-tag exclusions.
In
@.claude/agent-memory/archgate-developer/feedback_briefing_budget_exceptions.md:
- Line 21: Update the procedure reference in the “How to apply” guidance from
“five-step loop” to “six-step loop,” leaving the six numbered steps and all
other wording unchanged.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 03441973-7d09-412a-9c67-f06df336b9bf
📒 Files selected for processing (7)
.archgate/adrs/ARCH-005-testing-standards.md.archgate/adrs/ARCH-022-ast-aware-rule-context.md.archgate/adrs/ARCH-024-rule-file-sandbox-boundary.md.archgate/adrs/ARCH-025-idiomatic-bun-test-parametrization-and-matchers.md.archgate/adrs/GEN-004-concise-forward-only-code-comments.md.claude/agent-memory/archgate-developer/MEMORY.md.claude/agent-memory/archgate-developer/feedback_briefing_budget_exceptions.md
📜 Review details
⏰ Context from checks skipped due to timeout. (3)
- GitHub Check: Analyze (csharp)
- GitHub Check: Smoke Test (Windows) / Windows
- GitHub Check: Cloudflare Pages
🧰 Additional context used
🧠 Learnings (6)
📓 Common learnings
Learnt from: CR
Repo: archgate/cli
Timestamp: 2026-07-26T10:38:38.734Z
Learning: Any proposal to widen `ALLOWED_MODULES` beyond `node:` specifiers, follow imports transitively, or remove import-time scanning must be documented in a separate ADR and approved by the project maintainer.
Learnt from: CR
Repo: archgate/cli
Timestamp: 2026-07-26T10:38:49.454Z
Learning: The narration-pattern lists and structured-documentation tag lists in the oxlint rules and companion Archgate rules MUST remain synchronized; changes to either must update both layers in the same change.
📚 Learning: 2026-06-11T12:50:28.661Z
Learnt from: rhuanbarreto
Repo: archgate/cli PR: 406
File: .claude/agent-memory/archgate-developer/feedback_prefer_tests_over_adr_rules.md:8-18
Timestamp: 2026-06-11T12:50:28.661Z
Learning: In `archgate/cli`, for markdown files under `.claude/agent-memory/`, follow the established convention: use YAML frontmatter (with a `name:` field used as the document title) and do not require a top-level `#` (H1) heading. During code review, do not flag missing first-line/first-top-level H1 headings (e.g., MD041) for these agent-memory files since markdownlint is not part of the repo’s `bun run validate` lint pipeline (oxlint/oxfmt only).
Applied to files:
.claude/agent-memory/archgate-developer/MEMORY.md.claude/agent-memory/archgate-developer/feedback_briefing_budget_exceptions.md
📚 Learning: 2026-07-25T00:05:20.592Z
Learnt from: rhuanbarreto
Repo: archgate/cli PR: 496
File: .claude/agent-memory/archgate-developer/project_test_isolation_gotchas.md:10-10
Timestamp: 2026-07-25T00:05:20.592Z
Learning: When reviewing documentation/agent-memory entries under `.claude/agent-memory/**`, do not enforce GEN-004’s “forward-only” comment/narrative requirement. These entries are allowed to keep historical/past-tense incident narratives and dated markers (e.g., `Found YYYY-MM-DD`) because the context is intended to help future agents evaluate edge cases. Outside this scope, GEN-004’s forward-only rule should still apply.
Applied to files:
.claude/agent-memory/archgate-developer/MEMORY.md.claude/agent-memory/archgate-developer/feedback_briefing_budget_exceptions.md
📚 Learning: 2026-07-11T13:03:15.386Z
Learnt from: rhuanbarreto
Repo: archgate/cli PR: 467
File: .archgate/adrs/ARCH-011-consistent-project-root-resolution.md:0-0
Timestamp: 2026-07-11T13:03:15.386Z
Learning: For Markdown files formatted by oxfmt (especially ADRs), avoid inline code spans that contain escaped backticks, e.g. `\`...\`` inside a single `` `...` `` span. oxfmt may mis-parse these and, on re-format, can collapse spaces after later inline code spans on the same line, effectively removing any manually re-added spacing. Instead, rephrase the text so the message stays plain quoted text, and put any embedded command/fragment that needs code formatting (e.g., `archgate init`) in its own separate inline code span; keep surrounding punctuation/spacing outside the code span.
Applied to files:
.archgate/adrs/ARCH-025-idiomatic-bun-test-parametrization-and-matchers.md.archgate/adrs/ARCH-024-rule-file-sandbox-boundary.md.archgate/adrs/GEN-004-concise-forward-only-code-comments.md.archgate/adrs/ARCH-005-testing-standards.md.archgate/adrs/ARCH-022-ast-aware-rule-context.md
📚 Learning: 2026-07-25T16:24:51.133Z
Learnt from: rhuanbarreto
Repo: archgate/cli PR: 501
File: .archgate/adrs/ARCH-003-output-formatting.md:0-0
Timestamp: 2026-07-25T16:24:51.133Z
Learning: In Archgate ADRs (.archgate/adrs/*.md), omit quantitative claims (e.g., token savings, benchmarks, performance deltas) unless they are backed by a reproducible measurement and supported by a single cited reference. If you cannot satisfy both (reproducible measurement + exactly one cited reference), describe the benefit qualitatively and tie it to the relevant policy/requirements instead of using numeric estimates.
Applied to files:
.archgate/adrs/ARCH-025-idiomatic-bun-test-parametrization-and-matchers.md.archgate/adrs/ARCH-024-rule-file-sandbox-boundary.md.archgate/adrs/GEN-004-concise-forward-only-code-comments.md.archgate/adrs/ARCH-005-testing-standards.md.archgate/adrs/ARCH-022-ast-aware-rule-context.md
📚 Learning: 2026-07-25T22:03:17.073Z
Learnt from: rhuanbarreto
Repo: archgate/cli PR: 501
File: .archgate/adrs/ARCH-015-cli-command-documentation-coverage.md:17-18
Timestamp: 2026-07-25T22:03:17.073Z
Learning: When updating an ADR that documents rule discovery/enforcement behavior, ensure the ADR’s stated discovery contract matches the implementation in code. If the rule only discovers commands by scanning `src/commands/*.ts` and `src/commands/*/index.ts`, the ADR must not claim it also inspects command registration calls elsewhere (e.g., `src/cli.ts`). Any ADR language that changes the documented contract should be treated as a normative change to behavior and aligned with the corresponding implementation/issue, not as prose-only documentation compression.
Applied to files:
.archgate/adrs/ARCH-025-idiomatic-bun-test-parametrization-and-matchers.md.archgate/adrs/ARCH-024-rule-file-sandbox-boundary.md.archgate/adrs/GEN-004-concise-forward-only-code-comments.md.archgate/adrs/ARCH-005-testing-standards.md.archgate/adrs/ARCH-022-ast-aware-rule-context.md
🪛 LanguageTool
.archgate/adrs/ARCH-025-idiomatic-bun-test-parametrization-and-matchers.md
[style] ~44-~44: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ated tests, not just one assertion. - DO pass array rows ([a, b, expected]) ...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~45-~45: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...named fields (title with $field). - DO assert derived comparisons directly o...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~46-~46: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...(expected)/.toEqual(expected). - **DO** match the matcher to the check: .toC...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~53-~53: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...toBe(b)/.not.toBe(b)directly. - **DON'T** collapse.some(predicate)/.ever...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
.archgate/adrs/GEN-004-concise-forward-only-code-comments.md
[style] ~93-~93: Consider a different adjective to strengthen your wording.
Context: ...ering one decision from both sides. - Deep context survives: Rationale moves to ...
(DEEP_PROFOUND)
.archgate/adrs/ARCH-005-testing-standards.md
[style] ~42-~42: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ive names, never private internals. - DO restore env vars with `restoreEnv(key...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~43-~43: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: .../test-utils.ts) for every capture. - **DO** close external SDK instances with aw...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~44-~44: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...close()in hooks, not test bodies. - **DO** setgit config user.email/user.nam...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~45-~45: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...fter git init, before any commit. - DO assert with expect() — `bun-test/ex...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~46-~46: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...skip/test.todofor placeholders. - **DO** mock fetch viaglobalThis.fetch`, re...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~47-~47: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ch, restored via mock.restore(). - **DO** wrap inline spyOn/mockImplementati...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~48-~48: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ssertion, or manage spies in hooks. - DO make thresholds injectable, e.g. `res...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~49-~49: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...+ real files (Consequences: hangs). - DO mock first-party modules and `os.home...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~55-~55: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...er dodge via an -impl file split. - DON'T restore an env var with bare `Bun....
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~58-~58: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ... only in CI (ShellPromise error). - DON'T touch real state — no real user-sc...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[grammar] ~58-~58: Ensure spelling is correct
Context: ...Promiseerror). - **DON'T** touch real state — no real user-scope paths, no unsetNODE_E...
(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
[style] ~59-~59: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ... the writer or mock os.homedir(). - DON'T write assertion-less tests or skip...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
🪛 markdownlint-cli2 (0.23.0)
.claude/agent-memory/archgate-developer/feedback_briefing_budget_exceptions.md
[warning] 8-8: First line in a file should be a top-level heading
(MD041, first-line-heading, first-line-h1)
🔇 Additional comments (9)
.archgate/adrs/ARCH-022-ast-aware-rule-context.md (2)
31-42: LGTM!Also applies to: 44-54, 62-74, 77-78, 81-102
75-76: 🗄️ Data Integrity & IntegrationNo Ruby comment envelope issue here.
Ruby now prints
{ _tree: sexp, comments }, andfinalizeAstResultreconstructs(tree as { comments?: unknown }).comments = parsed.comments; the comment array is not serialized as a non-index property on the JSON boundary.> Likely an incorrect or invalid review comment..archgate/adrs/ARCH-024-rule-file-sandbox-boundary.md (2)
35-36: LGTM!Also applies to: 46-51, 55-67, 71-104, 160-160, 167-169
52-54: 🔒 Security & PrivacyNo change needed —
import.meta["require"]()is already covered.The escape test already asserts that computed
import.meta["require"]()is blocked with a real position, alongside the dottedimport.meta.require()case..archgate/adrs/GEN-004-concise-forward-only-code-comments.md (1)
42-47: LGTM!Also applies to: 52-61, 93-93, 117-117, 127-127, 139-140
.claude/agent-memory/archgate-developer/MEMORY.md (1)
43-43: LGTM!.claude/agent-memory/archgate-developer/feedback_briefing_budget_exceptions.md (1)
1-20: LGTM!.archgate/adrs/ARCH-005-testing-standards.md (1)
40-45: LGTM!Also applies to: 47-49, 53-59, 154-161, 163-163, 182-184, 186-188
.archgate/adrs/ARCH-025-idiomatic-bun-test-parametrization-and-matchers.md (1)
42-55: LGTM!
Address CodeRabbit findings, verified against actual code before
applying:
- ARCH-005: globalThis.fetch mocking guidance wrongly implied
mock.restore() undoes a direct assignment — it only restores
spyOn()/mock()-created mocks. Fixed the Do's/Don'ts item, the
Manual Enforcement item, and the Implementation Pattern example to
match the save-and-reassign pattern already used in
tests/commands/upgrade.test.ts and tests/helpers/auth.test.ts.
- ARCH-005: fixed garbled NODE_ENV wording in the cross-file
pollution risk bullet ("left unset to \"test\"" -> "left unset
instead of set to \"test\"").
- ARCH-022: clarified guardrail-ordering clause 3, which read as if
all four guardrail steps run "before any subprocess" even though
steps 3-4 (interpreter probe, guarded invocation) are themselves
subprocess spawns.
- GEN-004: added @argument, @prop, and @Satisfies to the Decision's
structural-tag exemption list — both enforcement layers
(.archgate/lint/concise-comments.ts and the companion .rules.ts)
already treat these as structural; only the ADR's own prose list
was out of sync.
Signed-off-by: Rhuan Barreto <rhuan@barreto.work>
# archgate ## [0.51.0](v0.50.0...v0.51.0) (2026-07-26) ### Features * **adrs:** enforce concise, forward-only code comments (GEN-004) ([#496](#496)) ([9a114b3](9a114b3)), references [#2123](https://github.com/archgate/cli/issues/2123) * **adrs:** flag stray files at the repository root (GEN-005) ([#535](#535)) ([6a6e765](6a6e765)), closes [#514](#514), references [#500](#500) * **engine:** add ctx.readYAML and ctx.checkCase rule helpers ([#497](#497)) ([c5d82c5](c5d82c5)), closes [#490](#490), references [#490](#490) [#491](#491) [#499](#499) [#499](#499) [#499](#499) [#499](#499) * report truncated ADR briefings, trim the ADR corpus 15.6%, add GEN-005 briefing budget ([#501](#501)) ([a9dab40](a9dab40)) ### Bug Fixes * **docs:** relocate ADR content to clear briefing-budget warnings ([#531](#531)) ([c7419b3](c7419b3)) * **docs:** restore pt-br diacritics and enforce locale content integrity ([#523](#523)) ([db39104](db39104)), closes [#516](#516), references [#231](#231) * **engine:** allow symlinks that resolve inside the project root ([#500](#500)) ([387bf15](387bf15)) * **engine:** reject rule-file reads through a symlinked ancestor directory ([#499](#499)) ([a555f9d](a555f9d)), references [#497](#497) [#491](#491) [#497](#497) [#497](#497) [#497](#497) [#497](#497) * **engine:** scan top-level export declarations with a null source ([#493](#493)) ([d07db03](d07db03)), closes [#491](#491) * **engine:** stop dropping AST nodes with exotic literal values ([#494](#494)) ([0015542](0015542)), closes [#493](#493) [#493](#493) * **lint:** resolve no-bare-env-restore by captured key and lexical scope ([#524](#524)) ([7094a3a](7094a3a)), closes [#498](#498) * **rules:** make ARCH-020 and ARCH-023 match ctx.ast() instead of raw text ([#533](#533)) ([ad5529b](ad5529b)), closes [#513](#513), references [#486](#486) * **tests:** replace bun:test anti-patterns with idiomatic patterns ([#512](#512)) ([bcb086f](bcb086f)) --- This PR was generated with [simple-release](https://github.com/TrigenSoftware/simple-release). <details> <summary>📄 Cheatsheet</summary> <br> You can configure the bot's behavior through a pull request comment using the `!simple-release/set-options` command. ### Command Format ````md !simple-release/set-options ```json { "bump": {}, "publish": {} } ``` ```` ### Useful Parameters #### Bump | Parameter | Type | Description | |-----------|------|-------------| | `version` | `string` | Force set specific version | | `as` | `'major' \| 'minor' \| 'patch' \| 'prerelease'` | Release type | | `prerelease` | `string` | Pre-release identifier (e.g., "alpha", "beta") | | `firstRelease` | `boolean` | Whether this is the first release | | `skip` | `boolean` | Skip version bump | | `byProject` | `Record<string, object>` | Per-project bump options for monorepos | #### Publish | Parameter | Type | Description | |-----------|------|-------------| | `skip` | `boolean` | Skip publishing | | `access` | `'public' \| 'restricted'` | Package access level | | `tag` | `string` | Tag for npm publication | ### Usage Examples #### Force specific version ````md !simple-release/set-options ```json { "bump": { "version": "2.0.0" } } ``` ```` #### Force major bump ````md !simple-release/set-options ```json { "bump": { "as": "major" } } ``` ```` #### Create alpha pre-release ````md !simple-release/set-options ```json { "bump": { "prerelease": "alpha" } } ``` ```` #### Publish with specific access and tag ````md !simple-release/set-options ```json { "bump": { "prerelease": "beta" }, "publish": { "access": "public", "tag": "beta" } } ``` ```` ### Custom Changelog Preamble You can add custom markdown to the top of the changelog (right after the version header) using the `!simple-release/set-preamble` command. The markdown after the command line becomes the preamble. ```md !simple-release/set-preamble ## What's new? - The website was completely redesigned - The new API gives you awesome possibilities ``` In a monorepo, pass the full package name after the command to target a single package's changelog. Wrap the name in backticks so GitHub keeps it as text instead of a mention: ```md !simple-release/set-preamble `@your-org/core` ## Core changes - New plugin system ``` Use one comment per package, plus one without a name for the whole release. ### Access Restrictions The commands can only be used by users with permissions: - repository owner - organization member - collaborator ### Notes - The last comment with `!simple-release/set-options` command takes priority - The last `!simple-release/set-preamble` comment per package takes priority - JSON must be valid, otherwise the `set-options` command will be ignored - Parameters apply only to the current release execution - The commands can be updated by editing the comment or adding a new one </details> <!-- Please do not edit this comment. simple-release-pull-request: true simple-release-branch-from: release simple-release-branch-to: main --> Signed-off-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Summary
archgate checkflagged 7Decision/Do's and Don'tssections across 5 ADRs for exceedingreview-context's 2000-char briefing cap.## Key Definitionssections (ARCH-022, ARCH-024) or existingConsequences/Compliance and Enforcementparagraphs (ARCH-005, GEN-004), and tightened wording (ARCH-025) — nothing was deleted, only moved out of the capped sections.Test plan
archgate check—pass: true,briefingWarnings: [](was 7)bun run validate— full pipeline (lint, typecheck, format, tests, ADR check, knip, build) passesarchgate:reviewerskill — APPROVED, 0 violations