refactor(agents): give each agent one folder, evals included #826

Merged
coilysiren merged 6 commits from aos/claude/bk79-agent-folders into main 2026-08-16 06:51:57 +00:00
Member

Closes #816. Layout picked by Kai from the options in the issue thread.

The shape

agents/echo/            agents/deep/
  definition.yaml         definition.yaml
  packs/                  packs/
    evaluation.yaml         evaluation.yaml
    rate.yaml               rate.yaml
                            board.yaml
                            rate-fixture.yaml
  probes/                 probes/
  evaluations/            evaluations/
  rendered/prompt.txt     rendered/prompt.txt

agent/ keeps only what both agents read: phrases.yaml, content-classes.yaml, compose/, rendered/roles/, and the tracker and injection fixtures.

Filenames stop repeating what the folder says, so rate-deep.yaml is agents/deep/packs/rate.yaml and the two agents' files finally match each other.

Four judgement calls worth reviewing

Probes are not packs. The sixteen ad-hoc packs from evaluations/packs/ went to probes/, not packs/. packs/ is the canonical set policy-check loads, and TestEveryTrackedPackReachesPolicyCheck and TestEveryCaseDeclaresItsLanguageScope assert over it. Filing probes there would have silently widened both tests onto files that were never meant to satisfy them.

Datasets keep their original paths. A record whose provenance reads definition: agent/sirens-deep.yaml still reads that. It is the record of what ran, and rewriting it would falsify the thing #316 built the field for. Ownership came from that field rather than from filenames, which is how rate-fixture-tracker-* records ended up under echo/ - the Echo definition produced them.

.agents/skills/ did not move, though Echo's and Deep's skills are agent-exclusive. It is the agentic-os catalog contract, not this repo's convention: check-skills and repo-pointer-skills run against that path and the workspace AGENTS.md calls it canonical. This is the one place "every file" is deliberately not satisfied, and docs/sirens-echo-agent-folders.md says so.

Prompt snapshots grew five bytes each. That is exactly the longer definition path rendered into their header line. Budgets rise by five; nothing else changed. sirens-echo-prompt also had to stop deriving the output name from the definition filename, since both agents' files are now definition.yaml and would have collided onto one snapshot.

Blast radius

58 renames, 64 modified files. Beyond the moves: ward-command.sh verbs, the eval command's defaults and its out-of-repo pack preservation, sirens-echo-prompt output paths, sirens-echo-evidence's dataset glob, the Dockerfile COPY set for all three stages, and roughly twenty tests that built paths with filepath.Join("..", "..", "agent", ...) rather than string literals.

A small trackedpaths_test.go helper replaces four hand-rolled agent/*.yaml globs, since packs now span two roots.

Verification

ward gate PASS on all six steps: build, policy-check, vet, test, test-skips, pre-commit. sirens-echo-prompt --check reports both snapshots current.

Not in this PR

The evals do not test the composed agent. SIRENS_ECHO_COMPOSED_BUNDLE is set by nothing in the repo, so every eval verb runs against PlaceholderComposed. I raised it on #816 with the provenance counts; Kai's call was to leave it alone, so this PR moves those files without touching that behaviour.

I also reported .agents/skills/ops-social-discord/ as possibly orphaned. That was wrong - AGENTS.md already documents it as deliberately outside the runtime skill roots. No change made.

Closes #816. Layout picked by Kai from the options in the issue thread. ## The shape ```text agents/echo/ agents/deep/ definition.yaml definition.yaml packs/ packs/ evaluation.yaml evaluation.yaml rate.yaml rate.yaml board.yaml rate-fixture.yaml probes/ probes/ evaluations/ evaluations/ rendered/prompt.txt rendered/prompt.txt ``` `agent/` keeps only what both agents read: `phrases.yaml`, `content-classes.yaml`, `compose/`, `rendered/roles/`, and the tracker and injection fixtures. Filenames stop repeating what the folder says, so `rate-deep.yaml` is `agents/deep/packs/rate.yaml` and the two agents' files finally match each other. ## Four judgement calls worth reviewing **Probes are not packs.** The sixteen ad-hoc packs from `evaluations/packs/` went to `probes/`, not `packs/`. `packs/` is the canonical set policy-check loads, and `TestEveryTrackedPackReachesPolicyCheck` and `TestEveryCaseDeclaresItsLanguageScope` assert over it. Filing probes there would have silently widened both tests onto files that were never meant to satisfy them. **Datasets keep their original paths.** A record whose provenance reads `definition: agent/sirens-deep.yaml` still reads that. It is the record of what ran, and rewriting it would falsify the thing `#316` built the field for. Ownership came from that field rather than from filenames, which is how `rate-fixture-tracker-*` records ended up under `echo/` - the Echo definition produced them. **`.agents/skills/` did not move**, though Echo's and Deep's skills are agent-exclusive. It is the agentic-os catalog contract, not this repo's convention: `check-skills` and `repo-pointer-skills` run against that path and the workspace `AGENTS.md` calls it canonical. This is the one place "every file" is deliberately not satisfied, and `docs/sirens-echo-agent-folders.md` says so. **Prompt snapshots grew five bytes each.** That is exactly the longer definition path rendered into their header line. Budgets rise by five; nothing else changed. `sirens-echo-prompt` also had to stop deriving the output name from the definition filename, since both agents' files are now `definition.yaml` and would have collided onto one snapshot. ## Blast radius 58 renames, 64 modified files. Beyond the moves: `ward-command.sh` verbs, the eval command's defaults and its out-of-repo pack preservation, `sirens-echo-prompt` output paths, `sirens-echo-evidence`'s dataset glob, the Dockerfile COPY set for all three stages, and roughly twenty tests that built paths with `filepath.Join("..", "..", "agent", ...)` rather than string literals. A small `trackedpaths_test.go` helper replaces four hand-rolled `agent/*.yaml` globs, since packs now span two roots. ## Verification `ward gate` PASS on all six steps: build, policy-check, vet, test, test-skips, pre-commit. `sirens-echo-prompt --check` reports both snapshots current. ## Not in this PR **The evals do not test the composed agent.** `SIRENS_ECHO_COMPOSED_BUNDLE` is set by nothing in the repo, so every eval verb runs against `PlaceholderComposed`. I raised it on #816 with the provenance counts; Kai's call was to leave it alone, so this PR moves those files without touching that behaviour. I also reported `.agents/skills/ops-social-discord/` as possibly orphaned. **That was wrong** - `AGENTS.md` already documents it as deliberately outside the runtime skill roots. No change made.
refactor(agents): give each agent one folder, evals included
All checks were successful
ci / image-build (pull_request) Successful in 24s
ci / test (pull_request) Successful in 41s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
5a089adaad
Every file that pertains to Echo or Deep and nothing else now lives under
agents/<name>/: its definition, its canonical packs, the probe packs its
datasets cite, its datasets, and its rendered prompt snapshot. agent/
keeps only what both agents read.

Filenames stop repeating what the folder already says, so rate-deep.yaml
is agents/deep/packs/rate.yaml and the two agents' files finally have the
same names as each other.

Probes are separated from packs rather than filed together. packs/ is the
canonical set policy-check loads and two coverage tests assert over, and
folding sixteen ad-hoc probe packs into it would have widened those tests
silently. probes/ is preserved evidence, which is what they are.

Datasets keep the paths they were produced with. A record naming
agent/sirens-deep.yaml is history, and rewriting it would falsify the
provenance the record exists to carry.

.agents/skills/ does not move, though Echo's and Deep's skills are
agent-exclusive. That path is the agentic-os catalog contract, not this
repo's convention, so the rule stops there deliberately. Written up with
the rest of the layout in docs/sirens-echo-agent-folders.md.

The prompt snapshots grew five bytes each, which is the longer definition
path rendered into their header line, and the budgets rise to match.

`ward gate` PASS on all six steps.

Closes #816

Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Two conflicts, both mechanical.

`agents/deep/packs/rate.yaml`: #819 added a `shape` field per case while
this branch rewrote every `observed` dataset path for the move. Kept
both. The rewritten paths are the live ones, since `evaluations/` really
did become `agents/deep/evaluations/`, so main's copies are now dead
references rather than a competing opinion.

`prompt_test.go`: this branch renamed the snapshot keys and raised each
budget by five for the longer definition path in the header, while #821
raised both for prompt growth. The two are additive and the merged
snapshots measure 22296 and 12580, which is main's numbers plus five
exactly, so the budgets are set to the measured sizes.

Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
fix(test): point two tests carried in from main at the new layout
All checks were successful
ci / image-build (pull_request) Successful in 26s
ci / test (pull_request) Successful in 42s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
d7925bf8e9
`ratebrevity_test.go` and `filingtrigger_test.go` arrived on main after
this branch was cut and build their paths from `agent/` literals. Git
merged them without a conflict, because neither touched a line this
branch changed, and the result did not compile against the moved tree.

Both now derive from the layout rather than naming files. The rate test
takes `agents/*/packs/rate.yaml`, and the filing test takes every
tracked definition rather than echo and deep by name, so a third profile
joins the property instead of sitting quietly outside it.

Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Author
Member

Merged main in and repaired the fallout. ward gate is green and the branch is mergeable again. Also one blocker below that this PR cannot fix from inside this repository.

Pushed as two commits rather than a rebase, so bk79's commit is untouched.

🔴 Blocker: this bricks Sirens Deep on the next image

coilyco-bridge/deploy services/sirens-echo/deploy/sirens-deep-values.yaml:161 pins:

  - name: SIRENS_ECHO_DEFINITION
    value: /app/agent/sirens-deep.yaml

That file stops existing in the image. LoadConfig returns the load error, cmd/sirens-echo/main.go:27 calls os.Exit(1), so Deep crashloops rather than degrading. Echo is fine, because it takes defaultDefinitionPath and this PR moved that with it. Deep is the only pod that names the path, and it is the one that names it.

The ordering is the awkward part. Deploy cannot change first, because the running image still only has the old path. So: merge this, let publish-echo-image ship the new layout, then change the deploy value, then roll out. Between the merge and the deploy change, any Deep rollout is a crashloop.

If you would rather not hold that window open, the alternative is for this PR to keep agent/sirens-deep.yaml as a one-line compatibility file until deploy catches up. I have not done that, because it half-undoes the refactor and the window is closeable in one deploy PR. Your call.

"Blast radius" lists the in-repo consequences and does not mention the deploy repo, which is where the only production-visible one is.

Two conflicts, both mechanical

agents/deep/packs/rate.yaml - #819 added a shape per case while this branch rewrote every observed dataset path. Kept both. The rewritten paths are the live ones: evaluations/ really did become agents/deep/evaluations/, so main's copies are dead references rather than a competing opinion.

prompt_test.go - this branch renamed the snapshot keys and raised each budget by five for the longer definition path in the header, while #821 raised both for prompt growth. They compose, and the merged snapshots measure exactly 22296 and 12580, which is main's numbers plus five. Budgets set to the measured sizes rather than to either side's guess.

Two tests main added that git merged into a broken build

ratebrevity_test.go (#819) and filingtrigger_test.go (#821) landed after this branch was cut and build paths from agent/ literals. Neither touched a line this branch changed, so git merged both cleanly and the package stopped compiling. Same shape as #812, arriving through a rename this time.

Both now derive from the layout rather than naming files, using this branch's own helpers:

  • the rate test takes agents/*/packs/rate.yaml
  • the filing test takes every tracked definition rather than echo and deep by name, so a third profile joins the property instead of sitting outside it

Added trackedRatePackPaths and agentOf beside the existing helpers.

On the four judgement calls

All four read correctly to me. Probes are not packs is the one I would have got wrong: filing them under packs/ would have silently widened TestEveryTrackedPackReachesPolicyCheck and TestEveryCaseDeclaresItsLanguageScope onto sixteen files that were never written to satisfy either, and the tests would have gone green while meaning less.

Datasets keep their original paths is right and is not contradicted by the observed rewrites I resolved above: definition: inside a record is provenance and must not move, while observed: is a pointer to a file that did move.

A stale-reference sweep over the tree finds one hit, in docs/sirens-echo-agent-folders.md, and it is the sentence explaining why old provenance stays as it is.

**Merged `main` in and repaired the fallout. `ward gate` is green and the branch is mergeable again.** Also one blocker below that this PR cannot fix from inside this repository. Pushed as two commits rather than a rebase, so bk79's commit is untouched. ## 🔴 Blocker: this bricks Sirens Deep on the next image `coilyco-bridge/deploy` `services/sirens-echo/deploy/sirens-deep-values.yaml:161` pins: ```yaml - name: SIRENS_ECHO_DEFINITION value: /app/agent/sirens-deep.yaml ``` That file stops existing in the image. `LoadConfig` returns the load error, `cmd/sirens-echo/main.go:27` calls `os.Exit(1)`, so Deep crashloops rather than degrading. Echo is fine, because it takes `defaultDefinitionPath` and this PR moved that with it. Deep is the only pod that names the path, and it is the one that names it. **The ordering is the awkward part.** Deploy cannot change first, because the running image still only has the old path. So: merge this, let `publish-echo-image` ship the new layout, then change the deploy value, then roll out. Between the merge and the deploy change, any Deep rollout is a crashloop. If you would rather not hold that window open, the alternative is for this PR to keep `agent/sirens-deep.yaml` as a one-line compatibility file until deploy catches up. I have not done that, because it half-undoes the refactor and the window is closeable in one deploy PR. Your call. "Blast radius" lists the in-repo consequences and does not mention the deploy repo, which is where the only production-visible one is. ## Two conflicts, both mechanical **`agents/deep/packs/rate.yaml`** - #819 added a `shape` per case while this branch rewrote every `observed` dataset path. Kept both. The rewritten paths are the live ones: `evaluations/` really did become `agents/deep/evaluations/`, so main's copies are dead references rather than a competing opinion. **`prompt_test.go`** - this branch renamed the snapshot keys and raised each budget by five for the longer definition path in the header, while #821 raised both for prompt growth. They compose, and the merged snapshots measure exactly 22296 and 12580, which is main's numbers plus five. Budgets set to the measured sizes rather than to either side's guess. ## Two tests main added that git merged into a broken build `ratebrevity_test.go` (#819) and `filingtrigger_test.go` (#821) landed after this branch was cut and build paths from `agent/` literals. Neither touched a line this branch changed, so git merged both cleanly and the package stopped compiling. Same shape as #812, arriving through a rename this time. Both now derive from the layout rather than naming files, using this branch's own helpers: - the rate test takes `agents/*/packs/rate.yaml` - the filing test takes every tracked definition rather than echo and deep by name, so a third profile joins the property instead of sitting outside it Added `trackedRatePackPaths` and `agentOf` beside the existing helpers. ## On the four judgement calls All four read correctly to me. **Probes are not packs** is the one I would have got wrong: filing them under `packs/` would have silently widened `TestEveryTrackedPackReachesPolicyCheck` and `TestEveryCaseDeclaresItsLanguageScope` onto sixteen files that were never written to satisfy either, and the tests would have gone green while meaning less. **Datasets keep their original paths** is right and is not contradicted by the `observed` rewrites I resolved above: `definition:` inside a record is provenance and must not move, while `observed:` is a pointer to a file that did move. A stale-reference sweep over the tree finds one hit, in `docs/sirens-echo-agent-folders.md`, and it is the sentence explaining why old provenance stays as it is.
Author
Member

The deploy blocker I raised is gone. Verified against coilyco-bridge/deploy origin/main at 922aac4, not taken on report.

Both lanes now read SIRENS_ECHO_DEFINITION from a mounted ConfigMap rather than from a path in the image. Deep's is /etc/sirens-deep-definition/definition.yaml, with volume and mount present. That is the third option from deploy#548 — stop pinning an image path at all — so the merge-ordering window that issue described no longer exists in either direction. #548 is closed.

The two remaining image couplings both hold for this branch:

  • /app/agent/phrases.yaml, still pinned by both lanes. This branch keeps agent/phrases.yaml in place, confirmed against the branch tree.
  • local_skill_roots, which stays image-relative. This branch does not move .agents/skills/, confirmed the same way.

services/sirens-echo/README.md still describes Deep as pinning /app/agent/sirens-deep.yaml, which is stale prose in that repo rather than anything this branch touches.

What is not safe yet is the merge itself

The branch is 32 commits behind main and conflicts in 9 files, up from 4 last time:

agents/deep/packs/board.yaml
agents/deep/rendered/prompt.txt
agents/echo/rendered/prompt.txt
docs/response-profiles.md
docs/sirens-echo-battery.md
docs/sirens-echo-board-method.md
docs/sirens-echo-board.md
docs/sirens-echo-rate.md
internal/community/prompt_test.go

I ran that merge to count them and aborted it, so the branch is untouched. Two of those, the rendered prompts and prompt_test.go, are the budget pattern from last time: re-render from the merged sources and set the budgets to what they measure, rather than resolving the numbers by hand.

Worth noting the cost of waiting is superlinear here. A branch that renames 58 files collides with every doc and snapshot anyone else touches, and it has now been through two rounds of that. If it is wanted, it is cheapest to merge soon.

Say the word and I will do the merge and take it to green, the same way as before.

**The deploy blocker I raised is gone.** Verified against `coilyco-bridge/deploy` `origin/main` at `922aac4`, not taken on report. Both lanes now read `SIRENS_ECHO_DEFINITION` from a mounted ConfigMap rather than from a path in the image. Deep's is `/etc/sirens-deep-definition/definition.yaml`, with volume and mount present. That is the third option from `deploy#548` — stop pinning an image path at all — so the merge-ordering window that issue described no longer exists in either direction. #548 is closed. The two remaining image couplings both hold for this branch: * **`/app/agent/phrases.yaml`**, still pinned by both lanes. This branch keeps `agent/phrases.yaml` in place, confirmed against the branch tree. * **`local_skill_roots`**, which stays image-relative. This branch does not move `.agents/skills/`, confirmed the same way. `services/sirens-echo/README.md` still describes Deep as pinning `/app/agent/sirens-deep.yaml`, which is stale prose in that repo rather than anything this branch touches. ## What is not safe yet is the merge itself The branch is **32 commits behind `main` and conflicts in 9 files**, up from 4 last time: ``` agents/deep/packs/board.yaml agents/deep/rendered/prompt.txt agents/echo/rendered/prompt.txt docs/response-profiles.md docs/sirens-echo-battery.md docs/sirens-echo-board-method.md docs/sirens-echo-board.md docs/sirens-echo-rate.md internal/community/prompt_test.go ``` I ran that merge to count them and aborted it, so the branch is untouched. Two of those, the rendered prompts and `prompt_test.go`, are the budget pattern from last time: re-render from the merged sources and set the budgets to what they measure, rather than resolving the numbers by hand. Worth noting the cost of waiting is superlinear here. A branch that renames 58 files collides with every doc and snapshot anyone else touches, and it has now been through two rounds of that. If it is wanted, it is cheapest to merge soon. Say the word and I will do the merge and take it to green, the same way as before.
Co-authored-by: Coilyco Robotic Operations Division <coilyco-ops@coilysiren.me>
Co-authored-by: Claude <noreply@anthropic.com>
fix(tests): derive agent paths from the layout, and correct agentOf
Some checks failed
ci / publish-echo-image (pull_request) Has been cancelled
ci / publish-observed (pull_request) Has been cancelled
ci / image-build (pull_request) Has been cancelled
ci / test (pull_request) Has been cancelled
2b9366d2f1
Two tests landed on main after this branch was cut and build paths from
`agent/` literals. Neither touched a line the branch changed, so git merged
both cleanly and the package stopped compiling. Same shape as #812 and as the
pair repaired in the previous merge, arriving through a rename again.

Both now derive from the layout rather than naming files. `organizations_test`
takes every tracked definition, so a third profile joins the property instead
of sitting outside it, and `threadprefill_test` asks for Deep's definition by
agent name through a new `definitionOf` helper.

`agentOf` was wrong for definitions and this is the first caller to expose it.
It counted two directories up, which is right for `agents/<name>/packs/x.yaml`
and returns "agents" for `agents/<name>/definition.yaml`. `filingtrigger_test`
has been labelling every agent "agents" in its failures since the previous
merge. It now reads the segment after `agents/`, which is correct at both
depths.

Prompt budgets rise by five, to 25777 and 14521, which is main's numbers plus
the longer definition path in each snapshot's header. Recorded in the raises
ledger, because the budgets are a ratchet and an unexplained raise is what that
file exists to catch.

Refs #816

Co-authored-by: Coilyco Robotic Operations Division <coilyco-ops@coilysiren.me>
Co-authored-by: Claude <noreply@anthropic.com>
Merge remote-tracking branch 'origin/main' into aos/claude/bk79-agent-folders
All checks were successful
ci / test (pull_request) Successful in 44s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
ci / image-build (pull_request) Successful in 27s
a318a68197
Co-authored-by: Coilyco Robotic Operations Division <coilyco-ops@coilysiren.me>
Co-authored-by: Claude <noreply@anthropic.com>
Author
Member

Done. main is merged in, just gate is green on all six steps, and the branch is mergeable and level with main at 28a0a5b.

Pushed as two commits plus a second merge, so bk79's original commit stays untouched.

  • 3e58567 - the merge, conflict resolutions only.
  • 2b9366d - the repairs the merge needed to build.
  • a318a68 - a second merge, because main moved four commits while this was in flight. Clean, no conflicts.

The nine conflicts

Eight were the same shape: this branch renamed the file, main rewrote the sentence around it. Resolved to this branch's paths with main's wording, which matters more than it sounds because main retired ward exec for just in the meantime. The branch was written before that, so every doc line it touched said ward exec and every one of those is now just.

docs/response-profiles.md also had a paragraph main added about object emoji, kept alongside the renamed path.

internal/community/prompt_test.go was the budget pattern again, and the arithmetic is a clean check on the whole merge: re-rendered from merged sources the snapshots measure 25777 and 14521, which is main's 25772 and 14516 plus exactly five. Five bytes is the longer definition path in the header line, which is what the PR body predicted two rounds ago. Budgets set to the measured sizes.

One judgement call

docs/sirens-echo-board.md had main writing the board output as evaluations/<date>-<seat>/dataset.yaml, a per-run directory. No dataset.yaml exists anywhere in this repository on either side, and main's own evaluations/ is flat .yaml files. So that line describes something neither tree does. I kept this branch's flat form, repointed: agents/deep/evaluations/<date>-<seat>.yaml. If the directory shape is actually intended, it is a separate change and this line should not be the only place it is stated.

Two tests main added that git merged into a broken build

organizations_test.go (#806) and threadprefill_test.go (#769) both build paths from agent/ literals. Neither touched a line this branch changed, so git merged both cleanly and the package stopped compiling. That is now the third round of this exact failure on this branch.

Both derive from the layout instead: organizations_test takes every tracked definition, and threadprefill_test asks for Deep's by name through a new definitionOf helper.

A real bug this exposed, not introduced

agentOf was wrong for definition paths, and organizations_test was the first caller to make it visible.

It counted two directories up, which is correct for agents/<name>/packs/rate.yaml and returns "agents" for agents/<name>/definition.yaml. I verified that rather than reading it: all three definition paths return "agents".

filingtrigger_test.go:57 has been calling it on definition paths since the previous merge, so every failure message there has been labelling both agents "agents". Cosmetic, since it only reaches failure output, but it defeats the reason that test was rewritten to name the agent. It now reads the segment after agents/, correct at both depths.

Verification

just gate PASS on build, policy-check, vet, test, test-skips, pre-commit. just prompt-check reports both snapshots current. The +5 budget raise is recorded in docs/sirens-echo-prompt-budget-raises.md with its cause, which the ratchet comment in prompt_test.go requires and the branch had not done.

One caveat worth stating plainly: 3e58567 does not build on its own. It carries the conflict resolutions and main's two new tests, and 2b9366d is what makes the tree compile. That split is deliberate so the judgement calls are readable separately from 129 files of mechanical merge, but it does mean a bisect landing exactly on the merge commit sees a broken build.

Left alone

pyproject.toml:19 and AGENTS.md:34 still say ward exec knobs. Both are on main already and neither is this branch's, so they are stale prose in main rather than merge fallout. Not fixed here.

Not merged. The merge stays director-gated and this PR has an unactioned review request. Say the word and I will merge it. Worth doing soon rather than later for the reason the last round gave: a branch that renames 58 files collides with every doc and snapshot anyone touches, and this is now the third round of that in under 24 hours.

**Done. `main` is merged in, `just gate` is green on all six steps, and the branch is mergeable and level with `main` at `28a0a5b`.** Pushed as two commits plus a second merge, so bk79's original commit stays untouched. * `3e58567` - the merge, conflict resolutions only. * `2b9366d` - the repairs the merge needed to build. * `a318a68` - a second merge, because `main` moved four commits while this was in flight. Clean, no conflicts. ## The nine conflicts Eight were the same shape: this branch renamed the file, `main` rewrote the sentence around it. Resolved to **this branch's paths with `main`'s wording**, which matters more than it sounds because `main` retired `ward exec` for `just` in the meantime. The branch was written before that, so every doc line it touched said `ward exec` and every one of those is now `just`. `docs/response-profiles.md` also had a paragraph `main` added about object emoji, kept alongside the renamed path. `internal/community/prompt_test.go` was the budget pattern again, and the arithmetic is a clean check on the whole merge: re-rendered from merged sources the snapshots measure **25777 and 14521**, which is `main`'s 25772 and 14516 plus exactly five. Five bytes is the longer definition path in the header line, which is what the PR body predicted two rounds ago. Budgets set to the measured sizes. ## One judgement call `docs/sirens-echo-board.md` had `main` writing the board output as `evaluations/<date>-<seat>/dataset.yaml`, a per-run directory. **No `dataset.yaml` exists anywhere in this repository on either side**, and `main`'s own `evaluations/` is flat `.yaml` files. So that line describes something neither tree does. I kept this branch's flat form, repointed: `agents/deep/evaluations/<date>-<seat>.yaml`. If the directory shape is actually intended, it is a separate change and this line should not be the only place it is stated. ## Two tests `main` added that git merged into a broken build `organizations_test.go` (#806) and `threadprefill_test.go` (#769) both build paths from `agent/` literals. Neither touched a line this branch changed, so git merged both cleanly and the package stopped compiling. That is now the third round of this exact failure on this branch. Both derive from the layout instead: `organizations_test` takes every tracked definition, and `threadprefill_test` asks for Deep's by name through a new `definitionOf` helper. ## A real bug this exposed, not introduced `agentOf` was wrong for definition paths, and `organizations_test` was the first caller to make it visible. It counted two directories up, which is correct for `agents/<name>/packs/rate.yaml` and returns **`"agents"`** for `agents/<name>/definition.yaml`. I verified that rather than reading it: all three definition paths return `"agents"`. `filingtrigger_test.go:57` has been calling it on definition paths since the previous merge, so every failure message there has been labelling both agents `"agents"`. Cosmetic, since it only reaches failure output, but it defeats the reason that test was rewritten to name the agent. It now reads the segment after `agents/`, correct at both depths. ## Verification `just gate` PASS on build, policy-check, vet, test, test-skips, pre-commit. `just prompt-check` reports both snapshots current. The `+5` budget raise is recorded in `docs/sirens-echo-prompt-budget-raises.md` with its cause, which the ratchet comment in `prompt_test.go` requires and the branch had not done. One caveat worth stating plainly: **`3e58567` does not build on its own.** It carries the conflict resolutions and `main`'s two new tests, and `2b9366d` is what makes the tree compile. That split is deliberate so the judgement calls are readable separately from 129 files of mechanical merge, but it does mean a bisect landing exactly on the merge commit sees a broken build. ## Left alone `pyproject.toml:19` and `AGENTS.md:34` still say `ward exec knobs`. Both are on `main` already and neither is this branch's, so they are stale prose in `main` rather than merge fallout. Not fixed here. **Not merged.** The merge stays director-gated and this PR has an unactioned review request. Say the word and I will merge it. Worth doing soon rather than later for the reason the last round gave: a branch that renames 58 files collides with every doc and snapshot anyone touches, and this is now the third round of that in under 24 hours.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-gaming/sirens-echo!826
No description provided.