Repository navigation
Conversation
An exit record could close a boot as complete while an executed command had no witness yet; the reply left the machine unsigned. TLC 2.19: cead.cfg 473,888 distinct states, 36 s; tree.cfg 2,185,268, 2m18s. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
e7a7de4: Witness a call when its command ends, and sign the answer
|
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
8ea6b3b: Block a process until its command ends, as the harness does
|
…one record Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
7430236: Specify the record encoding in Lean: canonical, so a signature names one record
|
|
a125521: Prove the log's acceptance for every log size
|
… tree Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
e2a11de: Name each call's process in its records, so the log holds the process tree
|
…nd place Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Drop the hash chain: a signature already fixes each record's author and place
|
…s its root Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
9aa3245: Make every window replayable from the log, and prove no tree outspends its root
|
…o!() Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
a06b1f7: Skeleton: one type per noun, one signature per action, every body todo!()
|
…ced here Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
07d6ca1: Give every noun its home in code, and write down the method as practiced here
|
…tial test Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
f5b34de: Fill record: the Lean codec byte for byte, held to it by the differential test
|
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
b3a35d6: Fill meter: the Lean definitions, held to them by the differential test
|
|
c0252ab: Fill window: it only grows, and the log replays it as Lean does
|
|
093e0f5: Fill bounded: a call returns its output whole or not at all
|
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
9f197ae to
f8a7d37
Compare
…og replays Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
f8a7d37: Fill log: keep and refuse as Lean's accept does, and verify signatures
(I amended this commit and force-pushed once, before anything referenced it. From now on I only add commits.) |
|
fe8a4ab: Spill output that is not text, so the window holds exactly what the log replays
|
|
aab9953: Fill the gateway and the wire: frames, spans, and Converse through curl
|
|
0bb9318 and 09aa4dc: Fill the signer, rights and roles; move test modules to the end
|
…cannot be stabilized Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
2def4b3: Say what the three artifacts are for: a conversation that shows what cannot be stabilized
|
The repo carries its own skill, so a clone anywhere (a remote box, a
phone session's sandbox) scopes cead's work the way it is done here, for
Codex and Claude Code alike.
## What this PR does
- `.agents/skills/slice/SKILL.md`: **slice**, cead's own scoping skill,
named for CODE.md's Method step 2 ("a PR takes a slice of the spec"). It
settles a PR's slice (the spec's actions and properties) and its
description before any spec, Lean or Rust. Each round covers what
applies: whether the spec changes (then the first commit), which
functions a skeptic must trust (Lean), the shape before the skeleton,
nouns into CODE.md's table with their type homes and terms from OSTEP or
ocap, the RLM thesis, dependencies one crate at a time, structure only
when required. It opens with the principle from #13: slicing is a
conversation, not a step toward automation.
- `.claude/skills → ../.agents/skills`: one link for every repo skill,
the pattern of `CLAUDE.md → AGENTS.md`. `.agents/skills` is where Codex
reads repo skills; `.claude/skills` is Claude Code's.
- `.gitignore`: `.claude/*` stays local (worktrees, handoffs, settings)
except `.claude/skills`.
- AGENTS.md says where skills live.
## What this PR does not do
- Touch the general `scope` skill in `~/dev/skills`: it stays Roone's
for scoping any work; `slice` is cead's.
- Add other skills.
## Merge requirements
- [x] In a fresh clone from GitHub, Codex lists `slice` (`codex exec`,
read-only) and Claude Code lists `slice` (`claude -p`), both through the
symlinked directory; worktrees and handoffs stay ignored.
- [x] No name collision: Claude Code lists `slice` from the repo and
`scope` from Roone's user skills.
- `.gitignore` conflicts with #13's (`spec/.lake/`); resolved in #13 by
merging main after this lands, not here.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The first end-to-end job, as a Recursive Language Model: Cloud Hypervisor boots one machine, unattested; its report is the first record; the root process drives a shell and fans work out to
agentsub-processes; the root's reply ends the job and is signed into the log. Graded mechanically on the host. From Horizon #7 ("loop: one boot, one process, a reply" and "agent and meters", merged here because the RLM thesis is the harness: a loop without programmatic sub-calls is context offloading alone, which the RLM work shows breaks down over long horizons). Builds on the spec in #11 and the method in #12.Spec slice: layers 1 and 3, one boot and its process tree (
Boot,Start,Dispatch,Issue,Decide,Witness,Finish,Exhaust,Timeout,ReapChild,Reap,Leave,Arrive; properties 1–11 and 14–19).What this PR does
Decidesends the decision and starts the command; the process stays blocked untilWitness, when the command ends however it ends (a foregroundagentends when its child is reaped).Timeoutends the root process, killing the tree;Reapis the only exit and requires every command witnessed, so an exit record never hides a gap. The exit record carries the root's reply: the answer is signed. Call records name the process that ran them and a spawning decision names its child, so the log holds the process tree. Properties 18 (a live process is blocked exactly while it waits) and 19 (ProcessTree).x=$(agent "…" < slice),agent … > a & wait; a child's answer is its stdout, in a file or variable until read.killreaches only descendants.exit 0 · 48213 bytes → /spill/12), and queries that file like any other state. Domain-free by construction.limit; no eviction. So each call's window begins with the previous call's bytes (prefix-stable).replayreads, so the log and the forensics tool share one), written by the operator'sceadon the host from records over vsock, applyingArrive's checks. Trusted-host mode only: a report must be unattested until the confidential machine PR checks SNP reports.ed25519-dalek,sha2,rustix, andserde_jsonin the gateway only. Bedrock through an API key andcurlon the host, if API keys cover Converse; otherwiseaws-sigv4returns as a question.differentialexecutable runs the spec on random inputs and prints bytes and verdicts;cargo testcompares):aws-sigv4plus a small HTTP client, each dependency approved at the fill that needs it).[call 12/100] $).What this PR does not do
Fork, snapshot or recovery (Horizon: machine fork); attestation (Horizon: confidential machine). The report path is built; its attestation is none.
The tracer (the witness here is the harness's view of the command's end), policy beyond permit-all, the core/task disk split (Horizon).
Revoke a right from a running child: revocation is
kill.Evict from a window.
Split the crate.
A leaderboard claim, or a file-tree task: CodeQA ships no tree, so the first job tests reaching one large context through a shell, not navigating a repository. Tree-shaped tasks (the SWE-bench family) are later evals.
The task: CodeQA (LongBench v2's code repository understanding split, Apache-2.0): multiple-choice questions over a whole repository given as one concatenated text (0.1M–16.2M characters; no file paths or separators, so no tree). 20 of its 50 questions, chosen before any run, stratified by its difficulty and length labels. The answer is a letter: the root's reply; the grader is exact match on the host.
Three-way comparison, one variable, the RLM paper's design in our terms: the same questions, model (Sonnet 5.5 on Bedrock) and sub-call model; only how the model reaches the context differs. Base: in the prompt, one call; a context that does not fit scores as a failure. RLM: the reference implementation (alexzhang13/rlm, MIT), the context as a REPL variable, with an adapter for Bedrock (its Anthropic client swapped for the SDK's
AnthropicBedrock). cead: the context as a file in the machine,agentsub-calls in shell. Scored as accuracy and cost per question, inference vs everything else. The RLM paper reports CodeQA with GPT-5 at about 20–24% base and 60–62% RLM, depending on version.Open, scoped before the skeleton
Merge requirements
tree.cfgreceipt run at 3 processes, depth 2.cargo test.cead runanswers the 20 CodeQA questions end to end, a parent reading a child's answer from a file, graded on the host; base and RLM arms run on the same questions and model.killreaches only descendants; no zombie after a job.cargo clippy --all-targets -- -D warningsandcargo testgreen.Record
cead.cfg315,202 distinct states, 25 s;tree.cfg769,040, 48 s. A first cut that let a process run on before its command was witnessed was sound but unfaithful and cost 2,185,268 states, 2m18s; matching the harness removed both.Reapwithout its witness guard →Complete; reply dropped →FinishHonest; witness with the wrong id →Complete;Decidereadying on allow →BlockedWaits;Snapshotwithout its witness guard →BlockedWaits;Witnessnot waiting for the child →BlockedWaits; spawning decision without its child, and intent, decision or witness naming the root instead of the process →ProcessTree.tree.cfgat 3 processes, depth 2 (every property, liveness included): 26,259,440 distinct states, depth 37, 38m01s, no error. The complete state space; Specify cead as a system in TLA+ #11 had stopped this bound past 11M.IntentFirst,LogOnlyGrows,DenyNeverRuns, call limit viaTypeOK,BootEnds,OnlyMachine×2,ExecutedOnce,Unambiguous,FinishHonest,Complete,ReportFirst,Rooted,OneOutcome×4,OnProcessors,WithinMeter,Attenuated×2,KillReach). Two need larger bounds: rights attenuation needs 3 processes at depth 2, a second recovery needs 3 boots.propextandQuot.sound(the meter proof alsoClassical.choice), nosorry. Five meter mutations each break the proof. Each of the 9 acceptance guards replaced byTruebreaks a proof. The hash chain was dropped (Q21): under KeySecret a signature already fixes each record's author and place.🤖 Generated with Claude Code