mirror of
https://github.com/profullstack/logicsrc.git
synced 2026-10-01 20:33:50 +00:00
OpenFleet reference implementation: @logicsrc/openfleet 0.1.0 and logicsrc fleet
Ship what docs/openfleet.md describes. The new workspace package holds the record (write once, never overwrite, 0600), the ledger (append-only JSON Lines, merged across ledger*.jsonl by at), the ceiling rules (whole fleet ceiling, narrowed swarm keys, a merge that never widens, refusals by key), claiming and deriving exactly as the spec's "Claiming and deriving" and rule 13, and fold(), which turns any $OPENFLEET_HOME plus the engine rosters into the tree the landing page shows. logicsrc fleet open|cap|tree|stop|log are the sysop's verbs, every one with --json. open and cap exit 4 when OPENFLEET_MEMBER is set; stop exits 4 outside the caller's subtree, ends nested swarms first, goes through each member's own engine (claude stop, moshcode herd kill, tmux kill-pane, a signal for claude-p) and writes one swarm.end per swarm. tree reads claude agents --json --all and ~/.moshcode/herd/sessions.json when it can, draws recordless sessions as roster roots of the implicit fleet, and writes member.end lost for a recorded member its engine no longer lists. Claude Code takes part through hooks: logicsrc fleet hooks install merges SessionStart, UserPromptSubmit, PreToolUse, Stop and SessionEnd into ~/.claude/settings.json without clobbering it, and logicsrc fleet hook <Event> runs each one. SessionStart claims, derives or writes a root record and hands the member its variables through CLAUDE_ENV_FILE; UserPromptSubmit checks the ceiling with the permission mode the engine reports and writes member.start, or refuses the first prompt with exit 2 and ceiling.refuse; PreToolUse denies an edit outside piece.owns; Stop and SessionEnd write member.end. A hand-started root takes the engine's reported approvals before member.start, since the command line only guesses them. Hooks never fail the engine: everything is caught and logged to hooks.log. The spec and the landing page now say what ships, keep Status 0.1, and record the two verified Claude Code limits: a background job dispatched from claude agents gets no launcher environment, and OPENFLEET_* exported at SessionStart reach the member's tools but not later hooks, so hooks key on session_id through $OPENFLEET_HOME/sessions/<session_id>.json. PRD 0008 covers the work. CLI 0.2.1 -> 0.3.0; build and build:cli chains build the package before the CLI; README and docs/cli.md list the group. Tests: 95 in the package (record, ledger merge, every narrower case, the worked example's claim and derive, the folded tree, hook install idempotence, each hook handler including the exit-2 refusal and the PreToolUse deny, every verb with fake deps) and 4 in the CLI. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RZV4zJ2pDZLNN3kE5jFCmV
This commit is contained in:
parent
123ba2e39a
commit
4ceaaaaa1f
34 changed files with 5510 additions and 15 deletions
|
|
@ -54,7 +54,7 @@ const STEPS: Array<[string, string]> = [
|
|||
["1. A human opens a fleet", "Or does nothing, and gets the implicit fleet user@host with a ceiling of depth 1 and no fleet-level approvals: each session the human starts by hand runs its subtree under the approvals it was started with. Only a human opens a fleet or sets its ceiling. A process that carries OPENFLEET_MEMBER is an agent, and the tool refuses it."],
|
||||
["2. An agent spawns a swarm", "It mints a swarm id, writes swarm.spawn to the fleet's ledger with the task, the ceiling it narrowed to, and one piece per member with the paths that member owns, as data. It never widens the ceiling it inherited."],
|
||||
["3. The starter writes the record, the session claims it", "Before each member starts: one JSON file under ~/.openfleet, its path in OPENFLEET_RECORD, copies of fleet, member and swarm in three more variables. The session that starts under an unclaimed record claims it by writing member.start. One that inherits an already claimed record derives its own child record, so the leak becomes a parent pointer."],
|
||||
["4. Everyone reads the same tree", "claude agents, moshcode herd ps and logicsrc fleet would fold the ledger and the records into one tree: fleet, swarms, members, state, spend against budget, and a mark on every member running with approvals bypassed."],
|
||||
["4. Everyone reads the same tree", "logicsrc fleet tree and moshcode fleet tree fold the ledger and the records into one tree: fleet, swarms, members, state, spend against budget, and a mark on every member running with approvals bypassed. The engine rosters, claude agents and moshcode herd ps, add liveness and the members that have no record."],
|
||||
["5. The sysop stops or caps as one unit", "stop on a swarm ends every member through its own engine and writes one swarm.end. cap narrows a fleet or a running swarm, and anything already above the new ceiling is stopped. log says afterwards what happened and who did it."]
|
||||
];
|
||||
|
||||
|
|
@ -197,9 +197,13 @@ export default function OpenFleetPage(): ReactNode {
|
|||
<div className="section-head">
|
||||
<h2>Five verbs</h2>
|
||||
<p>
|
||||
Proposed for <code style={mono}>logicsrc fleet</code>, for Claude Code's{" "}
|
||||
<code style={mono}>claude agents</code> and for <code style={mono}>moshcode fleet</code>,
|
||||
each able to stop the members its own engine runs. None ships yet.
|
||||
<code style={mono}>logicsrc fleet</code> ships them in{" "}
|
||||
<code style={mono}>@logicsrc/openfleet</code> 0.1.0 (logicsrc CLI 0.3.0) and{" "}
|
||||
<code style={mono}>moshcode fleet</code> in moshcode 0.99.0, each able to stop the
|
||||
members its own engine runs. Claude Code joins through{" "}
|
||||
<code style={mono}>logicsrc fleet hooks install</code>, which makes every session a
|
||||
recorded member; its own <code style={mono}>claude agents</code> view does not offer the
|
||||
verbs yet.
|
||||
</p>
|
||||
</div>
|
||||
<table style={table}>
|
||||
|
|
@ -250,7 +254,7 @@ export default function OpenFleetPage(): ReactNode {
|
|||
<li>
|
||||
<Link href="/docs/openfleet">Specification</Link>: the terms, the record, the
|
||||
environment, claiming and deriving, the ledger's eight events, five verbs, fifteen
|
||||
rules, the worked example, and what Claude Code and moshcode would each add
|
||||
rules, the worked example, and what Claude Code and moshcode each add
|
||||
</li>
|
||||
<li>
|
||||
<Link href="/asdlc">ASDLC</Link>: a swarm is one fan-out made durable;{" "}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue