Backlog โ
Raised, not sequenced. Ideas and findings live here until someone means them.
What this is for: an item gets a home the moment it is raised, without costing a GitHub issue. An issue gets filed when the work is actually intended, so the tracker describes what is happening rather than everything anyone ever thought of. (Operator ask, 2026-08-22, against 177 open issues.)
How an item leaves:
- It moves to planning.md when it is sequenced, and gets an issue then.
- It is deleted when it stops being true or stops mattering.
- Nothing sits here as a permanent parking space. A backlog nobody prunes is the tracker problem again, one directory down.
The "What would promote it" column is required. A row that cannot say what would move it is a row nobody can act on, and it is the same rule as Parked in the agenda.
User Backlog / Todos โ
- Audit the existing skills and determine what needs to be removed or modified based on our agent workflow refactor.
Open โ
| Item | What it is | Why it is not sequenced | What would promote it |
|---|---|---|---|
| Question headers as a stated convention | Every heading in a document phrased as a question. Practised in four files, stated in skill-creation.md, enforced nowhere. The other 11 rules do not follow it | Needs a decision on scope: new files only, or a migration of the existing rules | A ruling on whether it goes into the writing-into-documents rule, and whether anything lints it |
| Backfill PR #947's changelog entry | The entry was dropped by the bot bug fixed on 2026-08-22. The merge is on dev with no record | Small, and it is a one-off rather than a system fix | Her word. It is a two-minute job whenever the changelog is being touched anyway |
| Audit changelog entries lost before 2026-08-21 | The drop mechanism existed for as long as the concurrency config did, so an unknown number of merges have no entry. Nothing flags an omission, and the bot's commits carry the skip directive so nothing re-reads the file | Unknown size. Could be zero, could be dozens | Anyone needing the changelog to be trustworthy for a date range |
| Nothing gates a relative link that dies in generation | sync-skills.js copies links verbatim, and the six destinations are not all the same depth: .agents/skills/<n>/, .claude/skills/<n>/, .gemini/skills/<n>/ and .github/skills/<n>/ are three deep, while .github/prompts/ and .gemini/commands/ are two. So a ../../../ link resolves in four copies and climbs above the repo in the other two. It looks correct in the file an author edits | The five live instances are fixed (8cdbd3e0), so nothing is broken right now. What is missing is the gate, and adding a check to lint.sync-skills.js is a design call about what it should assert: repo-root-relative only, or resolve-from-every-destination | Her word on whether it becomes a lint. Found by session 6 on 2026-08-23 while writing the worklog, with the depth table in implementation.md. It is the root-cause version of a bug two sessions fixed one instance at a time |
| Auto-commit and push the context home | ~/.agents/context tracks cattreedev/lantern_context and npm run context:sync already pulls, reindexes, commits and pushes. What is missing is a trigger, so her edits sit dirty until someone runs it by hand | It is not a five-minute job. context-sync.mjs has NO lock while context-bootstrap.mjs gained one after #899, and it stages with git add -A, which is exactly what swept an in-flight worklog into an unrelated commit twice: #862, and again on 2026-08-23. An unlocked add -A writer on an automatic path would do that on a schedule instead of by accident | Her word on 2026-08-23: backlog it and assign it to a task on the next run. Needs the rename-based lock from context-bootstrap.mjs, staging by explicit path, a quiescence check so a file written seconds ago is not committed mid-write, and a Stop trigger rather than SessionStart because session start is when N copies fire at once |
| A workflow's return object reads as SUCCESS when its write agent died | The void run returned agents_error: 0, readerFailures: [], and a full plausible object: 4 ranked, 2 asks, 4 parked, 6 cut. The only sign of failure was one English sentence buried inside recorded. Any caller that does not read prose sees a healthy run | It is a design question about what a workflow should assert before returning, and it spans all three scripts rather than one line | Deciding what a Record or Write phase must PROVE before its return counts. The obvious candidate is that the file it claims to have written exists and grew, checked by the script rather than described by the agent |
| Agenda files are growing 12x in two days | 15KB on 08-19, 70KB on 08-20, 190KB on 08-21. Each day's file is read in full by the next day's survey, so the cost compounds on its own | Not yet blocking, but it is a large share of the morning survey's 40 minutes | The morning survey restructure (planning item 2) hitting it, or a run getting slow enough to notice |
| A dispatched session's question reaches nobody | A session blocked on an operator input asks in its own window and pushes her phone. If she is active in a different session, she never sees the text and the push is suppressed, because the notification tool skips sending when the user is at a terminal. It reached a terminal, just not hers. Happened 2026-08-22: a test run sat blocked for an hour on a question asked correctly at 11:03 | this file, and the project-manager skill's escalation section | Every dispatched session that needs anything mid-run. Silence reads as a decision when it is actually a delivery failure |
| Nothing gates a double-brace that breaks the docs build | VitePress compiles every markdown page as a Vue component, so a double-brace interpolates EVEN INSIDE an inline code span. Backticks do not protect it. github is undefined at build time, so a workflow snippet quoted in prose kills Build (Docs) for the whole site. It surfaces two different ways: a runtime SSR error naming a generated .temp/*.js file, or a parse error naming the source. Session 6 hit BOTH on 2026-08-23, the second by writing a literal double-brace into this very row | The instances are fixed (v-pre on implementation.md:209), and the gate is a design call: reject a bare double-brace in docs/**, or teach the build to point at the source file instead of the temp one. The second is the friendlier fix and the larger one | Her word on whether it becomes a lint. Cost a full billed pipeline run on PR #952: the agent workflow hierarchy branch on 2026-08-23, and any doc anyone writes will do it again |
| Two docs builds at once produce fake failures | vitepress build resolves its scratch directory as tempDir: resolve(root, ".temp"), a FIXED path with no run id and no lock (verified in node_modules/vitepress/dist/node/chunk-D3CUZ4fa.js). Two sessions building at the same time write the same files, and the loser gets a Vue parse error plus a pile of ERR_MODULE_NOT_FOUND that look exactly like real defects in the docs. Happened on 2026-08-23 between sessions 6 and 7, and cost the second one a debugging detour into a build that was fine | It is the same shared-state race safe-automation already covers for context-bootstrap.mjs, so the pattern and the fix are both known. What is not decided is whether it is worth a lock on a build nobody runs on a schedule, or just a documented symptom | Her word. The cheap half is documentation: one line in the safe-automation or repo-map gotcha list saying that a docs failure naming missing .temp modules means check for a parallel build BEFORE debugging. The expensive half is an actual lock or a per-run temp dir |
| A lint for the heading and bullet conventions | Nothing checks that a new document follows either. The invitation framing in the voice rule has the same problem and is even harder to check | Depends on the convention ruling above | The convention landing in a rule first |
| Does the PM sequence become a workflow? | design.md open question 7. agenda-status.js is evidence for: forcing the sequence surfaced real defects. It is also evidence against: a workflow cannot receive a peer's reply | It is a large build, and the sweep has not had a clean run yet | A clean sweep run, then a decision on whether the agenda-creation sequence gets the same treatment |