aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-21 02:11:54 -0400
committerCraig Jennings <c@cjennings.net>2026-06-21 02:11:54 -0400
commitdf1555d0bd0878aeacbe14d3520cc55fd0efd097 (patch)
treeecb2af961dcaecc7a17abe444b1ed1eebd07adbe
parentaf15faeb5cbfbe56310a42581e110a96c90054e0 (diff)
downloadrulesets-df1555d0bd0878aeacbe14d3520cc55fd0efd097.tar.gz
rulesets-df1555d0bd0878aeacbe14d3520cc55fd0efd097.zip
chore: break wrap-up routing into implementation tasks
-rw-r--r--todo.org25
1 files changed, 24 insertions, 1 deletions
diff --git a/todo.org b/todo.org
index 08f4c61..37c3661 100644
--- a/todo.org
+++ b/todo.org
@@ -192,7 +192,30 @@ Craig's answer (2026-06-16): spec it. Phase E reconciles with the "fix speedrun"
Optional wrap-up step that surfaces filed keepers belonging to another project, recommends a destination, and routes each to that project's =inbox/= via =inbox-send= (the destination's own =process-inbox= files it; transcript filing deferred to vNext). Spec: [[file:docs/design/wrapup-routing-spec.org]] — Ready, [9/9] decisions. Source proposal: [[file:docs/design/2026-06-13-wrapup-inbox-transcript-routing-proposal.org]].
*** 2026-06-21 Sun @ 02:06:37 -0400 Spec-review + spec-response complete — Ready
-Craig's review challenge reshaped the design from a direct cross-repo =todo.org= move to =inbox-send= delivery into the destination's inbox (safer: reuses the sanctioned cross-project path, gets provenance + per-project filing for free, degrades gracefully where a destination has an =inbox/= but no =todo.org=). D2/D3 superseded; D7 (inbox-send delivery), D8 (=:ROUTE_CANDIDATE:= marker at file time), D9 (local source removal + reject-flow recovery) added. Spec-review file consumed and deleted. Next: Phase 6 implementation-task breakdown, then build (spec Phases 1-4).
+Craig's review challenge reshaped the design from a direct cross-repo =todo.org= move to =inbox-send= delivery into the destination's inbox (safer: reuses the sanctioned cross-project path, gets provenance + per-project filing for free, degrades gracefully where a destination has an =inbox/= but no =todo.org=). D2/D3 superseded; D7 (inbox-send delivery), D8 (=:ROUTE_CANDIDATE:= marker at file time), D9 (local source removal + reject-flow recovery) added. Spec-review file consumed and deleted. Implementation-task breakdown filed below (spec-response Phase 6).
+
+*** TODO [#B] Recommendation engine + destination discovery :feature:solo:
+Pure function =(item, project-list) → (destination, confidence)= reusing =inbox-send.py='s =discover_projects= for the project list. Confidence tiers: strong (destination name/path literal in the item), weak (topic-word overlap only — still routed, visibly labeled), none (stays put, never surfaced). Unit-tested directly: strong/weak/none, two-project tie, empty project list. Covers spec Phases 1 + 3. Spec: [[file:docs/design/wrapup-routing-spec.org]].
+
+*** TODO [#B] =:ROUTE_CANDIDATE:= marker in process-inbox :feature:solo:
+Extend =process-inbox.org='s "file as TODO" step (Phase D) to stamp =:ROUTE_CANDIDATE: <inferred-project>= on any keeper whose inferred home differs from the current project (uses the engine above). Edit the canonical, sync the =.ai/= mirror, verify sync-check clean. Spec Phase 2 / D8. Spec: [[file:docs/design/wrapup-routing-spec.org]].
+
+*** TODO [#B] Wrap-up router sub-step in wrap-it-up.org :feature:solo:
+Add the optional router to =wrap-it-up.org= Step 3 after the inbox sanity check: surface the =:ROUTE_CANDIDATE:= batch (task / destination / delivery mode / confidence), go/skip; on go, per candidate =inbox-send= a one-task handoff to the destination's =inbox/= and remove the keeper from the local =todo.org=; empty set = silent. Name the gate-vs-optional split in the prose. Edit canonical + sync mirror. Spec Phase 4 / D7 / D9. Spec: [[file:docs/design/wrapup-routing-spec.org]].
+
+*** TODO [#B] Wrap-up routing — test surface :test:solo:
+Unit: recommendation engine (strong/weak/none, two-project tie, empty list); marker stamping (cross-project keeper tagged, local keeper not, standing backlog never). Integration (bats, fixture projects + temp =todo.org=): go issues N =inbox-send= calls to the right inboxes with sources removed; skip leaves all in place; empty set = zero interaction; a candidate whose destination has =inbox/= but no =todo.org= still delivers. Spec: [[file:docs/design/wrapup-routing-spec.org]] (Acceptance criteria).
+
+*** TODO [#B] Wrap-up routing — manual end-to-end validation :test:
+What we're verifying: a real keeper routes through a live wrap and the destination actually files it.
+- In a project session, let process-inbox file a handoff whose home is a different project; confirm the local task carries =:ROUTE_CANDIDATE: <dest>=.
+- Run wrap-it-up; at the router sub-step, confirm the candidate is surfaced with the right destination + confidence, then choose "go".
+- Confirm a =from-<thisproject>= handoff landed in the destination's =inbox/= and the keeper was removed from the local =todo.org=.
+- Open the destination project; confirm its startup/process-inbox files the handoff into its =todo.org= per its own conventions.
+Expected: the task ends up in the destination's =todo.org=, gone from the source, with no foreign =todo.org= written directly. Not =:solo:= — needs a real cross-project wrap and the destination's next session.
+
+*** TODO [#D] Wrap-up routing — transcript filing (vNext) :feature:
+File a meeting recording into the destination =assets/= per =working-files.md=, batch go/skip mirroring the task router. Gated on the source-location decision (spec D4). Spec: [[file:docs/design/wrapup-routing-spec.org]] (Phase 5).
** DONE [#C] Encourage org-roam KB contribution across workflows :feature:
CLOSED: [2026-06-20 Sat]