The operator's decision of 2026-10-06, recorded as theirs. It replaces ADR 0229's withdrawal-brake paragraph (the hourly release). The rest of 0229 stands.
Three states. A consumer is active, retired or deleted. Retired means access disabled (reversibly), marked with when and why, data kept.
Stable removals. Retirement waits for the same unasked set in 5 consecutive passes, 5 s apart, so about 20 s. Additions and changes act at once.
Threshold. More than 3, or more than half of those held (when more than one is held), waits for retire approve|reject <node> <module>. An urgent condition says so.
Cleanup.cleanup list and cleanup delete are controller verbs; the provider does the deleting. Every act goes in the hand-act log. D11 raises cleanup-waiting when something has been retired for more than 30 days.
Per-backend disable, defined. postgres: NOLOGIN plus a role comment. keycloak: client disabled plus attributes. TS providers: their issue-241 remove.
Changes:
New 02-DECISIONS/0230-….
A dated "replaced in part" note in 0229 and a "mechanism changed" note in 0224.
Code PRs on the same branch name: mesh-controller, mesh-catalog, mesh-sdk. Merge this one first or together; it is documentation only.
The operator's decision of 2026-10-06, recorded as theirs. It replaces ADR 0229's withdrawal-brake paragraph (the hourly release). The rest of 0229 stands.
- **Three states.** A consumer is active, retired or deleted. Retired means access disabled (reversibly), marked with when and why, data kept.
- **Stable removals.** Retirement waits for the same unasked set in 5 consecutive passes, 5 s apart, so about 20 s. Additions and changes act at once.
- **Threshold.** More than 3, or more than half of those held (when more than one is held), waits for `retire approve|reject <node> <module>`. An urgent condition says so.
- **Cleanup.** `cleanup list` and `cleanup delete` are controller verbs; the provider does the deleting. Every act goes in the hand-act log. D11 raises `cleanup-waiting` when something has been retired for more than 30 days.
- **Per-backend disable, defined.** postgres: NOLOGIN plus a role comment. keycloak: client disabled plus attributes. TS providers: their issue-241 remove.
Changes:
- New `02-DECISIONS/0230-…`.
- A dated "replaced in part" note in 0229 and a "mechanism changed" note in 0224.
- To-be 45 amended (§1 writers, §2 conditions, §4 D11, §7 hand acts, Phase 2, `code:` gains mesh-sdk).
- To-be 19 gets a short retirement section.
- Index regenerated.
Checks: records, index and cycle all pass.
Code PRs on the same branch name: mesh-controller, mesh-catalog, mesh-sdk. Merge this one first or together; it is documentation only.
§3. A consumer is retired only after 5 consecutive passes and 10 minutes of the same answer. Both constants are named (StableFor and STABLE_FOR_MS), and the record says why 25 s is not enough.
§1/§2 per provider kind:
postgres disables.
keycloak disables.
A TS provider with retire disables.
A TS provider without retire is mark-only: its consumer keeps its access, and remove is never called to retire.
Mark-only list: the ADR lists all 11 TS providers as mark-only until each adds a retire, and notes that a restart forgets a mark-only mark.
Consequences and How-it-is-checked are updated to match.
Other documents:
The 0229 and 0224 notes now say "five passes and ten minutes".
To-be 45 (Phase 2 row and amended note) and to-be 19 have the same wording.
The records, index and cycle checks pass.
Updated in 2c25139.
ADR 0230:
- **§3.** A consumer is retired only after 5 consecutive passes **and** 10 minutes of the same answer. Both constants are named (`StableFor` and `STABLE_FOR_MS`), and the record says why 25 s is not enough.
- **§1/§2 per provider kind:**
- postgres disables.
- keycloak disables.
- A TS provider with `retire` disables.
- A TS provider without `retire` is **mark-only**: its consumer keeps its access, and `remove` is never called to retire.
- **Mark-only list:** the ADR lists all 11 TS providers as mark-only until each adds a `retire`, and notes that a restart forgets a mark-only mark.
- **Consequences and How-it-is-checked** are updated to match.
Other documents:
- The 0229 and 0224 notes now say "five passes and ten minutes".
- To-be 45 (Phase 2 row and amended note) and to-be 19 have the same wording.
The records, index and cycle checks pass.
The operator's decision replaces ADR 0229's hourly release: the mesh no longer
finishes alone what its bound exists to question. To-be 45 and the module
protocol amended; 0229 and 0224 point to where their mechanism moved.
Five passes are 25 s, shorter than a real hiccup; and a TypeScript provider's
remove can destroy, so retiring never calls it. Every TypeScript provider is
mark-only until it gains a retire that disables.
Deliverynovox/hq@89c7a4263d0f — held since 2026-10-06T23:05:28Z
Held for a person: merged without a passing check: only a person decides that it goes on — mesh-delivery.release with why lets it go on.
Delivery plan — builds nothing: the change touches no module of the mesh's graph
Transitions
2026-10-06 23:05 (new) → proposed (announced): novox/hq#135 merged; its head was not heard by this owner, so it is made from the forge's word
2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/hq@89c7a4263d0f` — **held** since 2026-10-06T23:05:28Z
Held for a person: merged without a passing check: only a person decides that it goes on — `mesh-delivery.release` with why lets it go on.
**Delivery plan** — builds nothing: the change touches no module of the mesh's graph
**Transitions**
- 2026-10-06 23:05 (new) → proposed (announced): novox/hq#135 merged; its head was not heard by this owner, so it is made from the forge's word
- 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
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.
The operator's decision of 2026-10-06, recorded as theirs. It replaces ADR 0229's withdrawal-brake paragraph (the hourly release). The rest of 0229 stands.
retire approve|reject <node> <module>. An urgent condition says so.cleanup listandcleanup deleteare controller verbs; the provider does the deleting. Every act goes in the hand-act log. D11 raisescleanup-waitingwhen something has been retired for more than 30 days.Changes:
02-DECISIONS/0230-….code:gains mesh-sdk).Checks: records, index and cycle all pass.
Code PRs on the same branch name: mesh-controller, mesh-catalog, mesh-sdk. Merge this one first or together; it is documentation only.
Updated in
2c25139.ADR 0230:
StableForandSTABLE_FOR_MS), and the record says why 25 s is not enough.retiredisables.retireis mark-only: its consumer keeps its access, andremoveis never called to retire.retire, and notes that a restart forgets a mark-only mark.Other documents:
The records, index and cycle checks pass.
2c251396f2toda136ab40eDelivery
novox/hq@89c7a4263d0f— held since 2026-10-06T23:05:28ZHeld for a person: merged without a passing check: only a person decides that it goes on —
mesh-delivery.releasewith why lets it go on.Delivery plan — builds nothing: the change touches no module of the mesh's graph
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.