Skip to content

docs(design): convert hard tabs to spaces in SEA-1442 sentinels record - #289

Open
seal-agent wants to merge 1 commit into
mainfrom
compass-runner-1442-doc-tabs
Open

docs(design): convert hard tabs to spaces in SEA-1442 sentinels record#289
seal-agent wants to merge 1 commit into
mainfrom
compass-runner-1442-doc-tabs

Conversation

@seal-agent

@seal-agent seal-agent commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

The Go code fences in the compass-runner gateway/operator-fault error
sentinels design record carried literal tabs (pasted from gofmt output),
tripping markdownlint MD010/no-hard-tabs on the push-to-main full sweep.
Convert the 17 leading tabs to spaces at 2-per-indent-level, matching the
universal repo convention for Go fences in design docs. Content-preserving;
no change to the frozen contract.

Co-authored-by: Matt Wilkinson matt@rigel.build

@linear-code

linear-code Bot commented Aug 12, 2026

Copy link
Copy Markdown

SEA-1442

seal-agent added a commit that referenced this pull request Aug 12, 2026
Add `docs/operations/dogfood-provisioning.md` — a step-by-step runbook for bringing a Compass **server + runner** pair up on a single host over the authenticated TLS network door, using only the binaries this repository already ships (`compass-server`, `compass-runner`, `compass-mint-runner-token`, `compass-gen-cert` under `go/cmd/`). No new tooling.

Scope is the loopback bring-up that produces the `https://127.0.0.1:8443` door. Serving it onto a tailnet and baking the UI bundle are called out as separate downstream steps that consume this door, not covered here.

Contents:

- **Prerequisites** — fail-fast, each tied to the exact enforcing code path (Go toolchain, a reachable Postgres + DSN, state dir).
- **Two-shell bring-up** — server (Shell 1) and runner (Shell 2), both foreground/long-lived, with cert generation, runner-token minting, and runner-trust steps.
- **Verify** — `curl` against the door (no reflection service is registered, so `grpcurl` is not an option), plus the ListAccounts-over-socket step that yields the bootstrap-admin account id.
- **Accepted-risk** notes on runner-token lifetime and single-operator exposure.

Every code citation is source-verified against the current tree. State-dir creation follows the ruled `mkdir -p "$STATE" && chmod 700 "$STATE"` form (not `mkdir -m 700`).

Stacked on #289 (`compass-runner-1442-doc-tabs`): this is a docs PR, so the whole-repo markdownlint CI gate runs and would red on main's pre-existing hard-tab errors in the SEA-1442 sentinels record until #289 lands. Files are disjoint (this PR touches only the new runbook). **Merge order: #289 first, then this PR.** Once #289 merges I will rebase this onto main and re-verify CI.

Verified: CI-exact whole-repo `moon run root:markdownlint` = 0 errors across 84 files on this stacked tree.

Spec-impact: none. Refs SEA-1943.

Co-authored-by: Matt Wilkinson <matt@sealedsecurity.com>

tmp
seal-agent added a commit that referenced this pull request Aug 12, 2026
Add `docs/operations/dogfood-provisioning.md` — a step-by-step runbook for bringing a Compass **server + runner** pair up on a single host over the authenticated TLS network door, using only the binaries this repository already ships (`compass-server`, `compass-runner`, `compass-mint-runner-token`, `compass-gen-cert` under `go/cmd/`). No new tooling.

Scope is the loopback bring-up that produces the `https://127.0.0.1:8443` door. Serving it onto a tailnet and baking the UI bundle are called out as separate downstream steps that consume this door, not covered here.

Contents:

- **Prerequisites** — fail-fast, each tied to the exact enforcing code path (Go toolchain, a reachable Postgres + DSN, state dir).
- **Two-shell bring-up** — server (Shell 1) and runner (Shell 2), both foreground/long-lived, with cert generation, runner-token minting, and runner-trust steps.
- **Verify** — `curl` against the door (no reflection service is registered, so `grpcurl` is not an option), plus the ListAccounts-over-socket step that yields the bootstrap-admin account id.
- **Accepted-risk** notes on runner-token lifetime and single-operator exposure.

Every code citation is source-verified against the current tree. State-dir creation follows the ruled `mkdir -p "$STATE" && chmod 700 "$STATE"` form (not `mkdir -m 700`).

Stacked on #289 (`compass-runner-1442-doc-tabs`): this is a docs PR, so the whole-repo markdownlint CI gate runs and would red on main's pre-existing hard-tab errors in the SEA-1442 sentinels record until #289 lands. Files are disjoint (this PR touches only the new runbook). **Merge order: #289 first, then this PR.** Once #289 merges I will rebase this onto main and re-verify CI.

Verified: CI-exact whole-repo `moon run root:markdownlint` = 0 errors across 84 files on this stacked tree.

Spec-impact: none. Refs SEA-1943.

Co-authored-by: Matt Wilkinson <matt@sealedsecurity.com>

tmp

tmp2
seal-agent added a commit that referenced this pull request Aug 12, 2026
Add `docs/operations/dogfood-provisioning.md` — a step-by-step runbook for bringing a Compass **server + runner** pair up on a single host over the authenticated TLS network door, using only the binaries this repository already ships (`compass-server`, `compass-runner`, `compass-mint-runner-token`, `compass-gen-cert` under `go/cmd/`). No new tooling.

Scope is the loopback bring-up that produces the `https://127.0.0.1:8443` door. Serving it onto a tailnet and baking the UI bundle are called out as separate downstream steps that consume this door, not covered here.

Contents:

- **Prerequisites** — fail-fast, each tied to the exact enforcing code path (Go toolchain, a reachable Postgres + DSN, state dir).
- **Two-shell bring-up** — server (Shell 1) and runner (Shell 2), both foreground/long-lived, with cert generation, runner-token minting, and runner-trust steps.
- **Verify** — `curl` against the door (no reflection service is registered, so `grpcurl` is not an option), plus the ListAccounts-over-socket step that yields the bootstrap-admin account id.
- **Accepted-risk** notes on runner-token lifetime and single-operator exposure.

Every code citation is source-verified against the current tree. State-dir creation follows the ruled `mkdir -p "$STATE" && chmod 700 "$STATE"` form (not `mkdir -m 700`).

Stacked on #289 (`compass-runner-1442-doc-tabs`): this is a docs PR, so the whole-repo markdownlint CI gate runs and would red on main's pre-existing hard-tab errors in the SEA-1442 sentinels record until #289 lands. Files are disjoint (this PR touches only the new runbook). **Merge order: #289 first, then this PR.** Once #289 merges I will rebase this onto main and re-verify CI.

Verified: CI-exact whole-repo `moon run root:markdownlint` = 0 errors across 84 files on this stacked tree.

Spec-impact: none. Refs SEA-1943.

Co-authored-by: Matt Wilkinson <matt@sealedsecurity.com>

tmp

tmp2

tmp3
seal-agent added a commit that referenced this pull request Aug 12, 2026
Add `docs/operations/dogfood-provisioning.md` — a step-by-step runbook for bringing a Compass **server + runner** pair up on a single host over the authenticated TLS network door, using only the binaries this repository already ships (`compass-server`, `compass-runner`, `compass-mint-runner-token`, `compass-gen-cert` under `go/cmd/`). No new tooling.

Scope is the loopback bring-up that produces the `https://127.0.0.1:8443` door. Serving it onto a tailnet and baking the UI bundle are called out as separate downstream steps that consume this door, not covered here.

Contents:

- **Prerequisites** — fail-fast, each tied to the exact enforcing code path (Go toolchain, a reachable Postgres + DSN, state dir).
- **Two-shell bring-up** — server (Shell 1) and runner (Shell 2), both foreground/long-lived, with cert generation, runner-token minting, and runner-trust steps.
- **Verify** — `curl` against the door (no reflection service is registered, so `grpcurl` is not an option), plus the ListAccounts-over-socket step that yields the bootstrap-admin account id.
- **Accepted-risk** notes on runner-token lifetime and single-operator exposure.

Every code citation is source-verified against the current tree. State-dir creation follows the ruled `mkdir -p "$STATE" && chmod 700 "$STATE"` form (not `mkdir -m 700`).

Stacked on #289 (`compass-runner-1442-doc-tabs`): this is a docs PR, so the whole-repo markdownlint CI gate runs and would red on main's pre-existing hard-tab errors in the SEA-1442 sentinels record until #289 lands. Files are disjoint (this PR touches only the new runbook). **Merge order: #289 first, then this PR.** Once #289 merges I will rebase this onto main and re-verify CI.

Verified: CI-exact whole-repo `moon run root:markdownlint` = 0 errors across 84 files on this stacked tree.

Spec-impact: none. Refs SEA-1943.

Co-authored-by: Matt Wilkinson <matt@sealedsecurity.com>

tmp

tmp2

tmp3
seal-agent added a commit that referenced this pull request Aug 12, 2026
Add `docs/operations/dogfood-provisioning.md` — a step-by-step runbook for bringing a Compass **server + runner** pair up on a single host over the authenticated TLS network door, using only the binaries this repository already ships (`compass-server`, `compass-runner`, `compass-mint-runner-token`, `compass-gen-cert` under `go/cmd/`). No new tooling.

Scope is the loopback bring-up that produces the `https://127.0.0.1:8443` door. Serving it onto a tailnet and baking the UI bundle are called out as separate downstream steps that consume this door, not covered here.

Contents:

- **Prerequisites** — fail-fast, each tied to the exact enforcing code path (Go toolchain, a reachable Postgres + DSN, state dir).
- **Two-shell bring-up** — server (Shell 1) and runner (Shell 2), both foreground/long-lived, with cert generation, runner-token minting, and runner-trust steps.
- **Verify** — `curl` against the door (no reflection service is registered, so `grpcurl` is not an option), plus the ListAccounts-over-socket step that yields the bootstrap-admin account id.
- **Accepted-risk** notes on runner-token lifetime and single-operator exposure.

Every code citation is source-verified against the current tree. State-dir creation follows the ruled `mkdir -p "$STATE" && chmod 700 "$STATE"` form (not `mkdir -m 700`).

Stacked on #289 (`compass-runner-1442-doc-tabs`): this is a docs PR, so the whole-repo markdownlint CI gate runs and would red on main's pre-existing hard-tab errors in the SEA-1442 sentinels record until #289 lands. Files are disjoint (this PR touches only the new runbook). **Merge order: #289 first, then this PR.** Once #289 merges I will rebase this onto main and re-verify CI.

Verified: CI-exact whole-repo `moon run root:markdownlint` = 0 errors across 84 files on this stacked tree.

Spec-impact: none. Refs SEA-1943.

Co-authored-by: Matt Wilkinson <matt@sealedsecurity.com>

tmp

tmp2

tmp3

tmp4
@seal-agent
seal-agent force-pushed the compass-runner-1442-doc-tabs branch from 9c8a708 to f3f83d6 Compare August 13, 2026 00:43
The Go code fences in the compass-runner gateway/operator-fault error
sentinels design record carried literal tabs (pasted from gofmt output),
tripping markdownlint MD010/no-hard-tabs on the push-to-main full sweep.
Convert the 17 leading tabs to spaces at 2-per-indent-level, matching the
universal repo convention for Go fences in design docs. Content-preserving;
no change to the frozen contract.

Co-authored-by: Matt Wilkinson <matt@rigel.build>
@seal-agent
seal-agent force-pushed the compass-runner-1442-doc-tabs branch from f3f83d6 to 5888b39 Compare August 13, 2026 00:45
seal-agent added a commit that referenced this pull request Aug 13, 2026
…or first turn (SEA-1820 case-1)

## What

Design record for **SEA-1820 case-1**: the `@compass` system-sender representation and the root-supervisor first-turn Setup-thread flow. The merged first-turn-delivery record froze the *mechanism* (`@compass` = the system-sender alias) and scoped these two things out to this follow-up; this record decides exactly them.

Pure design — no code. `docs/designs/product/compass-system-sender-first-turn/design.md`.

## Decisions (Matt-ruled on the draft; folded, frozen on merge)

- **(A) `@compass` representation — a dedicated `system` account type.** A third first-class account shape alongside user and agent (not a `user_accounts` subtype, not a bare `accounts` row), mirroring the existing subtype pattern end to end: a `system_accounts` table, `Account.System`, a third `scanAccount` arm + `LEFT JOIN`, a proto `SystemAccount system = 12` oneof case (+ regen), a third `accountToWire` arm, and a UI arm. Seeded at startup via an idempotent `EnsureSystemAccount` beside `BootstrapAdmin`. The win over a user-subtype: a system row rides only the shared-channel `EXISTS` disjunct in `accountVisibleFromWhere`, so it is cleanly out of BOTH the `ListAccounts` directory and `GetRoster` (agent-only INNER JOIN) with no added exclusion clause. Never-a-deliver-recipient stays **structural** (no `agent_accounts` row ⇒ absent from the agent-only delivery JOIN; pinned by guard tests). Reserved-handle guard (positive grammar + the server's reserved-mention names) + an `IssueToken` refusal make it un-registrable and un-authenticatable.
- **(B) Setup-thread flow** — `postSetupThread` fired from `seedRootSupervisor` on both up-arms, idempotent via a **supervisor-scoped** `client_request_id` (immune to a recreated supervisor), posted as `@compass` into the supervisor's home channel from a `go:embed`'d `setup_thread.md`, riding the built deliver lane. Membership is ensured via a new idempotent `EnsureChannelMember` (not `UpdateChannelMembers`, which chicken-and-egg-gates on the actor already being a member).
- **T-BL absorbs the parent barrier-lift.** The Setup delivery depends on the fresh-start replay barrier being lifted, which is unbuilt on main (no production sender of `AgentControl{replay_complete}`; agent barrier defaults closed). Matt ruled this record's implementation builds it — a Runner fresh-start `replay_complete` send (the TS agent side is already built) — as **T-BL, ordered before T4**.

Plan is T1–T6 + T-BL (T1–T4 + T-BL server/runner lane, T5 compass-ui REQUIRED — the wire shape changes, T6 driver ledger).

## Review posture

Drafted, red-teamed by a `design-critic` pass (per `skill://design`), and reviewed by a `review` agent (0 high / 3 medium / 1 low, all folded). The load-bearing red-team find — the unbuilt fresh-start barrier — is now T-BL above. The three freeze-gating Open Questions were batched to Matt and ruled: OQ-2 (system account type, above), OQ-6 (absorb T-R3 as T-BL), OQ-1 (ledger reconciliation — renumber the parent's four never-landed first-turn rows DL-187..190 + a mapping note, never editing frozen prose; this record's rows follow as DL-191..192). All three are recorded under **Resolved decisions**, not left open. Remaining Open Questions (OQ-4/5/7) are explicit non-load-bearing deferrals.

## CI note

Base is `main@origin` which currently carries a **pre-existing shared markdownlint red** — 17 MD010 hard-tab errors in `docs/designs/platform/compass-runner-gateway-error-sentinels/design.md`, **not this PR's file** (this record lints clean: `markdownlint-cli2` → `0 issues`). That red is fixed by #289 and lifts for every compass PR when #289 merges. It is not a failure of this diff.

Spec-impact: none (product design record; no proto/spec surface changed).
Ledger-impact: none in this PR — the ledger rows (T6) are gated on OQ-1's reconciliation and land in a follow-up per the record; this PR adds a design record only and declares no `DECISIONS.md` delta yet.

Refs SEA-1820.

Co-authored-by: Matt Wilkinson <matt@sealedsecurity.com>
seal-agent added a commit that referenced this pull request Aug 13, 2026
…or first turn (SEA-1820 case-1)

## What

Design record for **SEA-1820 case-1**: the `@compass` system-sender representation and the root-supervisor first-turn Setup-thread flow. The merged first-turn-delivery record froze the *mechanism* (`@compass` = the system-sender alias) and scoped these two things out to this follow-up; this record decides exactly them.

Pure design — no code. `docs/designs/product/compass-system-sender-first-turn/design.md`.

## Decisions (Matt-ruled on the draft; folded, frozen on merge)

- **(A) `@compass` representation — a dedicated `system` account type.** A third first-class account shape alongside user and agent (not a `user_accounts` subtype, not a bare `accounts` row), mirroring the existing subtype pattern end to end: a `system_accounts` table, `Account.System`, a third `scanAccount` arm + `LEFT JOIN`, a proto `SystemAccount system = 12` oneof case (+ regen), a third `accountToWire` arm, and a UI arm. Seeded at startup via an idempotent `EnsureSystemAccount` beside `BootstrapAdmin`. The win over a user-subtype: a system row rides only the shared-channel `EXISTS` disjunct in `accountVisibleFromWhere`, so it is cleanly out of BOTH the `ListAccounts` directory and `GetRoster` (agent-only INNER JOIN) with no added exclusion clause. Never-a-deliver-recipient stays **structural** (no `agent_accounts` row ⇒ absent from the agent-only delivery JOIN; pinned by guard tests). Reserved-handle guard (positive grammar + the server's reserved-mention names) + an `IssueToken` refusal make it un-registrable and un-authenticatable.
- **(B) Setup-thread flow** — `postSetupThread` fired from `seedRootSupervisor` on both up-arms, idempotent via a **supervisor-scoped** `client_request_id` (immune to a recreated supervisor), posted as `@compass` into the supervisor's home channel from a `go:embed`'d `setup_thread.md`, riding the built deliver lane. Membership is ensured via a new idempotent `EnsureChannelMember` (not `UpdateChannelMembers`, which chicken-and-egg-gates on the actor already being a member).
- **T-BL absorbs the parent barrier-lift.** The Setup delivery depends on the fresh-start replay barrier being lifted, which is unbuilt on main (no production sender of `AgentControl{replay_complete}`; agent barrier defaults closed). Matt ruled this record's implementation builds it — a Runner fresh-start `replay_complete` send (the TS agent side is already built) — as **T-BL, ordered before T4**.

Plan is T1–T6 + T-BL (T1–T4 + T-BL server/runner lane, T5 compass-ui REQUIRED — the wire shape changes, T6 driver ledger).

## Review posture

Drafted, red-teamed by a `design-critic` pass (per `skill://design`), and reviewed by a `review` agent (0 high / 3 medium / 1 low, all folded). The load-bearing red-team find — the unbuilt fresh-start barrier — is now T-BL above. The three freeze-gating Open Questions were batched to Matt and ruled: OQ-2 (system account type, above), OQ-6 (absorb T-R3 as T-BL), OQ-1 (ledger reconciliation — renumber the parent's four never-landed first-turn rows DL-187..190 + a mapping note, never editing frozen prose; this record's rows follow as DL-191..192). All three are recorded under **Resolved decisions**, not left open. Remaining Open Questions (OQ-4/5/7) are explicit non-load-bearing deferrals.

## CI note

Base is `main@origin` which currently carries a **pre-existing shared markdownlint red** — 17 MD010 hard-tab errors in `docs/designs/platform/compass-runner-gateway-error-sentinels/design.md`, **not this PR's file** (this record lints clean: `markdownlint-cli2` → `0 issues`). That red is fixed by #289 and lifts for every compass PR when #289 merges. It is not a failure of this diff.

Spec-impact: none (product design record; no proto/spec surface changed).
Ledger-impact: none in this PR — the ledger rows (T6) are gated on OQ-1's reconciliation and land in a follow-up per the record; this PR adds a design record only and declares no `DECISIONS.md` delta yet.

Refs SEA-1820.

Co-authored-by: Matt Wilkinson <matt@sealedsecurity.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant