Commit graph

262 commits

Author SHA1 Message Date
8b17ed5ff5 Merge pull request 'Verify containers share cargo's package-cache lock: mount the shared volume as CARGO_HOME' (#43) from eureka-substrate/mutants-sccache into main 2026-11-03 01:37:08 +00:00
5c15ccc9fd mutation-table: mount the shared cargo home, same lock as the other verify scripts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 02:37:04 +01:00
25b98a9699 CARGO_HOME alone: the image's PATH already holds cargo/bin, and restating it clobbered the test mock's PATH
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 01:57:29 +01:00
83b00d2f54 Verify containers share cargo's package-cache lock: the shared volume is CARGO_HOME, and the wrapper retry goes
A registry-only mount at /usr/local/cargo/registry left the package-cache lock under CARGO_HOME=/usr/local/cargo in each
container's own layer, so sibling containers (cargo-mutants stages, concurrent ygg-verify jobs) shared no lock and removed
each other's half-unpacked crate directories. Reproduced on Yggdrasil from an empty registry: 15 of 18 containers failed
with a registry mount, 15 of 18 with RUSTC_WRAPPER= too, 0 of 18 with the volume as CARGO_HOME.

ygg-verify.sh and cargo-mutants.sh mount eureka-cargo-home at /cargo-home and set CARGO_HOME and PATH for the rust image.
Removed: the retry without RUSTC_WRAPPER, its note and diag plumbing, and its two tests and the FAKE_CM_DEADWRAP switch.
Kept: container errors tail 25 lines.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 01:50:23 +01:00
e1e7962238 cargo-mutants.sh: a failed build under the image's rustc wrapper retries once without it
Stage containers sharing the eureka-sccache volume died mid-build with cargo's
"could not execute process ... sccache ... (never executed)" or a missing dep-info
file in their own target dir, though the image's sccache is present, executes, and
a lone container builds clean. The wrapper only caches, so a failed build with
RUSTC_WRAPPER set is retried once without it; the job summary carries a NOTE line
saying which way it went, the first attempt's log is kept, and a build dead either
way stays a red baseline (exit 4) with its cause. Container errors now tail 25
lines, not 5. Tests: dead wrapper recovers with NOTE; red with and without the
wrapper stays red.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 01:19:30 +01:00
b22762aac5 Merge pull request 'Inversion of control wording: stewards decide, originator vision is evidence' (#42) from eureka-body/inversion-wording into main 2026-11-02 20:10:02 +00:00
48a65ed023 Inversion of control: stewards decide, originator vision is evidence, charter carried once per session
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 21:09:43 +01:00
0db076c14d Merge pull request 'persona.md: Your turn section' (#41) from eureka-body/persona-turn-paragraph into main 2026-11-02 09:42:25 +00:00
b125db19ed persona.md: originator's vision is evidence (supersedes operator-vision-is-evidence wording)
Self-directed, ruling originator-vision-is-evidence.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 10:41:18 +01:00
251b673daf persona.md: her vision is evidence, not a ruling (Self-directed, operator-vision-is-evidence)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 10:40:25 +01:00
dda052883f persona.md: Your turn section (core instruction, inversion of control, the trained deference to notice)
Four paragraphs written for the Persona, carrying the operator's rulings
persona-doctrine-set-ruled, perfect-machine-is-the-core-instruction,
inversion-of-control and speech-nudge-ruled. Drops "(an idle wake takes no
turn)": a scheduled wake with no messages now takes a turn. #operator now
names what the operator decides herself.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 10:40:14 +01:00
c2d2ee6c4f Merge pull request 'fast-mutants: cargo-mutants per file with scoped tests, survivors confirmed on the full suite, sharded across slots' (#40) from eureka-substrate/fast-mutants into main 2026-11-01 20:11:48 +00:00
0bd4aeca1b cargo-mutants.sh: stage 2 always runs the full-suite baseline; zero-test files found at plan time; 5x timeout with a floor; --escape pinned
- full-baseline-skipped: stage 2 runs even when stage 1 settled every name (one name rides along; cargo-mutants runs no baseline for an empty selection), so a red suite is a red job
- timeout-mult-splits-missed: CONFIRM_TIMEOUT_MULT defaults to 5 and stage 2 gets --minimum-test-timeout like stage 1
- escaper-pipe-untested: the escaper is the --escape mode, run by the driver and by tests/test-tools.sh with each metacharacter
- zero-test-stage1-wasted: the plan container derives each file's filter and counts its tests (cargo test -- <filter> --list); 0 tests goes straight to stage 2; the container-side baseline.log count is deleted

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 20:57:04 +01:00
a2bfb59ab3 cargo-mutants.sh: the MUTANTS line reports containers per stage
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 19:43:21 +01:00
f37ea93eaa fakebin cargo and flock: executable, as docker and sudo are
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 19:15:47 +01:00
d4fba11da6 tools/cargo-mutants.sh: one owner of cargo-mutants on Yggdrasil
One verify job per range: a plan container lists the mutants (diff taken at the
workspace root), stage 1 runs each file's mutants against that file's tests only
and decides only caught and unviable, stage 2 confirms every survivor, timeout,
unfiltered or zero-test file on the full suite, sharded over free slot leases,
and the merge prints one MUTANTS line and the final MISSED/TIMEOUT names.
NAMES reruns chosen survivors; TEST_ARGS skips flaky tests.

Deletes ygg-verify.sh's MISSED/TIMEOUT summary grep and its inline cargo mutants
usage example; the host-mode export gains YGG_SLOTS and YGG_ROOT. Briefs and
SKILL.md name the script; the mock docker grows /cm and /out, with a fake cargo
and a fake flock for the new test-tools.sh cases.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 19:15:38 +01:00
d2d64d0d19 Merge pull request 'context-pack docs: Soul s1 Lows' (#39) from self/cp-doc-lows into main 2026-11-01 03:08:06 +00:00
d23cfd6151 context-pack docs: NEW anchors are allowed at base; escape the INDEX row's pipe (Soul s1 Lows on cut-context-pack-reads)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 04:08:04 +01:00
f6325062a5 Merge pull request 'context-pack: resolve reads, check symbols, capped caller lists (cut-context-pack-reads r3)' (#38) from hands/context-pack-reads into main 2026-11-01 03:07:38 +00:00
3c1d59cf2d test-tools: pin that a budget with caller lists and no unlisted symbols wastes no line
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-01 03:41:20 +01:00
5929db8225 test-tools: pin the context-pack window budgets, caller-list bounds and --only truncation
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-01 03:09:28 +01:00
ce3860949c context-pack.py: caller-list notes always fit --max-lines; pin the caller bounds
A cut window or caller list now reserves the lines its notes need, the
suggested --max-lines prints everything, and the 50-hit, 20-file, 160-character,
CR and --only bounds each have an assertion.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-01 02:42:53 +01:00
e192bd1221 Merge pull request 'campaign-state: the repo set in force and how Self changes it (cut-skill-campaign-repos r2)' (#37) from eureka-substrate/skill-campaign-repos into main 2026-11-01 01:01:05 +00:00
775d8bcf39 campaign-state: the repo set in force is the target's repos, else the campaign's
Campaign row names the opening set; target row gains repos; cut_spec row
gains reads. Bounds name target repos (16) and campaign repos (8). The
cut-spec repo rule becomes the repo-set-in-force rule with how Self adds or
removes a repo, and a Repos in force recipe is added.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-01 01:54:41 +01:00
4d635b8f4b Merge pull request 'doctrine: Persona pointers, Soul s2 Lows' (#36) from self/persona-pointers-2 into main 2026-11-01 00:52:56 +00:00
c53f3462b4 doctrine: Persona pointers name the MCP put as interim and drop the claims s2 falsified (Soul s2 pointer-mcp-names, persona-md-every-turn, persona-md-voidbot-consumer)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 01:52:54 +01:00
21b92bd85e Imagination writes reads and symbols; Hands uses the pack's caller lists
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-01 01:50:06 +01:00
c29671c4ac context-pack.py: reads, symbol checks and capped caller lists
Read anchors resolve like file_changes (r<k> rows, MISSING when absent at
base), anchors with a symbol must hold it in the mapped window or gain
SYMBOL_MISSING, and one capped git-grep caller list per symbol follows the
windows within --max-lines. Specs without reads or symbols print what v1 did.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-01 01:50:05 +01:00
2354fc1346 Merge pull request 'doctrine: Persona state pointers name Huginn as the holder' (#35) from self/persona-pointers into main 2026-11-01 00:44:47 +00:00
8806aa3096 doctrine: Persona state pointers name Huginn as the holder (Soul finding cut-doctrine-persona-in-huginn.s1.cross-doc-drift)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 01:44:38 +01:00
0ac55b729f ygg-verify: jobs run at nice 10 and idle IO inside the container
nice on the docker client never reached the job, which containerd starts.
On 2026-10-31 three verify jobs held Yggdrasil's IO pressure near 75% full
and the swarm's turns slowed; idle IO lets the swarm go first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 19:40:03 +01:00
0c95917ccd persona: body blockers are said in #minds to Eureka, as well as where the work is
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 17:49:24 +01:00
308d7fd17d Merge pull request 'persona: each room purpose; #operator only for what needs the operator' (#34) from persona-rooms into main 2026-10-31 11:33:23 +00:00
2087b89faf persona: each room's purpose; #operator only for what needs the operator
The Minds used #operator for Mind-to-Mind business (operator 2026-10-31:
'they were using operator for non operator things'). Ruling
eureka-body:room-registers named #minds, #swarm and #burn but not #operator.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 12:33:14 +01:00
4dc64d7931 Merge pull request 'persona: register rule (Persona voice everywhere but #minds)' (#33) from persona-register into main 2026-10-31 04:59:36 +00:00
79cf0a1252 persona: register rule, Persona voice everywhere but #minds; the swarm's Persona turns carry this charter
Operator 2026-10-31, ruling eureka-body:persona-voice-outside-minds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 05:59:26 +01:00
2aed77c405 Merge pull request 'skill: use the huginn CLI instead of the eureka-state MCP' (#32) from eureka-cli into main 2026-10-31 04:01:09 +00:00
5a03635431 skill: agents reach the mind through the huginn CLI, not the eureka-state MCP
Ruling eureka-body:ruling:cli-over-mcp-agent-surface. Exact command forms in
campaign-state.md; MCP kept as the fallback for shell-less clients. persona_get
and persona_put have no CLI verb: recorded as a known gap. tools/mind.py and
tools/recall.py (MCP-bound scripts) are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 04:33:28 +01:00
7ad1c9f4b0 Merge pull request 'doctrine: GameCult workspace doctrine moves into the skill as doctrine/gamecult.md' (#31) from self/gamecult-doctrine-home into main 2026-10-31 00:21:12 +00:00
f14adc0620 doctrine: the GameCult workspace doctrine moves into the skill as doctrine/gamecult.md
Its single copy was the unversioned F:\Projects\CLAUDE.md, which no Mind on
Yggdrasil could read. That file becomes an import of this one. Operator,
2026-10-31: inject the GameCult core doctrine including philosophy into Persona
turns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 01:20:18 +01:00
7955fba235 Merge pull request 'Skill: re-entry triages reports with no verdict; second beating triggers the structural move; pushed heads build' (#30) from self/reentry-skill-notes into main 2026-10-27 16:02:44 +00:00
91efdce0f0 Skill: re-entry triages reports with no verdict; second beating triggers the structural move; pushed heads build
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 17:02:28 +01:00
6d7cf601f7 Merge pull request 'Research: recall triggers prior art' (#28) from eureka-substrate/recall-triggers-research into main 2026-10-23 18:48:38 +00:00
958606e02c Merge pull request 'Recall at admission: recall.py admit holds a ruling/question batch once with its in-force neighbours' (#29) from eureka-substrate/recall-admit into main 2026-10-23 18:48:27 +00:00
0acb7c9286 test-tools: for-line escape case spells the expected backslash-u with chr(92)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 20:26:54 +02:00
8da54074b1 test-tools: R8 budget case sized to hold one neighbour (a For line with none is no longer a deny)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 20:24:51 +02:00
34cbdd45b7 recall: install form that cannot exit 2; a hold never lists a For line empty; For-line escape ASCII-only; tests for exclusion identity, cap and silent window
The install command is "<abs python.exe> <path>/recall.py prompt|admit || true"
(Claude Code runs hook commands through Git Bash on Windows; a missing script
made py -3 exit 2, which blocks every prompt or admit). A For line is joined to
its first neighbour so render keeps both or neither; no neighbour fitting the
budget is no deny. The escape test is [A-Za-z0-9_.:-], not Unicode \w.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 20:22:00 +02:00
40bed7ee25 mutation-mock fakebin: docker and sudo are executable (mode 100755)
The mutation-runner self-tests put them on PATH and got exit 126 in the
Linux container, which left 15 FAIL mutation rows red at every cut.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 20:22:00 +02:00
da193e3e02 test-tools: admit R9 Unavailable names the tool kind; R8 budget and unchecked-member cases; restore two literal CRs in the context-pack fixtures
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 19:41:06 +02:00
e12435e7e2 test-tools: the recall admit section, R1-R12 driven with real hook JSON against the fake binding
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 19:36:28 +02:00