Skip to content

docs(spec): status citations point at the specs that hold the requirements - #3919

Merged
rubenvdlinde merged 9 commits into
developmentfrom
build/dq-l11-27
Oct 15, 2026
Merged

rubenvdlinde merged 9 commits into
developmentfrom
build/dq-l11-27

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

The change what-a-status-declares was archived on 7 October. 206 @spec lines in 42 files (lib, src, tests) still cited it under openspec/changes/what-a-status-declares/specs/..., a path that no longer exists. They now cite the specs that hold the requirements:

  • openspec/specs/status-transition-engine/spec.md (REQ-SDC-01 to 05), 177 lines
  • openspec/specs/doorlooptijd-dashboard/spec.md (REQ-SDW-01), 29 lines

Two lines became a repeat of the line above them and were removed (SchemaAnnotationReconciler, caseLifecycleHelpers.js). Comments only: no code, schema or l10n change.

Stacked on #3858 (which touches StatusTransitionService): land after it, before the Q-dossiq-L11-3 PR.

Verified

  • The pattern was anchored to the two full spec paths. The diff is @spec lines only (checked by reducing every changed line to its shape), and php -l passes on the 33 PHP files.
  • Gate 46 (check_spec_anchors.py) on every file this stack touches: no finding. Control: a made-up change path and a made-up anchor are both reported. Note that gate 46 already resolved the old paths through its archive index, so development was not red on them. The repoint is for the reader, who otherwise follows a path that is not there.

Verified (once, on the stack top 3bfc0b4, which holds #3858 and the four PRs above it)

Every composer check:strict stage once, one at a time in the lane's check worktree (exit codes in dq-l11-logs/r7/s31.rc):

  • lint 0, refusal-grounds snapshot 0, phpcs 0, psalm 0, phpstan 0.
  • phpmd 2: only the two BooleanArgumentFlag findings in lib/Service/Termijn/TermLetters.php (401, 425) that development carries since fix(letters): every date in a letter to the applicant reads the same way #3884/fix(portal): the Woo request form reads Dutch dates and names refused fields in Dutch #3895. Inherited.
  • PHPUnit --no-coverage: 8,676 tests, exit 0 (7 skipped, 1 warning). A first run found 3 reds of this stack (BrcCrossRegisterSyncTest still read the old warning lines), fixed in 28e4ad6, then the run above.
  • Mutations: the catch in ZgwBusinessRulesService, the throw in findBySchemaKey, the throw in fieldPairExists, the not-found branch, the not-allowed branch and the null check in handleDestroy each turn their tests red.
  • Not run locally: the touched test classes under pcov with fail-on-risky. The pcov image is gone and docker cannot pull, so the @covers/@uses of every touched test were checked by hand (each class a test can now execute is listed). CI is the check for that.
  • eslint and prettier on the 17 JS/Vue files the citation PR touches: 0. Vitest not run: comments only.
  • Hydra gates against refactor(transitions): the status engine asks two facades instead of fourteen collaborators #3858's head: 80 of 80 applicable ran, 8 failed, all inherited (22 and 53 on src/manifest.json, which this stack does not touch; 23, 43, 51, 55, 104, 107). Gates 5, 13, 16, 25 and 46 pass.
  • openspec validate guards-refuse-when-unsure and method-decomposition: valid.
  • Inherited: the debt ratchet reads red on development itself (phpmd.suppressWarnings 187 measured against 182) and eslint.inlineDisables 15 against 14.

No register change, so no info.version bump.

Decision 224. The case type delete check, drc-004 and drc-007 let a request
through when their lookup failed. They now refuse with 503
check-not-completed, name the rule, and log the rule and the object.
drc-003 gives the same answer instead of claiming a duplicate, and the
controller's relation check before a document delete (drc-008a) follows.

Two sites leave the catch-return-null list, ceiling 263 to 261.
… facades

method-decomposition slice 8h. The engine couples to 18 classes against 13
and takes 14 constructor arguments. The design gives it one facade over what
a case declares and one over what a move writes; the engine keeps the order
of the checks.
Characterisation before the StatusTransitionService split (method-decomposition
slice 8h), green on the single class: the order of the five refusals, the
conflict check, the one save of a closing move with the version it read, the
timer after the save, the record that cannot be written back, the free-form
refusals and the shape of the available transitions. Seven mutations of the
engine turn it red.
…fourteen collaborators

method-decomposition slice 8h. StatusTransitionService coupled to 18 classes
against 13 and took 14 constructor arguments. Transitions/CaseDeclarations
reads what a case declares about its status and its moves, and
Transitions/CaseMoveLedger holds what a move writes. The engine keeps the
decision and the order of the checks, takes nine arguments and couples to 12
classes. Both suppressions are gone; phpmd.suppressWarnings 183 to 181.

The public methods and their answers are unchanged. The characterisation
test and the five existing engine tests are green with only their
constructor call changed.
…ments

The change what-a-status-declares was archived on 7 October. 206 @SPEC lines in 42 files still cited its path under openspec/changes/, which no longer exists. They now cite openspec/specs/status-transition-engine/spec.md (REQ-SDC-01 to 05) and openspec/specs/doorlooptijd-dashboard/spec.md (REQ-SDW-01), where the requirements live. Two lines that became a repeat of the line above them are removed.
@rubenvdlinde
rubenvdlinde merged commit 6fdf356 into development Oct 15, 2026
44 of 50 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant