Commit graph

262 commits

Author SHA1 Message Date
d1184f2147 Briefs: Aetheria /lfs is content-addressed; pass the CultLib pin
The by-path copy left LFS pointers in place and cost three failed runs in
each of two jobs on 2026-10-08.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 23:09:24 +02:00
11f6526283 context-pack tests: pin error messages, retry condition, file-end and CRLF handling
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 22:13:13 +02:00
0266de28cc Briefs: Aetheria verify jobs copy Settings.asset from /lfs too
With only the catalog copied, 204 tests failed on an LFS pointer during the
pirates-record merge (2026-10-08).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 21:59:11 +02:00
aa6ce2b097 tools/context-pack.py: carry a cut_spec's file_changes anchors to the worktree
Anchors resolve through git diff hunks from the spec's base (working tree
included) into a status table plus bounded windows; --since re-prints only
edited windows. Spec by id through the eureka-state stdio binding, or a
saved view. Fixture section in test-tools.sh; INDEX row.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 21:35:42 +02:00
776cc54ccd Docs: the context-pack map (2026-10-08)
Body facts, model page and rationale for the context-pack cuts in
eureka-substrate. The cut specs are the typed record in the mind.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 21:18:49 +02:00
95d7f67c38 Imagination overlap check before fan-out; /pins mounts read-write
Two parallel Imagination passes made two owners of one decision twice on
2026-10-08. NuGet restore fails under a read-only /pins mount.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 21:18:00 +02:00
761c65f731 Merge pull request 'Tool-call relief: wait-on.sh, python, brief lessons, Life reads the mind' (#7) from hands/toolcall-relief into main 2026-10-08 13:25:51 +00:00
6ab91ead9c briefs: canonical wait block drops WAIT_FROM, states fresh log path and exit 3
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 15:22:00 +02:00
d9e45c8740 wait-on: delete WAIT_FROM; reused log paths are forbidden instead
Truncating writers (`>`, Unity -logFile) rewrite below any offset, so an offset
turned a stale success into a silent hang. The option, the scan branch, its docs
and its fixtures are gone; the header states the fresh-log-path rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 15:21:58 +02:00
de35a72fc3 briefs: one canonical wait block, fresh/offset log paths, pid-form caveat, consistent scratch paths
F1/F2: Hands block says prefer log+WAIT_PID, pid form means gone not succeeded,
fresh log per job or WAIT_FROM at launch. F3: exact Aetheria DOCKER_ARGS mounts.
F8: Soul points at the Hands block instead of rewording it; Imagination and
Eyes templates name wait-on.sh, <scratchpad>/<agent>/ and py -3; all examples
use <scratchpad>/<agent>/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 15:04:22 +02:00
30e199cf55 wait-on: WAIT_FROM start marker, GONE line for pid form, regex validation, executable bit
F1: log form searches only bytes after WAIT_FROM, so a stale done line in a
reused log is ignored (also makes the per-check cost independent of log size).
F2: pid form prints GONE (no completion evidence). F4: invalid ERE is exit 3.
Mode 100755 recorded for wait-on.sh; other tools/ scripts are still 100644.
F5, F6, F7 recorded as known limitations in the header. Fixtures added.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 15:04:20 +02:00
df590aa2c7 Changelog: tool-call relief
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 14:15:55 +02:00
c28d928150 Life: read-only mind tools so it can rehydrate
whoami, view and query; no admit. Follow-up eureka-substrate:follow_up:gap-life-has-no-mind-tools.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 14:15:53 +02:00
ebc746e937 SKILL: a long-lived branch merge can break semantically with no conflict
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 14:15:51 +02:00
18b160c44f Briefs: wait through wait-on.sh, py -3, and the 2026-10-07 lessons
Hands and Soul long jobs name tools/wait-on.sh for every non-Yggdrasil wait and
forbid bare true/echo/sleep polling (974 idle calls, 324 sleeps). py -3 is the
Python that works from Git Bash and PowerShell (65 Store-stub hits). Lessons:
own scratchpad subdirectory, wait protocol pasted verbatim, Stryker character
offsets from LF content, Aetheria DOCKER_ARGS mounts, rulings quote only the
operator.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 14:15:48 +02:00
a886d4524a Add tools/wait-on.sh: one waiter for pids, logs and files
Same contract as ygg-verify.sh wait (270 s cap, bounded tail, RUNNING exit 99,
exit 98 for a thing gone with no completion evidence). Windows PIDs are found
through tasklist, since kill -0 only knows Git Bash's own. Fixtures in
tools/test-tools.sh; INDEX row added.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 14:15:45 +02:00
0bb414d927 Merge pull request 'Self loads Eureka; Hands, Eyes and Life default to Sonnet; handoffs are pointers' (#6) from self/eureka-ambient-cheap-tier into main 2026-10-03 20:15:41 +00:00
0966a22277 Merge pull request 'Hands template: no resolutions; fix batches name their commits' (#5) from hands-never-close into main 2026-10-03 20:15:31 +00:00
e3f202f72d Self loads Eureka; Hands, Eyes and Life default to Sonnet; handoffs are pointers
- Agent frontmatter: hands, eyes and life default to model: sonnet, so an
  omitted model can no longer spend the root's strong model. Soul and
  Imagination keep inherit (operator 2026-10-03: "Soul and Imagination get the
  smarter model, not Hands").
- Self output style: invoke the Eureka skill at session start and after every
  /clear. A skill loads only when invoked; a session that never loaded it
  dispatched every Hands on Opus.
- Rotation: the handoff carries only what the mind does not hold, and Self
  rehydrates from the mind before briefing. A handoff that restated campaign
  status hid that scenarios Cuts 2-4 had not landed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 22:15:15 +02:00
f8dc3a5319 Hands template: admit the cut_report and no resolution; a fix batch names the commit it believes fixes each finding
On 2026-10-03 Self's briefs told Hands to admit Fixed resolutions, and the
template's admission line was silent, so nothing contradicted them. Verdict
variants:verdict:cut-c2a-declared-apply.s1 found one such closure only partly
fixed. The rule already stands in SKILL.md section 5 and campaign-state.md; this
puts it where briefs are written.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 15:05:35 +02:00
352165d56b Merge pull request 'Doctrine explains instead of shouting' (#4) from doctrine-deshout into main 2026-10-03 10:04:40 +00:00
45bfa53cdc Rotation: a clear ends background agents, so rotate with none in flight; briefings carry each question's options
The 2026-10-03 clear killed three agents that the handoff expected to survive:
commits survived on branches, two cut reports and a verdict were never admitted.
The same morning's catch-up gave the operator recommendations without options,
because it read the handoff instead of the question documents.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 12:04:30 +02:00
a429f4280f Doctrine: add the Cult inversion to colossus.md Rejected Misreadings
Optional companion to the CLAUDE.md sentence; holds the long form. No date and
no quotation, per the publish scrub.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 23:53:35 +02:00
70fa7154c4 Doctrine: state the Cult inversion in the always-loaded CLAUDE.md
Adds one sentence after "The Cult is a metaphorical discipline...": the framing
borrows a cult's vocabulary to do the opposite of what cults do. colossus.md is
not auto-loaded, so a fresh Self met the cult voice without the inversion.
Alone as a values statement the operator owns.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 23:53:24 +02:00
2855e597f7 Doctrine: drop the restating second sentence of "Symptom patches are guilty"
The dropped sentence is the third statement of the rule the failure warning
already makes. The verdict sentence stays. The Prayer's line on prompts
compensating for missing context stays. Alone as an editorial merge.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 23:53:10 +02:00
62a6fc6381 Doctrine: "previous work has no dignity" becomes "no standing of its own"
Per ruling doctrine-explains-not-shouts. "No dignity" is contempt aimed at the
agent; "no standing" is the doctrine's own phrase from the failure shapes list.
Alone because it is meaning-adjacent.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 23:53:10 +02:00
f87d05726b Life: state the dispatch reason in the description instead of capitals
Per ruling doctrine-explains-not-shouts. Alone because the capitals in this
description may be what makes the harness dispatch Life unprompted; reject
this commit if Life dispatch rates fall.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 23:53:09 +02:00
cffb8849ca Doctrine: de-shout the register in CLAUDE.md, hands.md and eureka-self.md
Per ruling doctrine-explains-not-shouts. Capitals and "DO NOT" imperatives
become sentence case with the reason stated; every rule keeps its meaning.
STOP bullets gain a one-clause reason. Section labels move to title case.
The scrubbed text on main is the base.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 23:52:59 +02:00
f6a56f9fcb Merge pull request 'Doctrine moves into the Eureka repo' (#3) from doctrine-home into main 2026-10-02 21:50:02 +00:00
b32e447954 Doctrine: publication scrub
Per ruling doctrine-publish-scrub. Drops the private Discord message id and
the dates attached to two operator quotes, and turns F:\Projects paths into
descriptive references. Private project names and ~/.claude paths stay.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 23:22:33 +02:00
b591951c09 Doctrine: bring agent doctrine into the repo verbatim
Per ruling doctrine-home-eureka-repo. Copies of the global CLAUDE.md,
six faculty charters, the Self output style and three doctrine files,
byte-identical to their sources. Paths and wording are unedited.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 22:13:58 +02:00
9f5b3bc191 Briefs: Hands reports every consuming test project with counts; Soul checks the list against the project files
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 20:57:12 +02:00
4b79dc5447 Prior art before every nontrivial fork: an Eyes pass on papers and implementations precedes the question
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 18:42:28 +02:00
b260fbeec6 Merge pull request 'Faculty charters, step 5: dispatch by subagent_type; briefs stop restating charters' (#2) from hands/charter-step5 into main 2026-10-01 16:41:18 +00:00
Meta Vens
11b1f6b8f9 Changelog: dispatches load the faculty charters
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 18:40:52 +02:00
Meta Vens
246f740e56 Dispatch faculties by subagent_type; cut brief text the charters own
Every brief now names subagent_type (a general-purpose dispatch loads no
charter). Cut the You-are lead-ins, the Soul identity sentence and its
no-edit/restore bullets, and Eyes' read-only line, all owned by
~/.claude/agents/*.md. SKILL.md's dead litany pointer now names soul.md and
imagination.md.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 18:40:52 +02:00
7481408907 Merge pull request 'Tool-calling cut §5: summary/wait verify, snapshot mutation runner' (#1) from hands/tool-calling-s5 into main 2026-10-01 16:39:48 +00:00
Meta Vens
8c14392d07 Tool-calling map: record the follow-ups from the tools' Soul passes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 18:39:36 +02:00
Meta Vens
838b859423 mutation-table: delete the dead cur branch of the cleanup trap
The --rm mutant container is gone by the time the trap runs, so
`docker rm -f $cur` never had a container to remove. The stopgap's watchdog
kills every job-labelled container before it signals the driver, so nothing
needs tracking here. Also restores a line continuation the control-run edit
had collapsed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 18:25:36 +02:00
Meta Vens
4803a76dc2 ygg-verify: a RUN_ON_HOST job the watchdog killed exits 124, in its work directory, and its process group is signalled
A RUN_ON_HOST job whose TIMEOUT fired still exited 0: kill_job only killed
labelled containers and the status came from the host command (Soul F2). The
host command now runs in its own process group (set -m), in the job's work
directory (it ran in the ssh home), with stdin from /dev/null. kill_job sends
the group TERM, then KILL 20 s later, and the verdict is forced to 124 when the
watchdog killed the job, whatever the command exited with. The TIMEOUT/IDLE
notice now prints before the kill so the 20 s grace cannot swallow it.
Proved on Yggdrasil with the sleep-past-TIMEOUT probe (exit 124, cwd = the work
dir, no sleep left) and with a command that traps TERM and exits 0 (still 124);
probes recorded in tools/fixtures/mutation-probe/README.txt, with the expected
rows for the fresh and jsr reproducers.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 18:25:35 +02:00
Meta Vens
f68bd4099f testparse: jest names come only from "●" lines under a FAIL header; real jest fixtures
Jest without a TTY prints "FAIL jt/add.test.js" with one space; the parser
matched two, so a real jest load failure read ERROR, not UNVIABLE. The old
`^ +● ` denylist also named process.exit's "●  process.exit called with "1""
as a killing test (CAUGHT). Names now need a FAIL file header above them; a
crash with no named failing test is ERROR. The "no test counts recognised"
line names jest. The synthetic jest logs and mock are replaced by real jest
29.7.0 output captured on Yggdrasil from tools/fixtures/mutation-probe/jsr
(green, wrong, load, exit runs in logs/jest-real.log).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 18:14:45 +02:00
Meta Vens
b4942b7571 mutation-table: a control run of the unmutated snapshot gates the fan-out (SNAPSHOT RED)
A test that cannot run twice (create_dir("target/fresh-marker").unwrap())
passes the baseline and then fails in every mutant's container, so every
mutant read CAUGHT and the job exited GREEN (Soul F1). The baseline's test
loop is now one function, `unmutated`, run again from the committed snapshot
in a --control container before any mutant; red or empty there aborts with
SNAPSHOT RED, exit 2, no rows counted. Mock case E3 (oncetest.sh) fails if
the control is removed. Reproducer crate: tools/fixtures/mutation-probe/fresh.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 18:14:39 +02:00
Meta Vens
e5bdc386df Fixtures: Soul's fresh (rerun-hostile test) and jsr (jest/vitest mutants) reproducers
Copied from the soul3 scratch repos so the kills that found F1, F3 and F4 are
committed evidence; no behavior change.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 18:07:08 +02:00
Meta Vens
2fbf696f79 Fixtures and docs: real nonce log from the soul2 reproducer, INDEX describes the snapshot isolation
mutation-table-nonce.log is now a real run of the snapshot runner (untested-equiv
SURVIVED, exit 1). The probe README names the soul2 case. ygg-verify.sh no longer says
a reused log path is guarded by a run id (fresh paths are the rule).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 17:46:11 +02:00
Meta Vens
675669150b mutation-table: docker commit has no -q 2026-10-01 17:39:07 +02:00
Meta Vens
62bc4d5c1d mutation-table: Docker owns the per-mutant snapshot; classify jest and vitest file-level load failures
The git-status restore could not see ignored files, so a test keeping state under
target/ polluted the next mutant (an uncovered mutant read CAUGHT). The baselines now
run once in one container whose filesystem holds the revision; that container is
`docker commit`ted to a throwaway image and each mutant runs in a fresh --rm container
from it. restore(), dirtied() and tree_state() are deleted. ygg-verify.sh gains
RUN_ON_HOST=1 (the driver owns container topology; the watchdog kills by job label).
testparse.sh: LOADFAIL for file-level FAIL lines (no " > "), jest "●" names and jest
Tests: counts. Mock docker, jest and vitest-variant fixtures, soul2 reproducer.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 17:36:49 +02:00
Meta Vens
118f157124 Merge parser and wait fixes into the tool-calling branch
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 16:46:39 +02:00
Meta Vens
4bcd434828 mutation-table: name the mutated file from the workdir; briefs: wait calls take a 280000 ms Bash timeout
The pollution note listed nothing when the workdir was below the repo root
(ls-files ran from the root); the mock now runs from a subdirectory so that
regresses visibly. Every brief/INDEX line showing ygg-verify wait now says to
pass a Bash timeout of at least 280000 ms.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 16:43:26 +02:00
Meta Vens
b02f577b39 Fixtures: Soul's real-toolchain mutation probes (rust data.txt pollution, vitest import break)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 16:40:38 +02:00
Meta Vens
b6f52d5ec4 mutation-table: BUILD baseline, field-based outcomes, whole-tree restore, file-level load failures, live rows, CRLF, nonce tag
A: BUILD runs on the unmutated tree; red or missing aborts as BASELINE RED.
B: outcome is its own field, tallied from fields; labels may contain pipes.
C: after each mutant the whole tree is reset and run-created untracked
entries removed; an unrestorable tree aborts; dirtying is noted in the row.
D: a vitest file-level FAIL with no test name is UNVIABLE, not CAUGHT.
E: one row per mutant as it finishes; whole-job TIMEOUT is explicit.
F: LF before-text matches CRLF files.
Rows carry the per-run YGG_NONCE tag. Local mock fixtures and test-tools
cases fail on each regression.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 16:40:25 +02:00