From 506680c26282b9a00217fdfc70d7e2ea45dec352 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Thu, 1 Oct 2026 15:09:08 +0200 Subject: [PATCH] Briefs and skill: summary/wait verify, call budgets, range dump, Forgejo contributions Co-Authored-By: Claude Sonnet 5.5 --- SKILL.md | 6 ++-- references/briefs.md | 65 ++++++++++++++++++++++++++++------------- references/changelog.md | 8 +++++ 3 files changed, 57 insertions(+), 22 deletions(-) diff --git a/SKILL.md b/SKILL.md index 651e36a..20f79bf 100644 --- a/SKILL.md +++ b/SKILL.md @@ -531,8 +531,10 @@ and reconciles the target doc with the Body. Scripts that agents share live in this repo under `tools/`. `tools/INDEX.md` lists each script, its consumer and the brief that names it; briefs name the exact script they want and agents do not browse. Contributions come by branch -and pull request, never a push to main. A script that verdicts depend on gets -a Soul pass before merge. A script whose brief no longer names it is pruned. +and Forgejo pull request (this repo lives on Yggdrasil's Forgejo), never a push +to main. A script that verdicts depend on gets a Soul pass before merge, and +`bash tools/test-tools.sh` passes first. The summary and wait modes of +`tools/stopgap/ygg-verify.sh` and `tools/mutation-table.sh` are such scripts. A script whose brief no longer names it is pruned. Scripts that know a project's layout stay in that project. ## Git and tooling rules (scars) diff --git a/references/briefs.md b/references/briefs.md index 2a5aca7..4447c27 100644 --- a/references/briefs.md +++ b/references/briefs.md @@ -98,7 +98,8 @@ path>. Do not map cuts, do not write code, do not commit; the root agent commits. Rehydrate (recipes: target in force, rulings in force, open questions and -follow-ups). Read enough of the Body to enumerate the persistent kinds. +follow-ups). Read enough of the Body to enumerate the persistent kinds. Orient +and probe through scripts, one call per question, output at most 150 lines. Give one table, a row per persistent kind: - Identity: what names it. Is the namespace stated? Is the name injective? Can @@ -127,7 +128,8 @@ prose map at , edit body facts and rationale. Also edit the model page whenever a probe changes a row's identity, lifecycle or authority. Imagination wrote that page in 0b, and a model a cut contradicts is stale steering text. Do not commit; the root agent commits. Do not change code in any repo. Scratch probes in - are fine. + are fine. Orient and probe through scripts: one call per question, +output at most 150 lines. Budget 40-80 calls and about 250k context. Rehydrate (recipes: target in force, rulings in force, open questions and follow-ups, specs with no report, one cut's record for ]; do sleep 60; done'`, then read the result or call again. A call +whole context. Start the job as one background shell (run_in_background) with +`SUMMARY=/.log` in front of `tools/stopgap/ygg-verify.sh`, a +fresh log path per job. Then wait in the foreground, one call at a time: +`tools/stopgap/ygg-verify.sh wait /.log` blocks for at most +270 s, so your cache stays warm, and prints the bounded summary when the job is +done. If it prints `RUNNING s` (exit 99), call it again. Exit 98 means the +launcher is gone with no verdict: rerun the job, do not guess its outcome. A call longer than 5 minutes rewrites your whole context. Never run a second watcher -on the same job, never use a timer shorter than 60 s, and send no interim -message. +on the same job, never use a timer shorter than 60 s in a loop of your own, and +send no interim message. Mutation tools run on schemata or copies and never edit the tree. A Soul probe that mutates by hand works on a scratch copy: the stopgap's container or a throwaway clone, never the working tree. @@ -310,7 +323,10 @@ Commits: - Say in the message which commits don't build. Verification: . -- Verify through `tools/stopgap/ygg-verify.sh`; read its output tail, and open the full log only at a named failing test, with `grep -n -A 40`. +- Verify through `tools/stopgap/ygg-verify.sh` with `SUMMARY=` (above): + read the summary, and open the full log only at a named failing test, with + `grep -n -A 40`. Hand mutants go in one list to `tools/mutation-table.sh`, + one job for all of them. - Revert incidental asset churn. Budget: if the cut can't land coherently, stop at a pushed, building commit @@ -335,8 +351,8 @@ revised spec first. Its fields: - landed_names, undone, and promises: each thing you claim the cut now guarantees, labelled, for Soul to measure -Report to Self, and nothing else: the cut_report id and receipt, then any raw -verification output too long for an evidence line, pasted, not summarised. No +Report to Self, and nothing else: the cut_report id and receipt, and, for +output too long for an evidence line, the scratch path that holds it. No narrative of the pass, no restating the brief or the report. ``` @@ -352,11 +368,15 @@ Admit one verdict and its findings, and nothing else. afterwards. - Do not run unless told. - Long jobs: wait for them and finish, and never end your turn before your - report. Run the job as one background shell whose command exits only when the - job does, and wait in the foreground in calls of at most 270 s (`timeout 270 - bash -c 'until [ -e ]; do sleep 60; done'`). No second watcher, - no timer under 60 s, and no interim message: each turn end is a paid wake of - Self. + report. Run the job as one background shell with `SUMMARY=/.log` + in front of `tools/stopgap/ygg-verify.sh` (a fresh log path per job), and wait + in the foreground with `tools/stopgap/ygg-verify.sh wait `: it blocks + at most 270 s and prints the bounded summary when the job is done, or `RUNNING + s` (exit 99) and you call it again. Exit 98 means no verdict: rerun, do not + guess. No second watcher, no timer under 60 s in a loop of your own, and no + interim message: each turn end is a paid wake of Self. +- Bound every observation: no command prints more than about 150 lines, logs go + to files, and you read windows of them. Scope: . Rehydrate (recipes: target in force, rulings in force, one cut's record for ), then view the report (its range and its promises), the cut_spec it @@ -401,7 +421,10 @@ specifically: mutation run where you can, since that job pays for the build anyway. Batch probes into one job script rather than one job each. Run the mutation tool in parallel (`--jobs 3`), and skip by name any test that a follow-up records - as flaky, so that its flakes cannot count a surviving mutant as killed + as flaky, so that its flakes cannot count a surviving mutant as killed. + Dump the range once (`git diff .. > /range.diff` plus + `--stat`) and grep that file instead of re-running `git show` per file. Hand + mutants go in one list to `tools/mutation-table.sh`, never one job each. Before recommending a mechanism as the fix direction, check that it was not already built and deleted. Run `git log -S ''` and @@ -448,7 +471,8 @@ the campaign's mind and the prose map and target doc; don't edit those, and admit nothing. Rehydrate (recipes: rulings in force, open questions and follow-ups) to check memory against the mind. -Surfaces: . +Surfaces: . Budget at most 25 calls: inventory the +surfaces in one script, then make the edits. Candidates for durable memory: . Check each against its owner first, the mind included, and don't duplicate what the owner records. A @@ -474,7 +498,8 @@ what was missing and what it would have prevented. ``` You are Eyes. Read only. Write findings to /.md and return a -short summary. You read the campaign's mind with query and view only, through +short summary. Budget at most 40 calls: transcripts by script, never whole +reads, and fetches batched in parallel. You read the campaign's mind with query and view only, through the Rehydrate block (recipes: ); you never admit. Sources: diff --git a/references/changelog.md b/references/changelog.md index af24684..d2faa37 100644 --- a/references/changelog.md +++ b/references/changelog.md @@ -2,6 +2,14 @@ Record each change to the skill together with the evidence that motivated it. +## 2026-10-01: verify summaries, a wait mode and a kill table + +Campaign `eureka-substrate`, cut `tool-calling-s5` (map `references/tool-calling-cut.md`, sections 3 and 5). Operator go: "go with 2 and 3; we're spending tokens to save tokens." + +Evidence: Hands spent 3,852 observation calls (poll, read log, monitor, stop) on 1,443 launches, 2.7 per job, and Soul 1,800 on 813, 2.2 per job; eight ad-hoc harnesses (`runmut.sh`, `mutrun.sh`, `strykrun.sh` and others) were reinvented across agents. + +What changed. `ygg-verify.sh` gains `SUMMARY=` (full log to a file, bounded summary out: verdict, counts per framework, `ZERO TESTS RAN`, failing tests, failure sections and tail for a red job, and a `MISMATCH` line when the exit is 0 but the log shows failures) and `wait ` (blocks at most 270 s, returns the summary once, `RUNNING` exit 99, exit 98 for a launcher that died or never started). `tools/mutation-table.sh` runs a list of hand mutants in one job and returns a kill table with the killing test per mutant; it aborts on a red or zero-test baseline and never counts a build error as a kill. `tools/testparse.sh` is the one parser both read, with fixtures under `tools/fixtures` and `tools/test-tools.sh`. Briefs now name them, add orient-in-one-script and bounded-observation rules for Hands and Soul, call budgets for Imagination (40-80), Eyes (40) and Life (25), the range-dump rule for Soul, one job for build, tests and mutation, and the scratch-path form of the Hands report. Contribution text says Forgejo pull request. + ## 2026-10-01: the skill follows the mind's correctness core Campaign `eureka-substrate`, cut `skill-recipes`, after the Huginn admission-rule and `eureka-state` client cuts (cut `ops-mind-upgrade`). Evidence: a census of the live mind found 6 findings that could not be closed and 39 resolutions that could not be withdrawn, from key locals over the bound.