docs: onboarding-wizard contract revision 10 (sol r9 NEW-11: seed-origin becomes a designation with a disclosed succession command — origin loss recoverable without factory reset, no-oracle shape preserved)
ci/woodpecker/pr/ci Pipeline failed

This commit is contained in:
fred
2026-08-26 23:21:33 -05:00
parent 535ac2d860
commit 3824fc6a37
+114 -19
View File
@@ -179,6 +179,24 @@ outcome references, actor equality remaining an additional
condition, never a substitute — a creator whose grants were revoked condition, never a substitute — a creator whose grants were revoked
is refused, not replayed (NEW-10; §6.7 lost-target-grant witness). is refused, not replayed (NEW-10; §6.7 lost-target-grant witness).
Revision 10 (sol re-review 8: NEW-11): the seed-origin boundary becomes
recoverable without breaking the no-oracle result. The epoch's
seed-origin is a **designation** the finalize fixes to the first admin,
changed through exactly one disclosed command — **seed-origin
succession** (§4.3, §7 item 12): an eligible platform admin holding
target-result read authority on the committed seed prefix succeeds only
while the current origin fails identity §7.1 eligibility; refusals keep
the constant conflict shape whatever condition failed and whatever is
recorded, concurrent successions serialize on the epoch record, the
change is one audited epoch-record mutation, and recorded fence rows
immutably retain their original actor. The seed-boundary gate and the
origination rule read the epoch record's current designation, so a
banned or deleted origin no longer strands the unoriginated suffix —
the successor resumes and completes it with no factory reset and no new
epoch, restoring D4 re-runnability and §4.4's strand-nothing rule
(NEW-11; witnesses §6.7: succession recovery, origin-available refusal,
succession race).
Scope: the Gateway-backed product onboarding wizard. Out of scope: the Scope: the Gateway-backed product onboarding wizard. Out of scope: the
host-local install wizard (`mosaic wizard`, which drives host install and host-local install wizard (`mosaic wizard`, which drives host install and
gateway bootstrap and is not this artifact — audit REPORT.md layer 3); gateway bootstrap and is not this artifact — audit REPORT.md layer 3);
@@ -417,7 +435,9 @@ the named authority:
epoch's §4.3 seed-origin account — as actor, epoch's §4.3 seed-origin account — as actor,
naming the admin as initial `owner` in the same audited operation naming the admin as initial `owner` in the same audited operation
(contract 2 §4.3); the §4.3 seed-boundary gate reserves (contract 2 §4.3); the §4.3 seed-boundary gate reserves
origination of the canonical seed tuples to that account, while origination of the canonical seed tuples to the epoch's current
seed-origin account — initially this admin, thereafter changed
only by §4.3 seed-origin succession — while
the same command outside the canonical seed key set follows §5.2 the same command outside the canonical seed key set follows §5.2
unchanged. The initial estate, initial project, and initial unchanged. The initial estate, initial project, and initial
workspace with seeded example data (D4, D11) follow through hierarchy workspace with seeded example data (D4, D11) follow through hierarchy
@@ -551,11 +571,13 @@ collects no sensitive category, so v1 ships no custody surface.
can carry a shared declaration, so no shared fence row can can carry a shared declaration, so no shared fence row can
exist outside the seed sequence — the seed-only rule is exist outside the seed sequence — the seed-only rule is
enforced by the command layer, not by wizard convention. enforced by the command layer, not by wizard convention.
- **Seed-boundary gate and origination.** The epoch has one - **Seed-boundary gate and origination.** The epoch record holds
immutable **seed-origin account**: the account the §3.3 one **seed-origin designation**: at finalize it names the
finalize transaction created as the epoch's first admin account the §3.3 finalize transaction created as the epoch's
(identity §3) — provenance the epoch record fixes at finalize first admin (identity §3), and afterwards it changes through
and nothing changes afterwards. Every mutating submission exactly one path — the **seed-origin succession** command below
— never by any other write. The epoch's **seed-origin account**
is the account the designation currently names. Every mutating submission
whose (operation, key) is in the canonical seed key set — whose (operation, key) is in the canonical seed key set —
whatever replay mode it declares — passes, after whatever replay mode it declares — passes, after
fresh-mutation authorization and before the fence table is fresh-mutation authorization and before the fence table is
@@ -582,14 +604,46 @@ collects no sensitive category, so v1 ships no custody surface.
eligibility plus the hierarchy authority the command itself eligibility plus the hierarchy authority the command itself
requires); a refused submission records no row (no-error requires); a refused submission records no row (no-error
replay below). The recorded actor of every shared row is replay below). The recorded actor of every shared row is
therefore the seed-origin account, authorized for the mutation therefore the account that was the epoch's seed-origin at that
the row fences. If the seed-origin account is banned or position's origination, authorized for the mutation the row
deleted while seed positions remain unoriginated, those fences. Recorded positions are replayable by any admin holding
positions are unoriginatable for this epoch — an accepted target-result read authority (§6.3).
consequence of the immutable boundary; factory reset (§4.2), - **Seed-origin succession.** Loss of the seed-origin account
which opens a new epoch with a new first admin, is the does not strand the epoch (D4, §4.4). The designation changes
recovery path. Recorded positions are unaffected: any admin through exactly one mutating command, an amendment to identity
holding target-result read authority replays them (§6.3). §3's epoch surface disclosed in §7 item 12: an eligible
platform admin — passing §5.2 fresh-mutation authorization in
full — submits succession naming itself the epoch's
seed-origin. The command succeeds only when, evaluated against
canonical state inside the succession transaction itself:
(a) the current seed-origin account fails identity §7.1
eligibility (banned, deleted, or disabled) — succession while
the current origin remains eligible is refused — and (b) the
submitter holds §4.3 target-result read authority on every
canonical record referenced by the recorded outcomes of the
committed seed prefix (vacuously satisfied while no position
is committed). A submission failing either condition is
refused with the same single constant-shape bounded conflict
as the seed-boundary gate, byte-shape-identical whichever
condition failed and whether any seed fence exists — so
succession adds no existence oracle (witness §6.7) — executes
nothing, and appends no event. Successful succession updates
the designation in the epoch record and appends one ordinary
mutation audit event recording the prior designation, the new
designation, and the acting principal; it rewrites no fence
row and no recorded outcome — rows already recorded immutably
retain their original actor. Concurrent successions serialize
on the epoch record: exactly one submitter commits and becomes
the seed-origin, and the loser, re-evaluated against the
committed winner, fails condition (a) — the now-current origin
is eligible — and receives the constant-shape refusal. The
seed-boundary gate and the origination rule always read the
epoch record's current designation: after succession the
successor originates the remaining suffix in order under its
own full fresh-mutation authorization, and the fence rows it
originates record the successor. Factory reset (§4.2) remains
the only path to a new epoch; it is never required to complete
an interrupted seed sequence.
- **No error replay.** The fence row commits only with its - **No error replay.** The fence row commits only with its
mutation, so only committed outcomes are ever recorded. A failed mutation, so only committed outcomes are ever recorded. A failed
or refused submission records no fence row; a retry executes or refused submission records no fence row; a retry executes
@@ -651,7 +705,11 @@ collects no sensitive category, so v1 ships no custody surface.
already-committed mutations return their recorded outcomes, and already-committed mutations return their recorded outcomes, and
only the remainder executes, without duplication and without only the remainder executes, without duplication and without
compensating rollback of completed commands. There is no compensating rollback of completed commands. There is no
wizard-level transaction spanning steps. wizard-level transaction spanning steps. Loss of the seed-origin
account mid-sequence is likewise recoverable without a new epoch:
§4.3 seed-origin succession designates an eligible successor, and
the resumed run completes the remaining suffix under the successor
— interrupted runs strand nothing even across origin-account loss.
## 5. Seeding authority (resolves contract 2 review NEW-1) ## 5. Seeding authority (resolves contract 2 review NEW-1)
@@ -916,7 +974,30 @@ Binding on the implementing PRs:
re-granting the creator read authority and resubmitting returns re-granting the creator read authority and resubmitting returns
the recorded outcome — proving actor equality is never a the recorded outcome — proving actor equality is never a
substitute for live target-result read authority on any replay substitute for live target-result read authority on any replay
mode; a submission that failed before commit mode; **seed-origin succession witnesses (§4.3, NEW-11):** a
**succession recovery** — the seed-origin account commits a
proper seed prefix and is then banned (identity §7.1); an
eligible platform admin holding target-result read authority on
the committed prefix submits succession, the epoch record's
designation changes to the successor with exactly one mutation
audit event recording the prior designation, the new
designation, and the acting principal, and the successor's
resumed run replays the committed prefix (its access attributed
by §4.3 replay access events) and originates the remaining
suffix in order — the new fence rows record the successor, the
pre-succession rows immutably retain the original origin, and
the full seed set completes with no factory reset and no new
epoch; an **origin-available succession refusal** — the same
eligible admin submits succession while the current origin
remains §7.1-eligible — is refused with the single
constant-shape bounded conflict (asserted byte-shape-identical
to the collision refusal), changes no epoch record, and appends
no audit event; a **succession race** — with the origin banned,
two eligible, prefix-authorized admins submit succession
concurrently: the epoch record serializes them, exactly one
commits and becomes the designated origin with one audit event,
the loser receives the constant-shape refusal, and the seed
sequence completes exactly once under the winner; a submission that failed before commit
leaves no fence row and its retry executes; two concurrent resumed leaves no fence row and its retry executes; two concurrent resumed
runs executing the seed sequence yield exactly one seed set — per runs executing the seed sequence yield exactly one seed set — per
key, exactly one mutation and one mutation audit event exist, and key, exactly one mutation and one mutation audit event exist, and
@@ -1011,9 +1092,11 @@ contracts and are not additions:
outcomes — with a shared declaration outside the key set, off outcomes — with a shared declaration outside the key set, off
its position's derived tuple, or past the next unrecorded its position's derived tuple, or past the next unrecorded
position refused recording nothing (§4.3). Including the position refused recording nothing (§4.3). Including the
**seed-boundary gate**: the epoch's immutable seed-origin **seed-boundary gate**: the epoch's seed-origin designation
account is the first admin the finalize transaction created; initially names the first admin the finalize transaction
every submission on a canonical seed key must be that account created and changes only through item 12's succession command;
every submission on a canonical seed key must be the currently
designated account
or hold target-result read authority on the position's recorded or hold target-result read authority on the position's recorded
targets, refused otherwise with the constant-shape conflict targets, refused otherwise with the constant-shape conflict
evaluated before fence presence — so recorded and unrecorded evaluated before fence presence — so recorded and unrecorded
@@ -1070,6 +1153,18 @@ contracts and are not additions:
provenance for §3.4's derivation; the current company name lives provenance for §3.4's derivation; the current company name lives
on the company row and changes only through the ordinary on the company row and changes only through the ordinary
hierarchy rename (§3.1, witnesses §6.3). hierarchy rename (§3.1, witnesses §6.3).
12. The **seed-origin succession command** (§4.3) — an amendment to
identity §3's epoch surface, proposed and ratified here,
severable: one mutating command that redesignates the epoch's
seed-origin to an eligible platform admin holding target-result
read authority on the committed seed prefix, valid only while
the current origin fails identity §7.1 eligibility; refusals
are the constant-shape §4.3 conflict regardless of which
condition failed, the change is one audited epoch-record write
serialized on the epoch record, and recorded fence rows are
never rewritten. Without this amendment a banned or deleted
seed-origin account strands the unoriginated seed suffix,
contradicting PRD D4's no-lock-in requirement (§4.4).
## Ruling request ## Ruling request