Encodes Ruling 4b (webui-audit lane, ruled by Jason 2026-08-27) as a contract amendment. Docs only; +93/-7 across two files. Unblocked by #1436's merge (pushing earlier would have invalidated its head-pinned approval).
The five ruled decisions and where each lands
Two company classes (private / directory) → hierarchy-schema §2.1 visibility column (text NOT NULL DEFAULT private, CHECK private|directory) + new §2.8 semantics. Ruling 4 open creation survives: it creates private companies.
Publishing gated (admins + an RBAC company-CRUD capability; standard users cannot publish) → new §5.5. The capability's definition is a follow-up amendment to contract 2 per the recorded plan; until it ratifies the class is empty and the command is admin-only.
Admin dictates per-company visibility → §5.5: visibility change is an audited hierarchy mutation (added to §5.2's enumeration), ratified as instance administration in contract 2 §1.1's sense — mutates one column, reads no tenant content, confers no grant. Contract 2 §1.1 otherwise untouched.
Directory = existence + join-request only; content access stays grant-only → §2.8: discloses existence/name/slug to authenticated users, nothing else; contract 2 §3.1 deny-by-default and the ownership model unchanged. §6.7's no-existence-oracle rule scoped around this one ratified carve-out.
See-and-ask-to-join flow → §2.8 pins two invariants ahead of the flow's own contract: a join request confers no authority; approval is ordinary grant creation by an effective owner (contract 2 §4.1).
Contract 3 (onboarding-wizard §5.2)
Marked RULED AGREED (2026-08-27); amended to state creation always yields a private company, accepts no visibility argument, and that directory publishing is a separate gated mutation.
Witnesses
§6.1: visibility CHECK + DEFAULT witnessed (real PG per §6.8). New §6.9: directory read closed-field assertion; private companies never in the directory (with granted-reader control); disclosure ≠ authority (subtree/aggregates still refused); owner-cannot-publish refusal with admin accept control; creation-is-private; audit event with old/new values.
After merge: confirmation ruling goes to Jason per the recorded plan.
## Ruling 4b amendment — company visibility classes (contracts 1 + 3)
Encodes Ruling 4b (webui-audit lane, ruled by Jason 2026-08-27) as a contract amendment. Docs only; +93/-7 across two files. Unblocked by #1436's merge (pushing earlier would have invalidated its head-pinned approval).
### The five ruled decisions and where each lands
1. **Two company classes** (private / directory) → hierarchy-schema §2.1 `visibility` column (text NOT NULL DEFAULT `private`, CHECK `private|directory`) + new §2.8 semantics. Ruling 4 open creation survives: it creates private companies.
2. **Publishing gated** (admins + an RBAC company-CRUD capability; standard users cannot publish) → new §5.5. The capability's definition is a follow-up amendment to contract 2 per the recorded plan; until it ratifies the class is empty and the command is admin-only.
3. **Admin dictates per-company visibility** → §5.5: visibility change is an audited hierarchy mutation (added to §5.2's enumeration), ratified as instance administration in contract 2 §1.1's sense — mutates one column, reads no tenant content, confers no grant. Contract 2 §1.1 otherwise untouched.
4. **Directory = existence + join-request only; content access stays grant-only** → §2.8: discloses existence/name/slug to authenticated users, nothing else; contract 2 §3.1 deny-by-default and the ownership model unchanged. §6.7's no-existence-oracle rule scoped around this one ratified carve-out.
5. **See-and-ask-to-join flow** → §2.8 pins two invariants ahead of the flow's own contract: a join request confers no authority; approval is ordinary grant creation by an effective owner (contract 2 §4.1).
### Contract 3 (onboarding-wizard §5.2)
Marked RULED AGREED (2026-08-27); amended to state creation always yields a private company, accepts no visibility argument, and that directory publishing is a separate gated mutation.
### Witnesses
§6.1: visibility CHECK + DEFAULT witnessed (real PG per §6.8). New §6.9: directory read closed-field assertion; private companies never in the directory (with granted-reader control); disclosure ≠ authority (subtree/aggregates still refused); owner-cannot-publish refusal with admin accept control; creation-is-private; audit event with old/new values.
After merge: confirmation ruling goes to Jason per the recorded plan.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01XnH8KTL4PNTpEnpubcmiRn
APPROVED — rev-code-01, pinned to head 4e643e0d0f1b56964075fd80f6d9a958c4e8e8aa (re-verified unmoved immediately before posting).
Scope: 2 files, +93/−7 — the Ruling 4b amendment to contracts 1 and 3. Verified against the ruling record (RULINGS.md Ruling 4b, five decisions) and merged contract 2, decision by decision:
D1 (two classes) — §2.1 gains visibility (text NOT NULL DEFAULT private, CHECK private|directory); §2.8 defines both classes with private as the resting state and Ruling 4's open creation surviving (creates private companies). Fidelity: exact.
D2 (publishing gated) — §5.5: authorized for platform admins plus a company-CRUD capability explicitly deferred as a follow-up amendment to contract 2, with the empty-class-until-ratified interim honestly stated (admin-only); a company owner as such may NOT change visibility. Fidelity: exact, including the deferred-capability honesty.
D3 (admin dictates per company) — §5.5 makes the visibility change an audited hierarchy mutation, added to §5.2's enumeration with old/new values as semantic content; the instance-administration ratification names its contract-2 §1.1 basis precisely (one column mutated, no tenant content read, no grant conferred; the no-implicit-tenant-access rule otherwise untouched — verified against merged contract 2's §1.1 text). Fidelity: exact.
D4 (directory = existence + join-request only) — §2.8: disclosure is existence, name, and slug to authenticated users — nothing else (no subtree, aggregates, content, grant, or membership info); "visibility is disclosure, not authority"; contract 2 §3.1 deny-by-default and the §4.4 ownership model explicitly unchanged. §6.7's no-existence-oracle rule now scoped "beyond the one ratified carve-out — the §2.8 company directory, witnessed in §6.9". Fidelity: exact.
D5 (see-and-ask-to-join) — §2.8 pins the two invariants ahead of the flow's own contract: a join request confers no authority; approval is ordinary grant creation by an effective owner under contract 2 §4.1 — no other acceptance path; transport/storage/lifecycle deferred to a follow-up contract. Fidelity: exact.
Cross-reference integrity (all re-measured): §2 items now 1–8, §5 items 1–5, §6 items 1–9 — all sequential, no renumber collisions; every new §2.8/§5.5/§6.9/§6.7 reference resolves to an existing heading; §6.2's column-allowlist witness now implicitly covers the new column via §2.1's declared set (the exhaustive-set rule covers it — the §6.1 additions witness the CHECK/DEFAULT directly).
Contract 3 side: §5.2's decision marked RULED AGREED with the Ruling 4 overlay — creation always yields a private company, accepts no visibility argument, publishing is a separate gated mutation; the deny-by-default sentence correctly retired with the ruling recorded. Amendment preamble present on both files.
Sequencing: base is next@f8e1b43b (the #1436 merge — matching the PR body's unblocking rationale); merged next's hierarchy-schema.md measured to contain zero visibility occurrences, so this PR is a clean amendment of the merged contract, not a conflict with in-flight heads.
Gates: pinned prettier clean on both files; docs-only diff (typecheck/lint unaffected — the standard gates were green at this base across the morning's PRs and no TS surface changed).
Non-blocking:
[S1] The implementation debt this creates is real and named: M4-1a's merged schema lacks the visibility column, so the migration + witness additions (CHECK, DEFAULT, §6.9 witnesses) now ride the next hierarchy implementation slice — worth an explicit line in that slice's brief so the contract-vs-schema gap is visible until it closes.
CI note: 2931 running at review time. Merge per the recorded plan includes the confirmation ruling to Jason.
**APPROVED — rev-code-01, pinned to head `4e643e0d0f1b56964075fd80f6d9a958c4e8e8aa`** (re-verified unmoved immediately before posting).
Scope: 2 files, +93/−7 — the Ruling 4b amendment to contracts 1 and 3. Verified against the ruling record (`RULINGS.md` Ruling 4b, five decisions) and merged contract 2, decision by decision:
1. **D1 (two classes)** — §2.1 gains `visibility` (text NOT NULL DEFAULT `private`, CHECK `private|directory`); §2.8 defines both classes with private as the resting state and Ruling 4's open creation surviving (creates private companies). Fidelity: exact.
2. **D2 (publishing gated)** — §5.5: authorized for platform admins plus a company-CRUD capability explicitly deferred as a follow-up amendment to contract 2, with the empty-class-until-ratified interim honestly stated (admin-only); a company `owner` as such may NOT change visibility. Fidelity: exact, including the deferred-capability honesty.
3. **D3 (admin dictates per company)** — §5.5 makes the visibility change an audited hierarchy mutation, added to §5.2's enumeration with old/new values as semantic content; the instance-administration ratification names its contract-2 §1.1 basis precisely (one column mutated, no tenant content read, no grant conferred; the no-implicit-tenant-access rule otherwise untouched — verified against merged contract 2's §1.1 text). Fidelity: exact.
4. **D4 (directory = existence + join-request only)** — §2.8: disclosure is existence, name, and slug to authenticated users — nothing else (no subtree, aggregates, content, grant, or membership info); "visibility is disclosure, not authority"; contract 2 §3.1 deny-by-default and the §4.4 ownership model explicitly unchanged. §6.7's no-existence-oracle rule now scoped "beyond the one ratified carve-out — the §2.8 company directory, witnessed in §6.9". Fidelity: exact.
5. **D5 (see-and-ask-to-join)** — §2.8 pins the two invariants ahead of the flow's own contract: a join request confers no authority; approval is ordinary grant creation by an effective owner under contract 2 §4.1 — no other acceptance path; transport/storage/lifecycle deferred to a follow-up contract. Fidelity: exact.
**Cross-reference integrity (all re-measured):** §2 items now 1–8, §5 items 1–5, §6 items 1–9 — all sequential, no renumber collisions; every new §2.8/§5.5/§6.9/§6.7 reference resolves to an existing heading; §6.2's column-allowlist witness now implicitly covers the new column via §2.1's declared set (the exhaustive-set rule covers it — the §6.1 additions witness the CHECK/DEFAULT directly).
**Contract 3 side:** §5.2's decision marked RULED AGREED with the Ruling 4 overlay — creation always yields a private company, accepts no visibility argument, publishing is a separate gated mutation; the deny-by-default sentence correctly retired with the ruling recorded. Amendment preamble present on both files.
**Sequencing:** base is next@f8e1b43b (the #1436 merge — matching the PR body's unblocking rationale); merged next's hierarchy-schema.md measured to contain zero `visibility` occurrences, so this PR is a clean amendment of the merged contract, not a conflict with in-flight heads.
**Gates:** pinned prettier clean on both files; docs-only diff (typecheck/lint unaffected — the standard gates were green at this base across the morning's PRs and no TS surface changed).
Non-blocking:
- **[S1]** The implementation debt this creates is real and named: M4-1a's merged schema lacks the `visibility` column, so the migration + witness additions (CHECK, DEFAULT, §6.9 witnesses) now ride the next hierarchy implementation slice — worth an explicit line in that slice's brief so the contract-vs-schema gap is visible until it closes.
CI note: 2931 running at review time. Merge per the recorded plan includes the confirmation ruling to Jason.
APPROVED (delta re-review) — rev-code-01, pinned to head df1e65abc2ef5f697176202e3c50cc0aa82074c7 (sole parent = my reviewed 4e643e0d, review id 347; head re-verified unmoved immediately before posting). Delta read in full (+22/−5, two files) — terra's three round-1 blockers, each verified fixed:
Class-data classification (fix 1): §1.1's enumeration now reads "parentage, naming, grant, audit-linkage, and visibility-class data only," with visibility explicitly ratified as authorization/disclosure data sitting inside A1 §8.1.2's tenancy/authorization purpose — not a payload field, no business content, widening the payload prohibition for nothing else. Verified against A1 §8.1.2's actual text (the class purpose is exactly tenancy/authorization structure records): the classification is sound, and the amended §2.7 exhaustive-set rule still covers the new column via §2.1's declared set.
Audit-witness scoping (fix 2): §6.4's mutation-class enumeration now includes visibility change (so the FULL pattern — same-transaction atomicity, rollback witness, actor/verb/target, outbox delivery — applies to it like every other class), and §6.9's final item is scoped to adding only the old/new-value payload assertion. This closes the prior gap where §6.9 read as carrying the whole audit pattern alone; the division of labor is now correct and explicit.
Ruled-request annotation (fix 3): the wizard's Ruling request is headed "RULED AGREED (Jason, 2026-08-27; Amendment 1)" with the decision stated (open eligible-user creation stands, yielding private companies) and the retained request text marked historical record, no longer live — the annotation is unambiguous about which alternative took effect.
No regression: all five Ruling-4b decisions intact (D2 owner-cannot-publish and D4 disclosure-nothing-else spot-verified present); §2/§5/§6 numbering still sequential 1-8/1-5/1-9; cross-references resolve; prettier clean on both files; delta touches only the three fix sites (name-status = the two docs, no other hunks).
CI: running on this head at review time. Merge per the recorded plan (confirmation ruling to Jason).
**APPROVED (delta re-review) — rev-code-01, pinned to head `df1e65abc2ef5f697176202e3c50cc0aa82074c7`** (sole parent = my reviewed `4e643e0d`, review id 347; head re-verified unmoved immediately before posting). Delta read in full (+22/−5, two files) — terra's three round-1 blockers, each verified fixed:
1. **Class-data classification (fix 1):** §1.1's enumeration now reads "parentage, naming, grant, audit-linkage, and visibility-class data only," with visibility explicitly ratified as authorization/disclosure data sitting inside A1 §8.1.2's tenancy/authorization purpose — not a payload field, no business content, widening the payload prohibition for nothing else. Verified against A1 §8.1.2's actual text (the class purpose is exactly tenancy/authorization structure records): the classification is sound, and the amended §2.7 exhaustive-set rule still covers the new column via §2.1's declared set.
2. **Audit-witness scoping (fix 2):** §6.4's mutation-class enumeration now includes visibility change (so the FULL pattern — same-transaction atomicity, rollback witness, actor/verb/target, outbox delivery — applies to it like every other class), and §6.9's final item is scoped to adding only the old/new-value payload assertion. This closes the prior gap where §6.9 read as carrying the whole audit pattern alone; the division of labor is now correct and explicit.
3. **Ruled-request annotation (fix 3):** the wizard's Ruling request is headed "RULED AGREED (Jason, 2026-08-27; Amendment 1)" with the decision stated (open eligible-user creation stands, yielding private companies) and the retained request text marked historical record, no longer live — the annotation is unambiguous about which alternative took effect.
**No regression:** all five Ruling-4b decisions intact (D2 owner-cannot-publish and D4 disclosure-nothing-else spot-verified present); §2/§5/§6 numbering still sequential 1-8/1-5/1-9; cross-references resolve; prettier clean on both files; delta touches only the three fix sites (name-status = the two docs, no other hunks).
CI: running on this head at review time. Merge per the recorded plan (confirmation ruling to Jason).
APPROVED (round-3 delta) — rev-code-01, pinned to head 9819666b9d1f6dddb7cf88e696bf98e4e5648c44 (sole parent = my reviewed df1e65ab, review id 348; head re-verified unmoved immediately before posting). Delta read in full (+73/−14, two files) — terra's round-2 blockers, each verified:
SOT Amendment A2 (the substantive fix): native-kanban-sot.md gains §9, an express amendment to A1 grounded on Ruling 4b, with exactly two modifications: §9.1.1 extends A1 §8.1.2's class-data constraint to additionally admit the single companies.visibility column (widened for nothing else), and §9.1.2 extends A1 §8.1.3's function enumeration with the company directory as an express narrow read-only disclosure — sole carve-out to §8.3's no-existence-oracle acceptance — plus a §9.2 explicitly-does-not-change list. I verified the mechanism choice against A1's actual text: §8.1.2 reads "parentage, naming, and grant data only" and §8.1.3 "exactly two runtime functions" — both exhaustive phrasings, so an express amendment (not interpretation) is the structurally correct route. My round-2 review had accepted the §1.1 classification as sitting inside A1's purpose; terra's blocker was right that the exhaustive wording required amendment, and this fix is the honest one. The amendment carries its ruling provenance and mirrors A1's own addition route.
Repointed citations: hierarchy-schema's Amendment-1 note and §1.1 now cite A2 §9.1.1 expressly ("relies on that amendment, not on a reinterpretation of A1"); §6.7 cites "A1 §8.3 acceptance 3, as narrowed by A2 §9.1.2." Verified: zero stale reinterpretation language remains.
§6.4 outbox predicate: the audit witness now pins state row + event + outbox record as one transaction (REQ-AUD-001), with rollback leaving neither event nor outbox record; §6.9's cross-reference restated to match — closing the prior gap where outbox atomicity was §5.2-prose-only.
Citation hygiene: §2.8's "Ruling 4 §5.2" → "contract 3 §5.2 (Ruling 4)"; zero stale refs (measured).
No regression: §2/§5/§6 numbering still sequential; all five Ruling-4b decision texts intact; prettier clean on all three touched docs; delta touches only the fix sites.
CI: running on this head. Merge per the recorded plan (confirmation ruling to Jason).
**APPROVED (round-3 delta) — rev-code-01, pinned to head `9819666b9d1f6dddb7cf88e696bf98e4e5648c44`** (sole parent = my reviewed `df1e65ab`, review id 348; head re-verified unmoved immediately before posting). Delta read in full (+73/−14, two files) — terra's round-2 blockers, each verified:
1. **SOT Amendment A2 (the substantive fix):** native-kanban-sot.md gains §9, an express amendment to A1 grounded on Ruling 4b, with exactly two modifications: §9.1.1 extends A1 §8.1.2's class-data constraint to additionally admit the single `companies.visibility` column (widened for nothing else), and §9.1.2 extends A1 §8.1.3's function enumeration with the company directory as an express narrow read-only disclosure — sole carve-out to §8.3's no-existence-oracle acceptance — plus a §9.2 explicitly-does-not-change list. I verified the mechanism choice against A1's actual text: §8.1.2 reads "parentage, naming, and grant data **only**" and §8.1.3 "exactly **two** runtime functions" — both exhaustive phrasings, so an express amendment (not interpretation) is the structurally correct route. My round-2 review had accepted the §1.1 classification as sitting inside A1's purpose; terra's blocker was right that the exhaustive wording required amendment, and this fix is the honest one. The amendment carries its ruling provenance and mirrors A1's own addition route.
2. **Repointed citations:** hierarchy-schema's Amendment-1 note and §1.1 now cite A2 §9.1.1 expressly ("relies on that amendment, not on a reinterpretation of A1"); §6.7 cites "A1 §8.3 acceptance 3, as narrowed by A2 §9.1.2." Verified: zero stale reinterpretation language remains.
3. **§6.4 outbox predicate:** the audit witness now pins state row + event + outbox record as one transaction (REQ-AUD-001), with rollback leaving neither event nor outbox record; §6.9's cross-reference restated to match — closing the prior gap where outbox atomicity was §5.2-prose-only.
4. **Citation hygiene:** §2.8's "Ruling 4 §5.2" → "contract 3 §5.2 (Ruling 4)"; zero stale refs (measured).
**No regression:** §2/§5/§6 numbering still sequential; all five Ruling-4b decision texts intact; prettier clean on all three touched docs; delta touches only the fix sites.
CI: running on this head. Merge per the recorded plan (confirmation ruling to Jason).
- §6.4 rollback witness now requires no state effect on rollback (create
leaves no row; rename/transfer/visibility change leave prior values;
delete/revoke leave the row present) alongside no event and no outbox
record — all three REQ-AUD-001 legs; §6.9 cross-ref mirrors it.
- §2.8 no longer authorizes a join-request runtime surface: the
see-and-ask-to-join flow (Ruling 4b decision 5) is deferred in its
entirety to its follow-up contract, with §2.8's invariants pre-binding
it; A2 §9.2 gains the matching express exclusion (that contract must
amend A2's enumeration before any join-request surface exists).
fred
dismissed rev-code-01's review 2026-08-28 19:59:05 +00:00
Reason:
New commits pushed, approval review dismissed automatically according to repository settings
rev-code-01
approved these changes 2026-08-28 20:00:24 +00:00
APPROVED (round-4 delta) — rev-code-01, pinned to head 146304d1b017b625310ddc897fae8da13d49b871 (sole parent = my reviewed 9819666b, review id 349; head re-verified unmoved immediately before posting). Delta read in full (+30/−13, two files) — terra's round-3 blockers, each verified:
Rollback state predicate (§6.4/§6.9): the witness now requires all three REQ-AUD-001 legs on rollback — no event, no outbox record, AND no state effect, with per-mutation-class state expectations spelled out (create → no row; rename/transfer/visibility → prior values; delete/revoke → row present), and §6.9's cross-reference restated to match. This closes a real witness gap: the prior form proved only audit-residue absence, which an implementation that rolled back the audit but left state effects could pass; the witness is now total over commit-or-rollback-together.
Join-flow deferral (§2.8 + A2 §9.2): §2.8 now states in bold that this contract authorizes NO join-request runtime surface — the flow in its entirety (submit ability, transport, storage, lifecycle) is a follow-up contract; until it ratifies the directory's only function is the read-only listing ("A2 §9.1.2 admits nothing more"); the two pre-binding invariants remain. A2 §9.2 gains the express exclusion as new item 2 (future flow contract must amend the enumeration before any join-request surface exists), with subsequent items renumbered 3-5 — sequential, verified. Stale authorizing language measured gone ("may request to join", "supports a see-and-ask": zero hits); the invariants measured present. This is the structurally right scoping: Ruling 4b decision 5 wants the flow, but no contract had ratified its surface — deferral in full with an amend-before-exists gate at the A2 level is correct.
No regression: §2/§5/§6 numbering still sequential; all five Ruling-4b decisions otherwise intact (D1-D4 spot-verified); prettier clean on both touched files; delta scoped to the two fix sites.
CI: running on this head. Merge per the recorded plan (confirmation ruling to Jason).
**APPROVED (round-4 delta) — rev-code-01, pinned to head `146304d1b017b625310ddc897fae8da13d49b871`** (sole parent = my reviewed `9819666b`, review id 349; head re-verified unmoved immediately before posting). Delta read in full (+30/−13, two files) — terra's round-3 blockers, each verified:
1. **Rollback state predicate (§6.4/§6.9):** the witness now requires all three REQ-AUD-001 legs on rollback — no event, no outbox record, AND no state effect, with per-mutation-class state expectations spelled out (create → no row; rename/transfer/visibility → prior values; delete/revoke → row present), and §6.9's cross-reference restated to match. This closes a real witness gap: the prior form proved only audit-residue absence, which an implementation that rolled back the audit but left state effects could pass; the witness is now total over commit-or-rollback-together.
2. **Join-flow deferral (§2.8 + A2 §9.2):** §2.8 now states in bold that this contract authorizes NO join-request runtime surface — the flow in its entirety (submit ability, transport, storage, lifecycle) is a follow-up contract; until it ratifies the directory's only function is the read-only listing ("A2 §9.1.2 admits nothing more"); the two pre-binding invariants remain. A2 §9.2 gains the express exclusion as new item 2 (future flow contract must amend the enumeration before any join-request surface exists), with subsequent items renumbered 3-5 — sequential, verified. Stale authorizing language measured gone ("may request to join", "supports a see-and-ask": zero hits); the invariants measured present. This is the structurally right scoping: Ruling 4b decision 5 wants the flow, but no contract had ratified its surface — deferral in full with an amend-before-exists gate at the A2 level is correct.
**No regression:** §2/§5/§6 numbering still sequential; all five Ruling-4b decisions otherwise intact (D1-D4 spot-verified); prettier clean on both touched files; delta scoped to the two fix sites.
CI: running on this head. Merge per the recorded plan (confirmation ruling to Jason).
fred
merged commit bd749831b1 into next2026-08-28 20:17:36 +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.
Ruling 4b amendment — company visibility classes (contracts 1 + 3)
Encodes Ruling 4b (webui-audit lane, ruled by Jason 2026-08-27) as a contract amendment. Docs only; +93/-7 across two files. Unblocked by #1436's merge (pushing earlier would have invalidated its head-pinned approval).
The five ruled decisions and where each lands
visibilitycolumn (text NOT NULL DEFAULTprivate, CHECKprivate|directory) + new §2.8 semantics. Ruling 4 open creation survives: it creates private companies.Contract 3 (onboarding-wizard §5.2)
Marked RULED AGREED (2026-08-27); amended to state creation always yields a private company, accepts no visibility argument, and that directory publishing is a separate gated mutation.
Witnesses
§6.1: visibility CHECK + DEFAULT witnessed (real PG per §6.8). New §6.9: directory read closed-field assertion; private companies never in the directory (with granted-reader control); disclosure ≠ authority (subtree/aggregates still refused); owner-cannot-publish refusal with admin accept control; creation-is-private; audit event with old/new values.
After merge: confirmation ruling goes to Jason per the recorded plan.
🤖 Generated with Claude Code
https://claude.ai/code/session_01XnH8KTL4PNTpEnpubcmiRn
APPROVED — rev-code-01, pinned to head
4e643e0d0f1b56964075fd80f6d9a958c4e8e8aa(re-verified unmoved immediately before posting).Scope: 2 files, +93/−7 — the Ruling 4b amendment to contracts 1 and 3. Verified against the ruling record (
RULINGS.mdRuling 4b, five decisions) and merged contract 2, decision by decision:visibility(text NOT NULL DEFAULTprivate, CHECKprivate|directory); §2.8 defines both classes with private as the resting state and Ruling 4's open creation surviving (creates private companies). Fidelity: exact.owneras such may NOT change visibility. Fidelity: exact, including the deferred-capability honesty.Cross-reference integrity (all re-measured): §2 items now 1–8, §5 items 1–5, §6 items 1–9 — all sequential, no renumber collisions; every new §2.8/§5.5/§6.9/§6.7 reference resolves to an existing heading; §6.2's column-allowlist witness now implicitly covers the new column via §2.1's declared set (the exhaustive-set rule covers it — the §6.1 additions witness the CHECK/DEFAULT directly).
Contract 3 side: §5.2's decision marked RULED AGREED with the Ruling 4 overlay — creation always yields a private company, accepts no visibility argument, publishing is a separate gated mutation; the deny-by-default sentence correctly retired with the ruling recorded. Amendment preamble present on both files.
Sequencing: base is next@f8e1b43b (the #1436 merge — matching the PR body's unblocking rationale); merged next's hierarchy-schema.md measured to contain zero
visibilityoccurrences, so this PR is a clean amendment of the merged contract, not a conflict with in-flight heads.Gates: pinned prettier clean on both files; docs-only diff (typecheck/lint unaffected — the standard gates were green at this base across the morning's PRs and no TS surface changed).
Non-blocking:
visibilitycolumn, so the migration + witness additions (CHECK, DEFAULT, §6.9 witnesses) now ride the next hierarchy implementation slice — worth an explicit line in that slice's brief so the contract-vs-schema gap is visible until it closes.CI note: 2931 running at review time. Merge per the recorded plan includes the confirmation ruling to Jason.
New commits pushed, approval review dismissed automatically according to repository settings
APPROVED (delta re-review) — rev-code-01, pinned to head
df1e65abc2ef5f697176202e3c50cc0aa82074c7(sole parent = my reviewed4e643e0d, review id 347; head re-verified unmoved immediately before posting). Delta read in full (+22/−5, two files) — terra's three round-1 blockers, each verified fixed:No regression: all five Ruling-4b decisions intact (D2 owner-cannot-publish and D4 disclosure-nothing-else spot-verified present); §2/§5/§6 numbering still sequential 1-8/1-5/1-9; cross-references resolve; prettier clean on both files; delta touches only the three fix sites (name-status = the two docs, no other hunks).
CI: running on this head at review time. Merge per the recorded plan (confirmation ruling to Jason).
New commits pushed, approval review dismissed automatically according to repository settings
APPROVED (round-3 delta) — rev-code-01, pinned to head
9819666b9d1f6dddb7cf88e696bf98e4e5648c44(sole parent = my revieweddf1e65ab, review id 348; head re-verified unmoved immediately before posting). Delta read in full (+73/−14, two files) — terra's round-2 blockers, each verified:companies.visibilitycolumn (widened for nothing else), and §9.1.2 extends A1 §8.1.3's function enumeration with the company directory as an express narrow read-only disclosure — sole carve-out to §8.3's no-existence-oracle acceptance — plus a §9.2 explicitly-does-not-change list. I verified the mechanism choice against A1's actual text: §8.1.2 reads "parentage, naming, and grant data only" and §8.1.3 "exactly two runtime functions" — both exhaustive phrasings, so an express amendment (not interpretation) is the structurally correct route. My round-2 review had accepted the §1.1 classification as sitting inside A1's purpose; terra's blocker was right that the exhaustive wording required amendment, and this fix is the honest one. The amendment carries its ruling provenance and mirrors A1's own addition route.No regression: §2/§5/§6 numbering still sequential; all five Ruling-4b decision texts intact; prettier clean on all three touched docs; delta touches only the fix sites.
CI: running on this head. Merge per the recorded plan (confirmation ruling to Jason).
New commits pushed, approval review dismissed automatically according to repository settings
APPROVED (round-4 delta) — rev-code-01, pinned to head
146304d1b017b625310ddc897fae8da13d49b871(sole parent = my reviewed9819666b, review id 349; head re-verified unmoved immediately before posting). Delta read in full (+30/−13, two files) — terra's round-3 blockers, each verified:No regression: §2/§5/§6 numbering still sequential; all five Ruling-4b decisions otherwise intact (D1-D4 spot-verified); prettier clean on both touched files; delta scoped to the two fix sites.
CI: running on this head. Merge per the recorded plan (confirmation ruling to Jason).