#2116 removed Temporal from chant and its definition of done was a word grep. A semantic audit on 2026-09-06 (main at 4853da2, three read-only passes over core, every lexicon, the docs site and the examples) found that the mechanism survived the word in about sixty places, seven of them behaviour rather than prose. Every gate on main passes; that is the point. Nothing here is caught by typecheck, vitest, the prose ratchet or rg -i temporal.
What the audit found
Behaviour. chant approve --approver <name> drops the name, since the handler reads only --actor, and every example README teaches --approver you. chant run approve --on fountain posts chant run approve into the sandbox, which the ACP command parser runs as the approve verb again, so the op is never re-applied although three docs pages say it is. The fountain docs and skill teach a --profile flag that #2130 deleted from core on the belief nothing read it. The azure drift e2e writes lexicons: ["azure", "temporal"] into its generated config. The k8s OperatorStack throws an error citing TMP014 and "the local dispatch executor can't honor its required gate", an argument OPS014's own header retires. --durable-requests is documented as working; its only implementation throws pending BinaryBourbon/fountain#1635. The MCP context bundle tells agents that ops carry taskQueue and workflow ids.
Front doors. README.md still lists temporal as an installable lexicon and says chant compiles to "Temporal-native durable workflows". The docs index, the llms.txt description, the agent-integration opener and the orchestration page say "durable" in the old sense. The public gate() docstring says the workflow pauses until a signal is received, and that sentence echoes through apply-op.ts, the components README, the ops guide and the cockroachdb README, which promises a 72 hour durable wait on an op that no longer has a gate.
Lexicon docs and skills. The fountain steward, composites and profiles pages plus the chant-fountain-ops skill still claim a second apply makes no writes on all six kinds, the claim #2175 disproved and fixed only in the example README. The k8s argo skill carries an "Argo vs Temporal" section that attributes this lexicon's own exports to the deleted one. The cedar dogwood skill and replay page still say scheduling is a TemporalSchedule. The github and gitlab lint-rules pages send readers to "the temporal lexicon" for two composites that ship from core. Terraform documents a taskQueue option its composites' tests assert does not exist, which #2179 missed because its acceptance was a word grep. Seven activity files promise heartbeats that ActivityProfile cannot express.
Vocabulary and dead code. "Search attribute", "workflow", "the worker's cwd", "replay-safe", TMP014 and "the temporal barrel" survive in about twenty comments across core and six lexicons. safeHeartbeat is a no-op kept alive by about forty call sites, four of which run a live 15 second interval that does nothing. The fountain cron rule carries a TODO for #2120, which shipped. The CI lexicon tests use --temporal as their sample run command.
The full list with file:line for every item is in the sub-issues.
Decisions
--profile is restored in core and threaded through OpRunStartOptions, since #2124 shipped it and #2130 removed it by mistake. The fountain approve path posts chant run <op> so the sandbox actually re-applies. chant approve honours --approver as approver ?? actor, matching chant run approve, so the docs stay as written. The --temporal bridge stays until 0.58.0 ships. signalName stays as the public field name here; its rename is its own issue.
Definition of done
Not a grep. Each sub-issue's checklist is a reviewed list of the places the audit named, and its PR body ticks every one with the line that proves it. Beyond that:
Sub-issues
Listed in the comment below once created.
#2116 removed Temporal from chant and its definition of done was a word grep. A semantic audit on 2026-09-06 (main at 4853da2, three read-only passes over core, every lexicon, the docs site and the examples) found that the mechanism survived the word in about sixty places, seven of them behaviour rather than prose. Every gate on main passes; that is the point. Nothing here is caught by typecheck, vitest, the prose ratchet or
rg -i temporal.What the audit found
Behaviour.
chant approve --approver <name>drops the name, since the handler reads only--actor, and every example README teaches--approver you.chant run approve --on fountainpostschant run approveinto the sandbox, which the ACP command parser runs as the approve verb again, so the op is never re-applied although three docs pages say it is. The fountain docs and skill teach a--profileflag that #2130 deleted from core on the belief nothing read it. The azure drift e2e writeslexicons: ["azure", "temporal"]into its generated config. The k8s OperatorStack throws an error citing TMP014 and "the local dispatch executor can't honor its required gate", an argument OPS014's own header retires.--durable-requestsis documented as working; its only implementation throws pending BinaryBourbon/fountain#1635. The MCP context bundle tells agents that ops carrytaskQueueand workflow ids.Front doors.
README.mdstill liststemporalas an installable lexicon and says chant compiles to "Temporal-native durable workflows". The docs index, the llms.txt description, the agent-integration opener and the orchestration page say "durable" in the old sense. The publicgate()docstring says the workflow pauses until a signal is received, and that sentence echoes throughapply-op.ts, the components README, the ops guide and the cockroachdb README, which promises a 72 hour durable wait on an op that no longer has a gate.Lexicon docs and skills. The fountain steward, composites and profiles pages plus the chant-fountain-ops skill still claim a second apply makes no writes on all six kinds, the claim #2175 disproved and fixed only in the example README. The k8s argo skill carries an "Argo vs Temporal" section that attributes this lexicon's own exports to the deleted one. The cedar dogwood skill and replay page still say scheduling is a
TemporalSchedule. The github and gitlab lint-rules pages send readers to "the temporal lexicon" for two composites that ship from core. Terraform documents ataskQueueoption its composites' tests assert does not exist, which #2179 missed because its acceptance was a word grep. Seven activity files promise heartbeats thatActivityProfilecannot express.Vocabulary and dead code. "Search attribute", "workflow", "the worker's cwd", "replay-safe", TMP014 and "the temporal barrel" survive in about twenty comments across core and six lexicons.
safeHeartbeatis a no-op kept alive by about forty call sites, four of which run a live 15 second interval that does nothing. The fountain cron rule carries a TODO for #2120, which shipped. The CI lexicon tests use--temporalas their sample run command.The full list with
file:linefor every item is in the sub-issues.Decisions
--profileis restored in core and threaded throughOpRunStartOptions, since #2124 shipped it and #2130 removed it by mistake. The fountain approve path postschant run <op>so the sandbox actually re-applies.chant approvehonours--approverasapprover ?? actor, matchingchant run approve, so the docs stay as written. The--temporalbridge stays until 0.58.0 ships.signalNamestays as the public field name here; its rename is its own issue.Definition of done
Not a grep. Each sub-issue's checklist is a reviewed list of the places the audit named, and its PR body ticks every one with the line that proves it. Beyond that:
chant approve --approver yourecordsyouon the ledger.chant run approve <op> <gate> --on fountainre-applies the op in the sandbox, or the docs say exactly what it does instead.chant run <op> --on fountain --profile <name>selects the profile.safeHeartbeatdoes not exist.Sub-issues
Listed in the comment below once created.