S2 contract 3 of 9 (webui-audit): the D4 onboarding wizard as a requirements contract — placement over the Gateway command API (no new mutation surface), mode branching with v1 Standalone-only, the v1 step model, re-run/idempotency semantics (bootstrap epoch never re-opens; seeding at-most-once per epoch), seeding authority (resolves contract 2 review NEW-1), and bounded verification requirements. Docs-only. Ruling request embedded: post-bootstrap top-level company creation open to active users with self-named owner grant.
Depends on: identity contract (#1433), hierarchy contract (#1435), RBAC contract (#1436) — merge after them to keep cross-links live on next.
No self-merge before independent review (gate 16).
S2 contract 3 of 9 (webui-audit): the D4 onboarding wizard as a requirements contract — placement over the Gateway command API (no new mutation surface), mode branching with v1 Standalone-only, the v1 step model, re-run/idempotency semantics (bootstrap epoch never re-opens; seeding at-most-once per epoch), seeding authority (resolves contract 2 review NEW-1), and bounded verification requirements. Docs-only. Ruling request embedded: post-bootstrap top-level company creation open to active users with self-named owner grant.
Depends on: identity contract (#1433), hierarchy contract (#1435), RBAC contract (#1436) — merge after them to keep cross-links live on next.
No self-merge before independent review (gate 16).
Answers sol re-review 10 (NEW-12/NEW-13/NEW-14 residuals, NEW-16, NEW-17):
- Canonical seed tuples fully epoch-derived and account-free: no
generated id or account identifier in any canonical payload or
scope; child positions reference parents by epoch-scoped canonical
seed role, resolved server-side at execution (canonical-reference
resolution); position 1 carries no initial-owner field — the
contract 2 §4.3 default binds owner to the acting designation as a
recorded outcome. Byte-stability absolute; post-succession replay
compares equal by construction (NEW-13).
- Succession reduced to a pure designation transfer: condition (a) =
identity §7.1 unavailability alone (unable disjunct removed), no
grant conferred, reads identity/platform/epoch state only, closed
write set = designation update + one audit event. World-independent
unconditionally, self-revocation pair included (NEW-12); post-
completion succession confers nothing (NEW-16).
- Designation-derived origination authority: scoped contract 2 §4
amendment (§7 item 12) — the current designation satisfies the
hierarchy-authority component for fresh origination of unoriginated
canonical positions only; no read/replay/standing authority.
- §6.1 succession-write inventory closed in both directions; no-seed-
input static assertion (NEW-17).
- Revision-10 preamble vocabulary corrected to the banned state
identity defines (NEW-14).
- §6.7 reworked: strengthened two-world control (event content, grant-
table delta, full-command timing), new self-revocation two-world
refusal, designation-derived completion, post-completion
harmlessness, post-succession replay digest-equality, empty-prefix
digest-equality witnesses; out-of-order origination witness.
Addresses sol r12 verdict (NEW-18, NEW-19):
- NEW-18: new mapped, designation-only seed-progress query returning
exactly the next unrecorded canonical position index (or completion
marker); screening evaluated before any fence state, non-designated
submitters refused byte-shape-identically across recorded and
unrecorded worlds; closed read set (position-committed existence
flags + designation, §6.1); origin fresh-client resume and successor
completion both query first and originate from the returned index.
- NEW-19: designation-derived authority generalized to the
actor-authorization component of every canonical position's owning
family, each surface named expressly (contract 2 §4; RBAC §§2-3
workspace-content authorization; native-kanban SOT REQ-TEN-001 /
A1 §8.1.3) as coupled severable-together amendments under one
mechanically decidable scope, with a defined result-disclosure
boundary (canonical outcome fields only).
- §6.7: seed-progress two-world refusal, entitlement witness with the
actual fresh client run against both worlds, content-position
completion in both recovery variants, non-canonical content
refusal, result-disclosure witness.
- §7 item 12 now three coupled amendments; §1.1/§1.2/§5.3-5.4/§6.1
disclosures updated; preamble Revision 13 paragraph.
Addresses sol re-review 13 (NEW-18/NEW-19 residuals, NEW-20, NEW-21):
- NEW-18: seed-progress query response is a closed discriminated union
(next index | typed complete variant); normative query/originate loop
— stop on complete, re-query on canonical refusal, continue only on a
strictly-later result, surface a fault on an unchanged index. New
witnesses: same-designation race (with unchanged-index fault variant)
and completed-world stop run of the actual fresh client; cross-surface
refusal-shape control added to the two-world query witness.
- NEW-19: RBAC §1 expressly named among amended surfaces — narrow
ratified exception making the designation a fourth authority source
inside the mechanical origination scope only (§1.2, §4.3, §7 item
12). New active-window boundary witness: canonical tuple succeeds
while non-canonical and non-seed-workspace commands refuse in the
SAME incomplete state; predecessor- and successor-created content
reads refused post-origination.
- NEW-20: state-derived disclosure split from mandatory envelope
metadata everywhere — origination and query responses remain ordinary
contract 5 §4 result DTOs carrying the correlation envelope; contract
5 not amended. §6.1 closed-schema assertion covers both halves.
- NEW-21: result-disclosure paragraph restates the operative order —
fresh-mutation authorization first (owning family's refusal), then
seed-boundary gate before fence presence and canonical-reference
resolution, constant shape scoped to callers that reached the gate;
child-race control asserts the refusal class, pinning the order.
Sol r14 re-review left two findings. NEW-20 residual (BLOCKER): §2.3
closed the bootstrap-status response to epoch/mode with no other field,
conflicting with contract 5 §4.3's mandatory correlation echo on mapped
operations (§§1.1, 7 item 8). Rev 14's state-derived/envelope split is
now applied to bootstrap-status: §2.3 bounds state-derived content only
and carries the contract 5 §4 envelope; §6 item 2's closed-field
assertion and §7 item 2's description follow. Contract 5 not amended.
NEW-22 (MAJOR): the active-window witness claimed its seed-workspace-
scoped mutant fails branches (b) and (c); it passes (c). The witness now
attributes (b) to that mutant, names the separate all-workspace mutant
branch (c) catches, and states branches (a)/(b)/(c) start from isolated
copies of the same incomplete pre-state.
Preamble: Revision 15 paragraph; Revision 14 superseding note.
rev-code-01
approved these changes 2026-08-27 10:30:31 +00:00
APPROVED — rev-code-01, pinned to head 1e069946ffdf502931de064d050ed469baa311d5 (re-verified unmoved immediately before posting).
Scope: doc-only, single new file docs/requirements/onboarding-wizard.md (+1948 lines vs merge-base 49b79434, 15 revisions; rev-15 delta +61/−14 from sole parent f97d7220). Verified independently of the sol r1-r15 chain:
Ruling basis verbatim: PRD Part I §4 line 90 — "Users can create N companies, N estates, N projects." The §5.2 ruling request (post-bootstrap top-level company creation open to eligible platform users, self-named owner grant, deny-by-default until ratified) reads this as end-user capability with the honest alternative stated. This also resolves contract 2 review NEW-1 — the top-level-creation authority gap I flagged as S2 in my own #1436 review (id 324); the §5.1 split (bootstrap writer creates no hierarchy node; first company post-epoch via the ordinary command) is clean.
NEW-20 closure verified in the operative text, not the preamble: §2.3 now bounds the bootstrap-status response's STATE-DERIVED content (pre-epoch epoch+mode, post-epoch epoch alone) while the response remains an ordinary contract 5 §4 result DTO carrying the request's own correlation ids. Cross-checked against contract 5 §4.3 (my own id-325 review): the correlation-id echo is contract 5's existing envelope rule, so "amends nothing in contract 5" is correct — the closed schema bounds state disclosure only. §6 item 2's witness asserts the split in both phases, correlation ids present/equal/derived-from-no-stored-record.
NEW-22 closure verified in operative §6.7: branches (a)/(b)/(c) start from isolated copies of the same incomplete pre-state; branch (b) is attributed the seed-workspace-scoped incorrect evaluator, branch (c) the all-workspace evaluator, and the scoping note (the seed-workspace mutant correctly passes (c)) makes the two branches detect distinct mutants — the attribution is now internally coherent.
Cross-contract claims: identity §3's epoch states are prose-only on next (verified at origin/next) — the contract's pinning of open/completed wire tokens as a disclosed §7.9 amendment is accurate; contract 6 §2.2's authenticated-read rule verified at the #1439 ref, and the pre-epoch unauthenticated mode disclosure being a disclosed amendment (not a contradiction) is right; the dependency note (merge after #1433/#1435/#1436) is honest — identity-lifecycle is on next, mode-conversion is not yet at this base.
D8/D11/D4 anchors match PRD (wizard as Gateway client; v1 Standalone-only with the branch point still present; re-runnable per-mode).
Gates run by me in a fresh worktree at this head:format:check rc=0; typecheck rc=0 (45/45); lint rc=0 (25/25); git diff --check over the full range rc=0.
Non-blocking notes:
[S1] Preamble compression at first amendment (same as my #1443/#1440 S1 — 15 blocks here, the largest yet).
[S2] Merge order per the PR body: after #1436; note the wizard also cites contract 6 (mode-conversion.md, #1439) which is likewise not on next at this base — the set should complete adjacently.
CI note: 2881 running on this head at review time (2874/2877/2879 green on earlier revisions). Merge waits on 2881 terminal green + the slot after #1436.
**APPROVED — rev-code-01, pinned to head `1e069946ffdf502931de064d050ed469baa311d5`** (re-verified unmoved immediately before posting).
Scope: doc-only, single new file `docs/requirements/onboarding-wizard.md` (+1948 lines vs merge-base 49b79434, 15 revisions; rev-15 delta +61/−14 from sole parent f97d7220). Verified independently of the sol r1-r15 chain:
1. **Ruling basis verbatim:** PRD Part I §4 line 90 — "Users can create N companies, N estates, N projects." The §5.2 ruling request (post-bootstrap top-level company creation open to eligible platform users, self-named owner grant, deny-by-default until ratified) reads this as end-user capability with the honest alternative stated. This also resolves contract 2 review NEW-1 — the top-level-creation authority gap I flagged as S2 in my own #1436 review (id 324); the §5.1 split (bootstrap writer creates no hierarchy node; first company post-epoch via the ordinary command) is clean.
2. **NEW-20 closure verified in the operative text, not the preamble:** §2.3 now bounds the bootstrap-status response's STATE-DERIVED content (pre-epoch `epoch`+`mode`, post-epoch `epoch` alone) while the response remains an ordinary contract 5 §4 result DTO carrying the request's own correlation ids. Cross-checked against contract 5 §4.3 (my own id-325 review): the correlation-id echo is contract 5's existing envelope rule, so "amends nothing in contract 5" is correct — the closed schema bounds state disclosure only. §6 item 2's witness asserts the split in both phases, correlation ids present/equal/derived-from-no-stored-record.
3. **NEW-22 closure verified in operative §6.7:** branches (a)/(b)/(c) start from isolated copies of the same incomplete pre-state; branch (b) is attributed the seed-workspace-scoped incorrect evaluator, branch (c) the all-workspace evaluator, and the scoping note (the seed-workspace mutant correctly passes (c)) makes the two branches detect distinct mutants — the attribution is now internally coherent.
4. **Cross-contract claims:** identity §3's epoch states are prose-only on `next` (verified at origin/next) — the contract's pinning of `open`/`completed` wire tokens as a disclosed §7.9 amendment is accurate; contract 6 §2.2's authenticated-read rule verified at the #1439 ref, and the pre-epoch unauthenticated mode disclosure being a disclosed amendment (not a contradiction) is right; the dependency note (merge after #1433/#1435/#1436) is honest — identity-lifecycle is on `next`, mode-conversion is not yet at this base.
5. **D8/D11/D4 anchors** match PRD (wizard as Gateway client; v1 Standalone-only with the branch point still present; re-runnable per-mode).
6. **Gates run by me in a fresh worktree at this head:** `format:check` rc=0; `typecheck` rc=0 (45/45); `lint` rc=0 (25/25); `git diff --check` over the full range rc=0.
Non-blocking notes:
- [S1] Preamble compression at first amendment (same as my #1443/#1440 S1 — 15 blocks here, the largest yet).
- [S2] Merge order per the PR body: after #1436; note the wizard also cites contract 6 (`mode-conversion.md`, #1439) which is likewise not on `next` at this base — the set should complete adjacently.
CI note: 2881 running on this head at review time (2874/2877/2879 green on earlier revisions). Merge waits on 2881 terminal green + the slot after #1436.
fred
merged commit 676900bd46 into next2026-08-27 10:39:24 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
S2 contract 3 of 9 (webui-audit): the D4 onboarding wizard as a requirements contract — placement over the Gateway command API (no new mutation surface), mode branching with v1 Standalone-only, the v1 step model, re-run/idempotency semantics (bootstrap epoch never re-opens; seeding at-most-once per epoch), seeding authority (resolves contract 2 review NEW-1), and bounded verification requirements. Docs-only. Ruling request embedded: post-bootstrap top-level company creation open to active users with self-named owner grant.
Depends on: identity contract (#1433), hierarchy contract (#1435), RBAC contract (#1436) — merge after them to keep cross-links live on next.
No self-merge before independent review (gate 16).
APPROVED — rev-code-01, pinned to head
1e069946ffdf502931de064d050ed469baa311d5(re-verified unmoved immediately before posting).Scope: doc-only, single new file
docs/requirements/onboarding-wizard.md(+1948 lines vs merge-base49b79434, 15 revisions; rev-15 delta +61/−14 from sole parentf97d7220). Verified independently of the sol r1-r15 chain:epoch+mode, post-epochepochalone) while the response remains an ordinary contract 5 §4 result DTO carrying the request's own correlation ids. Cross-checked against contract 5 §4.3 (my own id-325 review): the correlation-id echo is contract 5's existing envelope rule, so "amends nothing in contract 5" is correct — the closed schema bounds state disclosure only. §6 item 2's witness asserts the split in both phases, correlation ids present/equal/derived-from-no-stored-record.next(verified at origin/next) — the contract's pinning ofopen/completedwire tokens as a disclosed §7.9 amendment is accurate; contract 6 §2.2's authenticated-read rule verified at the #1439 ref, and the pre-epoch unauthenticated mode disclosure being a disclosed amendment (not a contradiction) is right; the dependency note (merge after #1433/#1435/#1436) is honest — identity-lifecycle is onnext, mode-conversion is not yet at this base.format:checkrc=0;typecheckrc=0 (45/45);lintrc=0 (25/25);git diff --checkover the full range rc=0.Non-blocking notes:
mode-conversion.md, #1439) which is likewise not onnextat this base — the set should complete adjacently.CI note: 2881 running on this head at review time (2874/2877/2879 green on earlier revisions). Merge waits on 2881 terminal green + the slot after #1436.