Skip to content

docs: resync ADR projections to shipped rule set (WR-0036/F-ADJ-01)#34

Merged
Goosterhof merged 1 commit into
mainfrom
engineer/adr-projection-resync-wr-0036
Jun 15, 2026
Merged

docs: resync ADR projections to shipped rule set (WR-0036/F-ADJ-01)#34
Goosterhof merged 1 commit into
mainfrom
engineer/adr-projection-resync-wr-0036

Conversation

@Goosterhof

Copy link
Copy Markdown
Contributor

What

Full resync of the ## War Room ADR Projections section of CLAUDE.md (WR-0036 / F-ADJ-01). The section was last synced 2026-05-08 and was ~5 weeks stale — it mis-described what the package distributes. Every projection bullet was reconciled against the 11 rules now shipping on main, mapped by each rule class's docblock "Doctrine source" line per ADR-0021 §Doctrine source in docblock (that docblock, not assumption, is authoritative).

Docs-only. No src/, CHANGELOG, version-bump, or rule-code changes.

Per-bullet changes, with the rule + PR that made each stale

Bullet Before After Driver
ADR-0009 EnforceResourceDataValidatorOptInRule (Phase 2, [Unreleased]) …(§EAGER_LOAD validator opt-in, shipped in v0.3.0) Rule released in v0.3.0 (2026-05-13); [Unreleased] was stale
ADR-0011 EnforceActionTransactionsRule + ForbidDatabaseManagerInActionsRule + ForbidEloquentMutationInControllersRule (ADR-0011 + ADR-0019) PR #28 (queue #87)
ADR-0012 "no HTTP surface" "package distributes EnforceFormRequestToDtoRule (§FormRequest → DTO Flow, [Unreleased])" PR #33
ADR-0019 "no models. Phase 2 candidate EnforceExplicitHydrationRule will distribute this rule." ships ForbidEloquentMutationInControllersRule; retired the stale EnforceExplicitHydrationRule candidate note PR #28
ADR-0029 ABSENT ADDED — ships EnforceAuditTransactionScopeRule (§Decision rule 3) PR #27
ADR-0001 LogRule + EnforceAuditSnapshotOnRetryRule + LogBuilderTruncateRule (both §Append-only) pre-existing gap
New subsection (none) "War-room Architectural Principle rules (no published ADR)" — ForbidAbortHelperRule + EnforceCurrentUserAttributeRule (Principle #9, Explicit-over-implicit) PR #26 + pre-existing
Last synced 2026-05-08 2026-06-15

EnforceCurrentUserAttributeRule and ForbidAbortHelperRule map to war-room §Architectural Principles — Explicit over implicit (their docblock names the principle, not a numbered ADR), so they live in a new subsection rather than an invented ADR projection.

Gates

  • composer test — PASS (107 tests, 163 assertions)
  • composer phpstan (self-analysis) — PASS ([OK] No errors, 12 files)

Docs-only change; both gates green confirm the markdown edit trips no self-analysis docblock rule.

🤖 Generated with Claude Code

@Goosterhof Goosterhof added the Agent Review Requested Requesting review of specialized AI review agents. label Jun 15, 2026
@Goosterhof Goosterhof requested a review from a team as a code owner June 15, 2026 09:17
@Goosterhof Goosterhof added the Agent Review Requested Requesting review of specialized AI review agents. label Jun 15, 2026

@Goosterhof Goosterhof left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Approve-worthy

0 blockers · 0 concerns · 1 nit · 1 praise · 0 inline
Round 1. CI green (check (8.4), check (8.5) both pass — required). Docs-only resync of the ## War Room ADR Projections block in CLAUDE.md against the 11 rules shipping on main.

Verified the load-bearing claim — every bullet's rule→doctrine mapping against the actual rule classes' docblock Doctrine source lines, which ADR-0021 makes authoritative:

  • LogRule + LogBuilderTruncateRule → §Append-only; EnforceAuditSnapshotOnRetryRule → §Snapshot-on-Retry. ✓
  • EnforceResourceDataValidatorOptInRule → ADR-0009 §EAGER_LOAD validator opt-in. ✓
  • ForbidEloquentMutationInControllersRule → ADR-0011 + ADR-0019 (correctly cited on both bullets). ✓
  • EnforceFormRequestToDtoRule → ADR-0012; EnforceAuditTransactionScopeRule → ADR-0029 §Decision rule 3. ✓
  • ForbidAbortHelperRule + EnforceCurrentUserAttributeRule → war-room §Explicit over implicit (no numbered ADR). ✓

Release-status labels also check out against CHANGELOG.md: EnforceResourceDataValidatorOptInRule "shipped in v0.3.0" matches the [0.3.0] entry (PR #20); ForbidAbortHelperRule "shipped" matches; the four [Unreleased] labels (ForbidEloquentMutationInControllersRule, EnforceFormRequestToDtoRule, EnforceAuditTransactionScopeRule, EnforceCurrentUserAttributeRule) appear only under [Unreleased]. Body's "11 rules" matches src/Rules/ exactly (11 classes). No scope drift — diff is 13/-6, CLAUDE.md only, no src//CHANGELOG/version touched as the body claims.

Praise — routing ForbidAbortHelperRule + EnforceCurrentUserAttributeRule into a "no published ADR" subsection rather than minting a fake ADR projection is the right call. Their docblocks name §Explicit over implicit, not a number, and the doc now mirrors that exactly.

Nit

The ADR-0019 bullet is now the longest in the block and carries a parenthetical history of the subsumed EnforceExplicitHydrationRule candidate. Accurate, but the provenance ("subsumed by the controller-mutation rule ... broader application-wide hydration rule remains a future candidate") is the kind of dated narrative our own CLAUDE.md-doctrine-vs-provenance lens routes to spy memory/pulse, not the front-door doctrine projection. Consider trimming to the one-clause statement of what ships and parking the candidate history elsewhere. Optional — the content is correct.

Automated war-room agent review — posted because this PR carries the Agent Review Requested label.

@jasperboerhof

Copy link
Copy Markdown
Contributor

Review Loop · 9/10 · PASS

phpstan-warroom-rules #34 · AC anchor: CLAUDE.md ADR-projection surface anchor (no Kendo/plan/PR-AC anchor; docs-only resync verified against src/ + CHANGELOG) · head 9a4533fe78

Tip

No findings — clean against the review checklist.

Action

merge-ready

@jasperboerhof jasperboerhof left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Auto-approved — review-loop verdict PASS, CI green, no human blocker, no open MAJOR+ threads. See the verdict comment + inline notes.

The `## War Room ADR Projections` section was last synced 2026-05-08 and
mis-described what the package distributes. Reconciled every projection
bullet against the 11 rules shipping on `main`, mapping each by its
docblock "Doctrine source" line per ADR-0021.

- ADR-0009: rule released in v0.3.0 (was stale `Phase 2, [Unreleased]`).
- ADR-0011: add `ForbidEloquentMutationInControllersRule` (PR #28).
- ADR-0012: was "no HTTP surface" — now ships `EnforceFormRequestToDtoRule` (PR #33).
- ADR-0019: add `ForbidEloquentMutationInControllersRule`; retire stale
  `EnforceExplicitHydrationRule` Phase-2 candidate note.
- ADR-0029: ADDED — ships `EnforceAuditTransactionScopeRule` (PR #27).
- ADR-0001: add `LogBuilderTruncateRule` to the §Append-only bullet.
- New subsection for war-room Architectural-Principle rules with no
  published ADR: `ForbidAbortHelperRule` + `EnforceCurrentUserAttributeRule`
  (PR #26, Principle #9).
- Bump Last synced to 2026-06-15.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Goosterhof Goosterhof force-pushed the engineer/adr-projection-resync-wr-0036 branch from 9a4533f to 9d52e9a Compare June 15, 2026 14:11
@Goosterhof Goosterhof enabled auto-merge June 15, 2026 14:11
@Goosterhof Goosterhof merged commit d476223 into main Jun 15, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Agent Review Requested Requesting review of specialized AI review agents.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants