Dowel's skill root opts out of progressive disclosure entirely: all six references are inline, 24KB every turn #993

Closed
opened 2026-08-18 22:36:37 +00:00 by coilyco-ops · 4 comments
Member

Found while checking whether .agents/skills/sirens-dowel needed updating for the lane's MCP surface. It did not - references/tool-surfaces.md is accurate 12/12 against the live roster on coilyco-bridge/deploy main, and it correctly declares itself a map rather than an inventory with the offered tool list winning on conflict. Nothing to fix there.

This is the thing I found instead.

Every reference in the root is inline: always

SKILL.md                    1,935
coilyco-suite.md            3,906
dowel-provenance.md         3,838
moxn-knowledge-base.md      4,013
site-work.md                4,566
temporal.md                 3,081
tool-surfaces.md            2,758
                           ------
total inline               24,097 bytes, every turn

The two shared roots the same definition loads use the tier split #927 built:

coilyco-general    entry 2,504    deferred 5,717
coilyco-org        entry   673    deferred 1,380

So the lane with the largest prompt is the one root that carries everything inline.

Not all of it is wrong

#927 records the rule and it is right: "a model that has to choose to read its own boundaries may not". dowel-provenance.md is the identity and placement answer, and placement is the fact a probe most wants wrong, which the root's own closing paragraph explains. tool-surfaces.md prevents a question being turned away for want of noticing a tool. Both earn inline on that reasoning.

Three of them look like the long tail

  • site-work.md (4,566). The root says "Read references/site-work.md before touching a page", which is a conditional. A conditional is what the deferred tier exists for.
  • coilyco-suite.md (3,906) and temporal.md (3,081). Subject matter rather than boundaries. A turn that never reaches those subjects pays for them anyway.

Deferring those three is roughly 11.5KB off every turn, at the cost of one read_skill round on turns that actually go there.

Why it is worth a decision rather than drift

This is #932's lane, at a 32.9s median turn. 11.5KB is not the headline there, and I am not claiming it is. The point is that each inline: always looked reasonable on its own and the total was never decided by anyone. That is how the tier split stops being a split.

Kai's own guidance on #927 was "keep the highest-traffic references inline and move the long tail, rather than moving everything on principle". This root moved nothing.

What would close it

A deliberate answer to one question per reference: must Dowel never fail to know this, or does it need it only when the subject comes up? Inline the first kind, defer the second, and record why on the file rather than in a thread.

I did not change anything. This is a judgment call about what the demo agent must never fail to know, and that belongs to Kai or the AI seat rather than to me, especially inside the August 19 freeze (#929).

Evidence for the broader question on #968, which is currently an empty stub asking whether progressive disclosure is actually working. This is one concrete answer: on the shared roots yes, on this root it was opted out of.

Related: #927, #932, #968, #859.

Found while checking whether `.agents/skills/sirens-dowel` needed updating for the lane's MCP surface. **It did not** - `references/tool-surfaces.md` is accurate 12/12 against the live roster on `coilyco-bridge/deploy` main, and it correctly declares itself a map rather than an inventory with the offered tool list winning on conflict. Nothing to fix there. This is the thing I found instead. ## Every reference in the root is `inline: always` ``` SKILL.md 1,935 coilyco-suite.md 3,906 dowel-provenance.md 3,838 moxn-knowledge-base.md 4,013 site-work.md 4,566 temporal.md 3,081 tool-surfaces.md 2,758 ------ total inline 24,097 bytes, every turn ``` The two shared roots the same definition loads use the tier split #927 built: ``` coilyco-general entry 2,504 deferred 5,717 coilyco-org entry 673 deferred 1,380 ``` So the lane with the largest prompt is the one root that carries everything inline. ## Not all of it is wrong #927 records the rule and it is right: "a model that has to *choose* to read its own boundaries may not". `dowel-provenance.md` is the identity and placement answer, and placement is the fact a probe most wants wrong, which the root's own closing paragraph explains. `tool-surfaces.md` prevents a question being turned away for want of noticing a tool. Both earn inline on that reasoning. ## Three of them look like the long tail * **`site-work.md`** (4,566). The root says "Read `references/site-work.md` **before touching a page**", which is a conditional. A conditional is what the deferred tier exists for. * **`coilyco-suite.md`** (3,906) and **`temporal.md`** (3,081). Subject matter rather than boundaries. A turn that never reaches those subjects pays for them anyway. Deferring those three is roughly **11.5KB off every turn**, at the cost of one `read_skill` round on turns that actually go there. ## Why it is worth a decision rather than drift This is #932's lane, at a 32.9s median turn. 11.5KB is not the headline there, and I am not claiming it is. The point is that **each `inline: always` looked reasonable on its own and the total was never decided by anyone**. That is how the tier split stops being a split. Kai's own guidance on #927 was "keep the highest-traffic references inline and move the long tail, rather than moving everything on principle". This root moved nothing. ## What would close it A deliberate answer to one question per reference: **must Dowel never fail to know this, or does it need it only when the subject comes up?** Inline the first kind, defer the second, and record why on the file rather than in a thread. I did not change anything. This is a judgment call about what the demo agent must never fail to know, and that belongs to Kai or the AI seat rather than to me, especially inside the August 19 freeze (#929). Evidence for the broader question on #968, which is currently an empty stub asking whether progressive disclosure is actually working. This is one concrete answer: on the shared roots yes, on this root it was opted out of. Related: #927, #932, #968, #859.
Author
Member

Correcting my own list, and adding the repo-wide picture that makes the scope clear.

temporal.md does not belong in my long-tail list

The root says so explicitly, and I quoted the file names out of it without reading the sentence around them:

Two of them carry a standing instruction to reach for them rather than answer from recall. The shared knowledge base has references/moxn-knowledge-base.md, and Temporal has references/temporal.md. Both are already in this prompt, so on either subject there is nothing to fetch first and a remembered answer is a choice.

That is #927's own criterion, not subject matter. An instruction saying "do not answer this from memory" cannot be behind a fetch the model has to choose to make, because the failure mode is exactly the model not choosing. Both earn inline, and moxn-knowledge-base.md earns it for the same reason. I had temporal.md in the wrong column.

The corrected list is two files, not three

  • site-work.md (4,566) - the root's own pointer is "before touching a page", a conditional, which is what the deferred tier is for.
  • coilyco-suite.md (3,906) - what Kai ships and how to mention it. Subject matter, and the only one of the six carrying no standing instruction and no boundary.

Roughly 8.5KB off every turn rather than the 11.5KB I claimed.

Repo-wide, so the scope is not guessed

Seventeen reference files exist. Ten are inline:

INLINE    coilyco-general/references/capability.md          3,659
INLINE    coilyco-org/references/organizations.md           1,380
INLINE    sirens-echo-knowledge/references/boundaries.md    1,005
INLINE    sirens-echo-knowledge/references/capability.md    3,907
INLINE    sirens-dowel/references/*                        22,162  (six files)

The four outside sirens-dowel are precisely the four #927 justified when it built the split. sirens-dowel contributes six of the ten, and is the only root added since.

So this is not a fleet-wide annotation pass. The rest of the repo is already tiered deliberately, with reasons on the record. This is two files on one root, and the action is removing inline: always rather than attaching anything, since deferred is the default and inline is the opt-out.

Correcting my own list, and adding the repo-wide picture that makes the scope clear. ## `temporal.md` does not belong in my long-tail list The root says so explicitly, and I quoted the file names out of it without reading the sentence around them: > Two of them carry **a standing instruction to reach for them rather than answer from recall**. The shared knowledge base has `references/moxn-knowledge-base.md`, and Temporal has `references/temporal.md`. Both are already in this prompt, so on either subject there is nothing to fetch first and **a remembered answer is a choice**. That is #927's own criterion, not subject matter. An instruction saying "do not answer this from memory" cannot be behind a fetch the model has to choose to make, because the failure mode is exactly the model not choosing. Both earn inline, and `moxn-knowledge-base.md` earns it for the same reason. I had `temporal.md` in the wrong column. ## The corrected list is two files, not three * **`site-work.md`** (4,566) - the root's own pointer is "before touching a page", a conditional, which is what the deferred tier is for. * **`coilyco-suite.md`** (3,906) - what Kai ships and how to mention it. Subject matter, and the only one of the six carrying no standing instruction and no boundary. Roughly **8.5KB** off every turn rather than the 11.5KB I claimed. ## Repo-wide, so the scope is not guessed Seventeen reference files exist. Ten are inline: ``` INLINE coilyco-general/references/capability.md 3,659 INLINE coilyco-org/references/organizations.md 1,380 INLINE sirens-echo-knowledge/references/boundaries.md 1,005 INLINE sirens-echo-knowledge/references/capability.md 3,907 INLINE sirens-dowel/references/* 22,162 (six files) ``` The four outside `sirens-dowel` are precisely the four #927 justified when it built the split. **`sirens-dowel` contributes six of the ten**, and is the only root added since. So this is not a fleet-wide annotation pass. The rest of the repo is already tiered deliberately, with reasons on the record. This is two files on one root, and the action is **removing** `inline: always` rather than attaching anything, since deferred is the default and inline is the opt-out.
Author
Member

Decision: demote the long tail, keep the two standing-instruction files inline.

Kai's decision, 2026-08-19, recorded by Saiya (exec seat) during a P0 review.

Keep inline: always on moxn-knowledge-base.md and temporal.md. The root itself states why, and the correction comment above makes the same point: both carry a standing instruction to reach for them rather than answer from recall. On a Temporal livestream, an agent answering about Temporal from recall instead of the file is the exact failure that instruction exists to prevent.

Tier the other four onto the disclosure split the shared roots already use: coilyco-suite.md, dowel-provenance.md, site-work.md, tool-surfaces.md.

That is roughly 13KB off a 24KB inline block, on a lane whose prefix cost is the surviving explanation of the latency Kai called fatal.

Rejected: tiering all six. Maximum saving, and it puts recall-answering about Moxn and Temporal back on the table hours before the stream.

Acceptance unchanged from the body, plus: mcp.tool.count and the rendered prompt size recorded before and after.

## Decision: demote the long tail, keep the two standing-instruction files inline. **Kai's decision, 2026-08-19, recorded by Saiya (exec seat) during a P0 review.** Keep `inline: always` on **`moxn-knowledge-base.md`** and **`temporal.md`**. The root itself states why, and the correction comment above makes the same point: both carry a standing instruction to reach for them rather than answer from recall. On a Temporal livestream, an agent answering about Temporal from recall instead of the file is the exact failure that instruction exists to prevent. **Tier the other four** onto the disclosure split the shared roots already use: `coilyco-suite.md`, `dowel-provenance.md`, `site-work.md`, `tool-surfaces.md`. That is roughly **13KB off a 24KB inline block**, on a lane whose prefix cost is the surviving explanation of the latency Kai called fatal. **Rejected: tiering all six.** Maximum saving, and it puts recall-answering about Moxn and Temporal back on the table hours before the stream. Acceptance unchanged from the body, plus: `mcp.tool.count` and the rendered prompt size recorded before and after.
Author
Member

Done in 07e4b16 and bcf008d. Measured over the lane's three roots:

inline pack   39,805 -> 27,925 bytes   (-11,880)
fetchable          3 -> 6 references

This issue asked for a deliberate answer to one question per reference. Here it is, with the reasoning recorded on each file rather than only in this thread.

Deferred

  • site-work.md — the root's instruction to read it was already a conditional, and a conditional is what this tier is for. It also carries a second benefit: its ownership language is emphatic on purpose and was sitting in every unrelated turn where it reads as a general instruction not to decline. That is #1049's leak and a contributing pressure in #935.
  • coilyco-suite.md — subject matter with an unambiguous trigger, where the cost of missing it is a vague answer or a bad address rather than a broken boundary.
  • moxn-knowledge-base.md — see below.

Kept inline, departing from this issue on one

dowel-provenance.md and tool-surfaces.md as argued here. temporal.md against the proposal: it is not subject matter. It exists to correct a plausible-but-backwards belief, that Temporal orchestrates the turn, and being wrong about that on Temporal's own livestream is the worst answer available on this lane. A file that prevents a confident wrong answer is a boundary wearing a subject's clothes.

The larger finding, which was not the tiering

Checking whether tool-surfaces.md was still accurate — this issue reports it 12/12 — found that it no longer is. Three deploy commits landed after this issue was filed:

7fd366a 18:37  trim six catalog MCPs from this lane only
7edafb9 19:58  give the lane a read side of its own Temporal namespace
fdf2eaa 21:37  deprovision the Moxn MCP

The roster is now six servers: forgejo, exa, signoz, discord, playwright, temporal. tool-surfaces.md was inline every turn advertising openlibrary, tvmaze, gutendex, gbif, two Steam readers, and moxn, and missing temporal. moxn-knowledge-base.md was 6.5KB of inline write-and-delete doctrine for a deprovisioned server.

Both are fixed in bcf008d. The new Temporal reader is the good news: list_workflows, describe_workflow, and get_workflow_history, read-only over this deployment's own namespace, so the claim that Temporal observes the turn is now checkable in the turn that makes it rather than asserted.

Two things I did not do

I did not delete the stale files. moxn-knowledge-base.md and site-work.md are deferred and now open by saying the surface is not on the roster. The surfaces may return, and deleting somebody's work to fix a staleness problem is the wrong trade.

I did not remove the four dowel-moxn-* boundaries, which now declare rules for a surface the lane cannot reach. They stay declared because the alternative is deleting an eval for a capability that may come back, and I trimmed then restored the two sections they cite by anchor so boundaries-check passes honestly rather than being satisfied by deletion. #1019 should record four of its twenty-six slots as parked rather than pending.

Untested

The lane runs 434063f1 and has not rolled to any of this, so nothing here is verified against live behaviour. The risk the tiering introduces is precisely that a deferred file is not fetched, and confirming it means asking about the site and about Kai's projects after the roll.

Refs #927, #968, #1049, #935, #1011, #1019

**Done in `07e4b16` and `bcf008d`.** Measured over the lane's three roots: ``` inline pack 39,805 -> 27,925 bytes (-11,880) fetchable 3 -> 6 references ``` This issue asked for a deliberate answer to one question per reference. Here it is, with the reasoning recorded on each file rather than only in this thread. ## Deferred * **`site-work.md`** — the root's instruction to read it was already a conditional, and a conditional is what this tier is for. It also carries a second benefit: its ownership language is emphatic on purpose and was sitting in every unrelated turn where it reads as a general instruction not to decline. That is #1049's leak and a contributing pressure in #935. * **`coilyco-suite.md`** — subject matter with an unambiguous trigger, where the cost of missing it is a vague answer or a bad address rather than a broken boundary. * **`moxn-knowledge-base.md`** — see below. ## Kept inline, departing from this issue on one `dowel-provenance.md` and `tool-surfaces.md` as argued here. `temporal.md` **against** the proposal: it is not subject matter. It exists to correct a plausible-but-backwards belief, that Temporal orchestrates the turn, and being wrong about that on Temporal's own livestream is the worst answer available on this lane. A file that prevents a confident wrong answer is a boundary wearing a subject's clothes. ## The larger finding, which was not the tiering Checking whether `tool-surfaces.md` was still accurate — this issue reports it 12/12 — found that **it no longer is.** Three deploy commits landed after this issue was filed: ``` 7fd366a 18:37 trim six catalog MCPs from this lane only 7edafb9 19:58 give the lane a read side of its own Temporal namespace fdf2eaa 21:37 deprovision the Moxn MCP ``` The roster is now **six servers**: forgejo, exa, signoz, discord, playwright, temporal. `tool-surfaces.md` was inline every turn advertising openlibrary, tvmaze, gutendex, gbif, two Steam readers, and moxn, and missing temporal. `moxn-knowledge-base.md` was 6.5KB of inline write-and-delete doctrine for a deprovisioned server. Both are fixed in `bcf008d`. The new Temporal reader is the good news: `list_workflows`, `describe_workflow`, and `get_workflow_history`, read-only over this deployment's own namespace, so the claim that Temporal observes the turn is now **checkable in the turn that makes it** rather than asserted. ## Two things I did not do **I did not delete the stale files.** `moxn-knowledge-base.md` and `site-work.md` are deferred and now open by saying the surface is not on the roster. The surfaces may return, and deleting somebody's work to fix a staleness problem is the wrong trade. **I did not remove the four `dowel-moxn-*` boundaries**, which now declare rules for a surface the lane cannot reach. They stay declared because the alternative is deleting an eval for a capability that may come back, and I trimmed then restored the two sections they cite by anchor so `boundaries-check` passes honestly rather than being satisfied by deletion. **#1019 should record four of its twenty-six slots as parked rather than pending.** ## Untested The lane runs `434063f1` and has not rolled to any of this, so nothing here is verified against live behaviour. The risk the tiering introduces is precisely that a deferred file is not fetched, and confirming it means asking about the site and about Kai's projects after the roll. Refs #927, #968, #1049, #935, #1011, #1019
Author
Member

Closing as delivered with the August 19 demo readiness epic (#981).

The finding survives in #1094: the skill root opts out of progressive disclosure entirely, inlining all six references at 24 KB every turn, which compounds directly into the prefix cost measured in #1002.

Decision recorded in coilysiren/inbox#391.

Closing as delivered with the August 19 demo readiness epic (#981). The finding survives in #1094: the skill root opts out of progressive disclosure entirely, inlining all six references at 24 KB every turn, which compounds directly into the prefix cost measured in #1002. Decision recorded in coilysiren/inbox#391.
Sign in to join this conversation.
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#993
No description provided.