Skip to content

feat: project-scope chat threads aggregate descendant FILING notes (v1.20.0)#30

Open
PaulEastabrook wants to merge 1 commit into
feat/chat-turn-attachmentsfrom
feat/project-scope-chat-filings
Open

feat: project-scope chat threads aggregate descendant FILING notes (v1.20.0)#30
PaulEastabrook wants to merge 1 commit into
feat/chat-turn-attachmentsfrom
feat/project-scope-chat-filings

Conversation

@PaulEastabrook

Copy link
Copy Markdown
Owner

Stage 2b — the deferred cross-child increment of board-chat enrichment § 2.8

Stacked on #29 (v1.19.0) — merge that first; GitHub retargets this to main automatically.

What

When gtd_chat_thread's target task carries #project, the files[] FILING scan additionally covers the project's descendant tasks (children + grandchildren — the same ≤3-level tree gtd_project_plan walks; completed included, since a completed action's filed output is still a project output). Each descendant-filed entry carries additive provenance fields item_id/item_name (the descendant that filed it).

Triggering case: the project-scope EM thread (rtm:1179319604) — "what outputs have we produced?" correctly returned files: [] on v1.19.0 because the four filed packs' OUTPUT notes live on the child actions, not the project task.

Unchanged (by design)

  • Same one-call read — the broad getList already carries the children; call surface stays exactly ["rtm.tasks.getList"] (asserted in-suite).
  • Same OUTPUT-title-gated parser, same conservative correlation, paths byte-verbatim (dedup guarantee holds).
  • Item-scope threads byte-identical to v1.19.0 — no provenance fields, same-task only (regression-guarded). The gate is the #project tag, not subtask presence.
  • No board change needed; no new tag, no strict-tag interaction, no activation-ordering hazard.

Verification

  • make test: 736 passed (+14: 12 pure, 2 FakeMCP tool tests — child/grandchild/completed-child provenance, after-last-ai-turn unattached, two-window discipline across children, item-scope shape regression, non-#project-with-subtask same-task-only, read-only call surface).
  • make lint clean (ruff check + format + pyright).
  • Not run: live smoke (needs server restart on v1.20.0 + Cowork-side OUTPUT-note backfill) — the EM thread is the designated acceptance test.

Docs in lockstep (§ 9): README, server.py instructions, CLAUDE.md feature section + test inventory. MINOR → v1.20.0 (pyproject + __init__ + uv.lock). Debrief: project-scope-chat-filings-debrief.md (§ 14).

🤖 Generated with Claude Code

…1.20.0)

When gtd_chat_thread's target carries #project, the files[] FILING scan
additionally covers the project's descendant tasks (children +
grandchildren, completed included) — a project's artefacts are filed
against its child actions, so a project-scope "what outputs?" reply now
returns artefact cards instead of files: []. Descendant-filed entries
carry item_id/item_name provenance; item-scope threads stay byte-identical
to v1.19.0. Same one-call read (the broad getList already carries the
children); same OUTPUT-title gate, conservative correlation, and verbatim
paths (the board's dedup guarantee holds). The gate is the #project tag,
not subtask presence.

Board-chat enrichment stage 2b (designed change 2026-07-04 § 2.8, the
deferred cross-child increment). 736 tests (+14); debrief per
CONTRIBUTING § 14.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant