35 Commits
Author SHA1 Message Date
kyleandClaude Opus 5.5 f0b39a4766 Record the second review of task 23 and the findings first left out
The review table gains findings 16 to 20, which the two review agents
reported and the first write-up dropped. The independent review of the fix
commits, and what was changed for it, is recorded; task 23's claims about
its tests are corrected. The spec and decisions record the day-long cap, the
ttl_ms bound, the socket-directory rule and the listener's retry.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-22 21:54:28 -07:00
kyleandClaude Opus 5 69f0a0a218 M3a spec: fold in area E's findings; runbook and egress to match
Every request is recorded, unreadable state is recorded as secret, a
refusal that cannot be recorded is an error, and the other cases the
brokerd reference settled. The audit-unavailable and
broker-state-damaged entries name the new messages; egress lists the
development calls to straylight.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-18 23:40:02 -07:00
kyleandClaude Opus 5 43f5b8abc6 M3a spec: fold in the defects the plan's checks found in areas A to D
DecisionRecord's empty struct variants, the verifier's report fields and
region rule, the startup fallback, the IPv4 host rule, Denial, BrokerPort
deadlines and envelope id, the runbook anchor rule, bxctl's --say/--json
and escaping. Recorded in docs/decisions.md; the array-form question is
left open.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-18 23:09:32 -07:00
kyleandClaude Fable 5.1 1008dce351 Decide where reference implementations are still written
From M3a: a full reference for the audit chain and the approval
handoff, the property test's oracle for policy, and compiling
skeletons for everything else. Each plan records what its checks
exposed, and that record decides what the next milestone gets.
Tip T17; the spec's handover section says which check each module has.

Also restores three / examples that an editing tool had decoded
to a plain slash.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 22:28:53 -07:00
kyleandClaude Fable 5.1 0ee375dd03 Record the open M4 decision on approvals too long for one post
Settled: what is being approved is never truncated. Leading option for
Mattermost is a thread of numbered chunks approved on the last post.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 22:23:54 -07:00
kyleandClaude Fable 5.1 9dcb16ff30 Apply P14: the brief's State list names brokerd's session state
broker/sessions/<id>.json holds each session's taint and untrusted
flag. It is written only by brokerd and can be rebuilt from the audit
log's result records.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 22:22:18 -07:00
kyleandClaude Fable 5.1 477e28a759 Close the remaining M3a spec review findings
brokerd internals: the ledger lock over the audit writer and session
state, the pending table's take-it-and-answer rule, sticky
audit_unavailable after a failed write, pure policy functions with an
Ask type that only redecide turns into a Decision, how a waiting
thread detects a lost connection without peek, fixed RunError text.

Approvals: bxctl chat fetches the block from brokerd by id, shows the
parsed arguments with invisible and bidi characters escaped, asks for
the approval id instead of y, and escapes model text. A tool_denied
event carries the reason to the owner.

Also: BrokerPort timeouts, tests for runbook pointers and concurrency,
threat-model notes, P14 for broker/sessions in the brief's State list.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 22:18:13 -07:00
kyleandClaude Fable 5.1 3492734434 Fix seven M3a spec review findings in policy and the audit chain
Policy: a deny grant must apply at every taint; a result's label is
combined over all matching grants and the longest matched path wins
within a mode; a grant of / is invalid.

Audit: a recovered line need not fail to parse; the writer never goes
back to an earlier day's file; --accept-break verifies the whole log
and the break record's fields are all checked, with a seq counted from
lines; the Approval record carries the re-decision's grant and state;
calls with no Result are reported.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 22:13:28 -07:00
kyleandClaude Opus 5 180ef28833 Specify M3a (the decision path) and write the runbook
Split M3 into M3a and M3b, record the M3 design decisions, propose P13
(tool image built by Nix, named by digest), and add docs/runbook.md with an
entry for every fail-closed state, including loopd's existing ones.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-18 21:57:21 -07:00
kyleandClaude Fable 5.1 f238e6a260 Add M2b design spec: the agent loop
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 16:45:41 -07:00
kyleandClaude Fable 5.1 a49db39b54 Brief: add a one-sentence purpose for every role and crate
Requested by the owner so that future readers, agents included, learn
what each piece is for first. No behaviour changes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 13:00:21 -07:00
kyleandClaude Fable 5.1 62ec663a0e Record M2a limits, the accepted availability risk and three more measurements
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 12:53:41 -07:00
kyleandClaude Fable 5.1 eb1b7d2da2 Record emsha and the M2 split; add dependency-vetting lesson
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 12:27:52 -07:00
kyleandClaude Fable 5.1 362f962803 Measure queued-request behaviour and reasoning_control before the M2 design
A request pinned to a busy slot receives no bytes until the slot frees.
reasoning_control ends a thinking block on demand; the capped turn is
re-read once on the next request.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 11:03:55 -07:00
kyleandClaude Fable 5.1 19104a9629 Mark per-milestone review as an M1 experiment
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 01:09:08 -07:00
kyleandClaude Fable 5.1 afdac9ad3e Add pre-M1 design spec
Threat model, data classes and provenance, approvals, IPC framing and
socket topology, the proto type list, log file rules, runtime layout,
the M1 gate, and how work is handed to the implementing model.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 01:08:27 -07:00
kyleandClaude Fable 5.1 2a1fe5576c Record pre-M1 design decisions
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 00:58:49 -07:00
kyleandClaude Fable 5.1 34b2b47656 Note expected extra compute against the M5b open decision
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 00:41:43 -07:00
kyleandClaude Fable 5.1 fbc0f218dc Sync CLAUDE.md and decisions log with the amended brief
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 00:38:54 -07:00
kyleandClaude Fable 5.1 0612d80aa2 Brief P12: inferproxy is required
Approved 2026-09-17. Evidence is in docs/decisions.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 00:38:32 -07:00
kyleandClaude Fable 5.1 a4ebdc11af Brief P11: serving settings are recorded here and owned by the NixOS config
Approved 2026-09-17. Evidence is in docs/decisions.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 00:38:32 -07:00
kyleandClaude Fable 5.1 adab43add1 Brief P10: separate limit for waiting on a slot or a model load
Approved 2026-09-17. Evidence is in docs/decisions.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 00:38:32 -07:00
kyleandClaude Fable 5.1 27b7ff45ee Brief P9: slots are pinned but not reserved; cache loss is a normal event
Approved 2026-09-17. Evidence is in docs/decisions.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 00:38:32 -07:00
kyleandClaude Fable 5.1 e07fddf0ad Brief P8: describe the shared router as deployed
Approved 2026-09-17. Evidence is in docs/decisions.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 00:38:32 -07:00
kyleandClaude Fable 5.1 46918e5208 Brief P7: split the gate into offline and on-device parts
Approved 2026-09-17. Evidence is in docs/decisions.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 00:38:32 -07:00
kyleandClaude Fable 5.1 4fc7ad3deb Brief P6: define Decision in brokerd, DecisionRecord in proto
Approved 2026-09-17. Evidence is in docs/decisions.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 00:38:32 -07:00
kyleandClaude Fable 5.1 e353cd57fa Brief P5: settle on chat-completions with server-side tool parsing
Approved 2026-09-17. Evidence is in docs/decisions.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 00:38:32 -07:00
kyleandClaude Fable 5.1 367573b11e Brief P4: enforce the thinking cap through reasoning_control
Approved 2026-09-17. Evidence is in docs/decisions.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 00:38:32 -07:00
kyleandClaude Fable 5.1 59666e0130 Brief P3: request prompt-processing progress so prefill counts as liveness
Approved 2026-09-17. Evidence is in docs/decisions.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 00:38:32 -07:00
kyleandClaude Fable 5.1 8421d80e87 Brief P2: log and replay assistant messages exactly, drop the thinking-block risk
Approved 2026-09-17. Evidence is in docs/decisions.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 00:38:32 -07:00
kyleandClaude Fable 5.1 790136e94f Brief P1: fix the tools array per epoch, reach other tools through call_tool
Approved 2026-09-17. Evidence is in docs/decisions.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 00:38:32 -07:00
kyleandClaude Fable 5.1 065fe8ce1d Add slot pinning and eviction measurements to M0 findings
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 00:35:36 -07:00
kyleandClaude Fable 5.1 5bd0444aeb Record shared-router decision and the brief changes it implies
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 00:27:53 -07:00
kyleandClaude Fable 5.1 06c05e0023 Add M0 measurement spike and findings
spike/m0.py is throwaway. Findings are in docs/inference-contract.md:
cache reuse and tool parsing pass through chat-completions, the tools
array must stay fixed per epoch, and the shared router cannot meet the
slot contract. Clean throughput and slot pinning are still open because
another session was using the GPU.

docs/decisions.md lists the brief changes this implies as proposals.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 00:22:31 -07:00
kyleandClaude Fable 5.1 96bf688b20 Split kickoff pack into brief, milestones and decisions
docs/design.md now holds only the design brief, as the pack intended.
The session prompt and milestone table move to docs/milestones.md
verbatim. Open decisions move to docs/decisions.md, which also records
the four decisions made at kickoff.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 00:17:55 -07:00