[AZ-512] Cycle 4 closure: deploy + retro + lessons + state

Closes cycle 4 (AZ-512 admin class inline edit).

Steps 16-17 artifacts:
- deploy_cycle4_report.md: ui/ dev pushed (09449bd..8737491, 4 commits,
  fast-forward); stage/main and admin/ dev deferred at the push-scope
  gate (option A; same as cycle 3). AZ-513 admin/ implementation +
  deploy gate stays open as the cross-workspace prerequisite.
- retro_2026-05-13_cycle4.md: PASS_WITH_WARNINGS verdict carries;
  243 PASS / 13 SKIP / 0 FAIL; bundle 291 332 B (+757 B / +0.26%);
  net architecture delta 0; user-action backlog 7 -> 9 (rate
  decelerating from +4 to +2); first cycle where the user explicitly
  overrode a spec-conservative default (AZ-512 Option B).
- structure_2026-05-13_cycle4.md: identity-copy snapshot; no new
  components, no new gates, no new barrels, no new wire-contract
  assertions, no new architecture findings.
- LESSONS.md: top-3 cycle-4 lessons appended (testing/testing/process),
  ring buffer at 12 of 15.
- _autodev_state.md: cycle 4 closed, cycle 5 entered awaiting New Task.

Jira AZ-512: In Testing -> Done with cycle-4 closing comment.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Oleksandr Bezdieniezhnykh
2026-05-13 04:56:42 +03:00
parent 873749197a
commit eb1e8a8581
5 changed files with 409 additions and 7 deletions
+36
View File
@@ -8,6 +8,42 @@ Categories: estimation · architecture · testing · dependencies · tooling ·
---
- [2026-05-13] [testing] When inserting a new control (button, input, link)
into an existing DOM row or region that already holds other controls, audit
the test corpus *before* the commit for non-disambiguated selectors
targeting that region (`querySelector('button')`, `getByRole('button')`
without `name`/`text`, indexed `querySelectorAll('button')[0]`) and either
update them with disambiguating text/role/name in the same affordance
commit or give the new control a stable `data-testid` — otherwise the new
control silently rebinds existing assertions to the wrong element and the
tests ship green-but-meaningless, as cycle 4's `destructive_ux.test.tsx`
did when the AZ-512 ✎ button became the new first button in the class-row
action cell.
Source: _docs/06_metrics/retro_2026-05-13_cycle4.md
- [2026-05-13] [testing] When a new test mounts a container component
end-to-end, run it once with the project's default test fixtures only (no
per-test override) and explicitly name any natural crashes ("`users.map is
not a function`") in the batch report as "Pre-existing bug noted" — never
silently apply a local fixture workaround without recording the latent
drift, because each silent workaround hides a source-vs-fixture mismatch
that future authors will re-encounter as a "mysterious test setup", and
cycle 4's `tests/admin_class_edit.test.tsx` was the second cycle to
surface one through this route.
Source: _docs/06_metrics/retro_2026-05-13_cycle4.md
- [2026-05-13] [process] When the user explicitly overrides a
spec-conservative cycle-defer decision (the AZ-512 Option B authorization:
"implement now, write mocks for backend"), the autodev MUST preserve every
downstream gate that the conservative path would have enforced — re-record
the override rationale in the leftover entry, keep the cross-workspace
deploy gate visible at Step 16, mark the carried tickets distinctly from
cycle-internal carries, and surface the override as a first-class
retrospective trend ("Cycles where user overrode a spec-conservative
default") — so the operating cost of the override stays measurable and
the user's downstream visibility is unchanged from the conservative path.
Source: _docs/06_metrics/retro_2026-05-13_cycle4.md
- [2026-05-13] [process] When a task spec defines a Cross-Workspace Verification
BLOCKING gate and the user skips the choice prompt, the autodev MUST default
to the most conservative spec-aligned option (Option A: file prerequisite