diff options
| -rw-r--r-- | .ai/sessions/2026-05-20-15-26-task-review-habit-and-first-cycle.org | 162 | ||||
| -rw-r--r-- | inbox/lint-followups.org | 5 | ||||
| -rw-r--r-- | todo.org | 190 |
3 files changed, 261 insertions, 96 deletions
diff --git a/.ai/sessions/2026-05-20-15-26-task-review-habit-and-first-cycle.org b/.ai/sessions/2026-05-20-15-26-task-review-habit-and-first-cycle.org new file mode 100644 index 0000000..3d1610a --- /dev/null +++ b/.ai/sessions/2026-05-20-15-26-task-review-habit-and-first-cycle.org @@ -0,0 +1,162 @@ +#+TITLE: Session Context +#+DATE: 2026-05-20 + +* Summary + +** Active Goal + +Implement the task-review daily-habit (top open [#A]) per =docs/design/task-review.org=. Started as "component 1" but ran the whole thing to completion — all 6 components resolved, the design pivoted mid-stream from Emacs elisp to a pure Claude workflow, and the first real review cycle ran against the live todo.org. + +** Decisions + +- *Shape B — pure Claude workflow, not Emacs elisp* (Craig's call). The spec's recommended =task-review.el= keystroke mode would couple a rulesets-owned file to archsetup's =init.el=; rulesets owns workflows, and daily-prep already provides a daily Claude touchpoint, so the friction objection that originally killed the Claude-command approach no longer held. Component 3 (elisp + ERT) dropped; archsetup left uninvolved. +- *Name collision resolved* (Craig: option 2). A =task-review.org= already existed — a task-listing + next-pick workflow. Renamed it to =open-tasks.org= (Craig's choice), freeing =task-review.org= and the "task review" trigger for the new hygiene habit. +- *Staleness threshold semantics:* stale = LAST_REVIEWED missing/unparseable, or age strictly > threshold (age==N is fresh). Today normalized to local midnight; day-diff rounds to nearest day so a DST hour can't shift a boundary task. +- *Startup nudge promoted to template-level* (Craig's catch). First placed it in project-only =startup-extras.org=; moved it into template =startup.org= so every project gets it like the wrap-up health check. Resolves the spec's "promote later" open question — Shape B distributes the workflow everywhere via sync. +- *=--list= hardening:* =head= under =pipefail= can SIGPIPE upstream =sort= on large input → swapped for =awk 'NR<=n'= (drains the stream). +- *First review cycle dispositions* (Craig): kept #1/#3, re-graded create-documentation + audit-pass + /update-skills [#A]→[#C], bumped the wrap-it-up GH-remote chore [#C]→[#A] + =:quick:=, cancelled the OV-1 DoDAF skill. "Delete" on OV-1 interpreted as CANCELLED (record kept, archivable) — flagged that physical removal is available if that's what Craig meant. + +** Data Collected / Findings + +- =review-code= isn't routable this session: rulesets pull restructured it from =.claude/commands/review-code.md= to =review-code/SKILL.md= (12:17) but it isn't =make install='d to =~/.claude/skills/= yet. Ran the review by reading the SKILL.md directly per the commits.md discovery-check. +- =daily-prep-agenda.el= is a *batch* script (=emacs --batch=), not interactive — so it's no precedent for an interactive =task-review.el= loaded into the running Emacs. Reinforced the Shape B decision. +- Smoke test verified end-to-end: staleness count 19→12 after the review (6 stamped fresh + 1 cancelled), =--list= rotated to the next 7 oldest. Habit cycle works: select → review → stamp → rotate. +- Upstream advanced twice mid-session from another machine (auto-push pattern): =b318610= (re-wrote =inbox/lint-followups.org= as a superset of already-dispositioned signals — reconciled by ff). Otherwise all pushes clean. +- =make test= green throughout: 302 pytest +1 skipped, 24+23 ERT, 6+5 audit/install-ai bats, 19 task-review-staleness bats (12 count + 7 list). + +** Files Modified + +Nine commits this session, all authored Craig, all pushed to =origin/main=: +- =64b617e test(scripts): task-review-staleness.sh + bats= — component 1 (count mode + 12 bats). +- =845fbd5 chore(inbox): clear processed lint follow-ups= — startup housekeeping. +- =3627d5e docs(workflows): swap wrap-up date-coverage scan for task-review health check= — component 2 (canonical + mirror). +- =49898a8 refactor(workflows): rename task-review.org to open-tasks.org= — freed the name + content + INDEX repoint. +- =e9bd073 feat(workflows): add task-review list-hygiene habit= — the Shape-B workflow + =--list= mode (+7 bats) + startup.org nudge + INDEX (components 4 + 5). +- =e6b27ba docs(design): record task-review Shape B revision= — spec Revision + todo task → DOING. +- =a6aae67 chore(todo): re-grade and prune tasks in a review pass= — first review cycle outcome (component 6). +- =4c4d285 chore(todo): close the task-review implementation as done= — implement task → DONE. +- (plus this wrap-up commit.) + +** Next Steps + +- *Habit is self-sustaining* — startup nudge (threshold 7) + wrap-up watchdog (threshold 30) both call =task-review-staleness.sh=; "let's do a task review" runs the workflow. Just keep doing it daily; the count drops as the rotation covers the remaining 12 unreviewed tasks (~12-day cycle). +- The DONE implement task is a candidate for =--archive-done= (it'll move to Resolved on the next cleanup that runs the archive pass). +- Open carryover (unchanged): =DOING [#A]= memory-sync (pending VERIFY on the stow approach), =/update-skills= (now [#C], has empty spec cj-block), =create-documentation= (now [#C]), 2026-05-04 audit review pass (now [#C]), =[#B]= make remove via fzf, document mcp/ install pipeline. +- =review-code= skill isn't installed (=make install= needed to symlink the restructured =review-code/SKILL.md= into =~/.claude/skills/=) — worth doing so =/review-code= is routable next session. + +* Session Log + +** 2026-05-20 12:18 EDT — Startup + inbox + +Ran startup workflow. Rulesets + project repo refreshed clean; notable: =review-code= migrated from =.claude/commands/review-code.md= to =review-code/SKILL.md= in the rulesets pull. No interrupted session (last wrapped clean 2026-05-19). No reminders, pending decisions, or cross-agent messages. + +Processed inbox: one file, =lint-followups.org= (date-coverage scan regen from 2026-05-19 wrap-up). Two signals dispositioned — line 2143 misplaced-heading confirmed false positive (verbatim-wrapped heading name in DONE body prose), and the 8 date-coverage entries deferred to the first task-review-habit cycle per the 2026-05-16 precedent. Craig approved clearing. =git rm inbox/lint-followups.org= staged; commits at wrap-up. + +** 2026-05-20 13:15 EDT — task-review staleness script (component 1) + +Built =task-review-staleness.sh= TDD-first. Wrote 12 bats tests at =claude-templates/.ai/scripts/tests/task-review-staleness.bats= (Normal/Boundary/Error), confirmed red (script absent, exit 127), then wrote the script. + +Script contract: =task-review-staleness.sh <todo-file> <threshold-days>= prints an integer count of stale top-level tasks. Qualifying = depth-2 =**= heading + TODO/DOING/VERIFY keyword + [#A]/[#B]/[#C] cookie. Stale = LAST_REVIEWED missing/unparseable (NIL → oldest), or age strictly >threshold (age==N is fresh, matching the spec's ">N days"). awk emits per-task LAST_REVIEWED-or-NONE; bash does the date math. Day-diff rounds to nearest day (+43200 before /86400) so a DST hour can't shift a boundary task. + +First green run was 11/12: the boundary test (exactly-30-days = fresh) caught a real bug — I compared =date +%s= (with time-of-day) against LAST_REVIEWED parsed at midnight, so 30-days-ago measured ~30.5 → rounded 31 → stale. Fixed by normalizing today to local midnight (=date -d "$(date +%F)"=). Code bug, test expectation correct. + +Decisions: +- bats =SCRIPT= path made location-independent (sibling-of-parent of the test file) so it runs identically from canonical =claude-templates/= and the rsync'd project mirror. +- Makefile =test:= bats glob extended to also scan =.ai/scripts/tests/*.bats= (was =scripts/tests/*.bats= only). +- Synced canonical → mirror (=rsync -a --delete=) so both copies carry the new files, per the established canonical+mirror commit pattern. + +Live =todo.org=: 19 stale at both threshold 7 and 30 = 19 qualifying headings (none carry LAST_REVIEWED yet — the property lands with the elisp in component 3). Full =make test= green: 302 pytest +1 skipped, 24+23 ERT, 6+5+12 bats. Component 1 done. + +** 2026-05-20 13:30 EDT — Reconcile + commit component 1 + +Publish flow. Step 0 reconcile found behind-1 (origin advanced to =b318610=, a session-archive + wrap-up lint-followups push from the other machine). That commit re-wrote =inbox/lint-followups.org= — the exact file I'd staged for deletion — with a superset (added a 2026-05-20 block carrying the same two already-dispositioned signals). Surfaced to Craig; he chose reconcile. Restored the staged deletion, ff-merged =b318610=, re-deleted the now-superset inbox file (same disposition). + +Step 1 review: =/review-code= isn't routable this session — the rulesets pull restructured it from =.claude/commands/review-code.md= to =review-code/SKILL.md= (12:17) but it isn't =make install='d to =~/.claude/skills/= yet, so the session's skill enumeration misses it. Per the commits.md discovery-check, surfaced the gap and ran the review by reading =review-code/SKILL.md= directly. Verdict: Approve, no Critical/Important (two Minor: silent awk-failure note, GNU-date assumption). + +Step 2: general-voice mode (=.ai/= tracked here). =/voice= general 31 patterns walked, body came through clean. Two commits landed, both authored Craig: +- =64b617e test(scripts): add task-review-staleness.sh + bats harness= +- =845fbd5 chore(inbox): clear processed lint follow-ups= + +2 ahead of upstream, unpushed (push is a separate gated decision). Next: component 2 — replace wrap-it-up.org date-coverage scan with the staleness health-check (threshold 30). + +** 2026-05-20 13:45 EDT — Component 2: wrap-up health check + +Replaced the date-coverage scan (canonical + mirror =wrap-it-up.org=) with a review-habit health check that calls =.ai/scripts/task-review-staleness.sh todo.org 30= and writes one summary line to the follow-ups file when the count is non-zero (silent at zero). Verified both branches: 19-stale live todo.org → one line written; synthetic all-fresh → no file created. Reviewed inline (Approve), =/voice= general 31 patterns (one em-dash fix). Committed =3627d5e docs(workflows): swap wrap-up date-coverage scan for task-review health check=. 3 ahead, unpushed. + +Sequencing snag for components 4/5: both reference component 3 (=task-review.el=), which lives in the *archsetup* repo — a different project (cross-project boundary). Component 4's workflow calls =emacsclient --eval "(task-review-agenda)"=; shipping it before the elisp exists means an invokable-but-broken workflow. Surfacing to Craig before proceeding. + +** 2026-05-20 13:55 EDT — Pause rulesets; pushed 1+2 + +Craig chose option 1: stop rulesets work here, build component 3 (=task-review.el=) in an archsetup session, deliver changes back via this project's =inbox/=. Pushed the 3 local commits to =origin/main= (=b318610..3627d5e=, fast-forward); now 0/0 in sync. Session-context left intact (resumable) — NOT wrapping up. When the archsetup handoff lands in =inbox/=, resume with components 4 (=task-review.org= workflow + INDEX entry) and 5 (startup-extras nudge), in that order, now that the elisp engine exists. + +Contract the archsetup elisp must honor (already in =docs/design/task-review.org=, both sessions' source of truth): stamp =:LAST_REVIEWED: YYYY-MM-DD= in the standard PROPERTIES drawer of each top-level =**= task. That's exactly what =task-review-staleness.sh= parses. + +** 2026-05-20 14:05 EDT — Archsetup handoff: ownership move + a NAME COLLISION blocker + +Inbox handoff =2026-05-20-1355-from-archsetup-task-review-handoff.org= arrived. Two payloads: + +1. *Ownership decision:* task-review is a workflow, rulesets owns workflows, so task-review (incl. the =.el=) is now wholly rulesets-owned — NOT split into archsetup/dotfiles. No archsetup-side files; nothing moved. Open question the handoff flags: the rulesets home + load path for =task-review.el= (the spec assumed stow-via-archsetup distribution, which no longer applies). Needs Craig. + +2. *Handoff claims component 4 (author =task-review.org= workflow + INDEX entry) is DONE.* Verified against the repo — this is WRONG. A =task-review.org= already exists (=claude-templates/.ai/workflows/=, mtime May 15 bulk-import, dated 2026-04-25) but it is a COMPLETELY DIFFERENT workflow: a task-listing + next-task-recommendation tool that supersedes =open-tasks.org= + =whats-next.org=. Its INDEX triggers include "task review", "what's next", "list open tasks", "what should I work on". The archsetup session conflated this pre-existing file with the component-4 deliverable (the daily list-hygiene habit). Component 4 is NOT done. + +*The blocker:* the spec's new hygiene habit wants the name =task-review.org= AND the trigger "task review" — both already taken by the existing listing/next workflow. Can't ship component 4/5 (or name the elisp) until the naming is resolved. Nothing committed by archsetup (repo 0/0). Surfacing both decisions to Craig; inbox handoff NOT yet deleted (decisions pending). + +** 2026-05-20 14:20 EDT — Decisions made; Shape B + rename + +Craig resolved both: +- *Decision 1:* rename the existing listing/next workflow =task-review.org= → =open-tasks.org=. The new hygiene habit takes the freed =task-review.org= name + "task review" trigger. +- *Decision 2:* *Shape B — pure Claude workflow, no elisp.* Component 3 (=task-review.el=) is DROPPED. Archsetup is now entirely uninvolved (no cross-project coupling). Reasoning: rulesets owns workflows cleanly, the interactive-elisp design needed an archsetup =init.el= load coupling (the handoff's worry; =daily-prep-agenda.el= is no precedent — it's batch, not interactive), and Craig already has a daily Claude touchpoint (daily-prep) so the friction objection the spec raised against a Claude-driven review mostly evaporates. + +Implementation plan (sequential, coupled edits, logical commits): +1. Free the name: =git mv= task-review.org → open-tasks.org (canonical + mirror), fix its title/Replaces/triggers content, update INDEX (repoint entry, drop "task review" trigger from it). +2. The habit: extend =task-review-staleness.sh= with a =--list N= mode (reuse its tested parse to emit the N oldest-unreviewed candidates, DRY) + bats; author the new Shape-B =task-review.org= workflow + INDEX entry; add the startup-extras nudge (component 5). +3. Docs: rewrite spec =docs/design/task-review.org= (approach B→pure-workflow, ownership→rulesets, drop elisp components 3, restate 4/5) + update =todo.org= task component list. Delete the absorbed inbox handoff. +4. Smoke test (component 6) against live todo.org. Review + push per gate. + +=wrap-it-up.org='s references to "task-review.org" (the habit) stay correct — the habit keeps that name. + +** 2026-05-20 15:00 EDT — Commit 1 done; built the habit; nudge placement corrected + +Commit 1 landed: =49898a8 refactor(workflows): rename task-review.org to open-tasks.org= (rename + content fix + INDEX repoint, canonical + mirror, drift-clean). + +Built component 4 + the selection tooling: +- Extended =task-review-staleness.sh= with a =--list <file> <N>= mode (TDD: +7 bats, all 19 green) — emits the N oldest-unreviewed tasks =<line>\t<value>\t<heading>=, NONE/unparseable sort oldest, tie-break by line. Refactored the shared awk to also emit line+heading; count mode unchanged (12 tests still green). +- Authored the Shape-B =task-review.org= workflow (pure Claude habit: select batch via =--list=, walk each task keep/re-grade/kill/doing/edit/skip, stamp =:LAST_REVIEWED: YYYY-MM-DD=, kill→CANCELLED+CLOSED per todo-format.md). + INDEX entry. + +*Nudge placement corrected (Craig's catch):* I'd first put the startup nudge in =.ai/project-workflows/startup-extras.org= (rulesets-only). Craig flagged it should distribute like the rest. Right — but =startup-extras.org= is the by-design non-synced project layer, so the universal home is the template =startup.org= itself (mirrors how the wrap-up health check lives in template =wrap-it-up.org=). Moved it: Phase A step 11 runs =task-review-staleness.sh todo.org 7= (guarded by =[ -f todo.org ]=), Phase C surfaces one line if >0. Deleted the project-only startup-extras.org + its empty dir. Spec's "promote to template-level later" open question is now resolved by Shape B (workflow synced everywhere). Spec needs this recorded (commit 3). + +Full =make test= green (302+1 / 24 / 23 / 6 / 5 / 19). No drift, mirror identical. + +** 2026-05-20 15:10 EDT — Commits 2 + 3 landed; only smoke test remains + +Pre-commit review of commit 2 caught a latent =head=-under-=pipefail= SIGPIPE footgun in =--list= (large input → upstream =sort= takes 141 → script exits non-zero). Doesn't bite at todo.org scale, fixed anyway: =head -n= → =awk -v n 'NR<=n'= (drains the stream). 19 bats still green, N=0 edge clean. + +Three commits, all authored Craig, 3 ahead of upstream (unpushed): +- =49898a8 refactor(workflows): rename task-review.org to open-tasks.org= +- =e9bd073 feat(workflows): add task-review list-hygiene habit= (workflow + script =--list= + startup.org nudge + INDEX, canonical + mirror) +- =e6b27ba docs(design): record task-review Shape B revision= (spec Revision + todo task → DOING with per-component status) + +Absorbed inbox handoff deleted (untracked; decisions captured in spec Revision + git). Inbox clean. + +*Remaining:* component 6 — smoke test = run one real task-review cycle against live todo.org. Interactive (per-task keep/re-grade/kill decisions), so needs Craig. Doing it now both verifies the end-to-end habit and starts it (stamps =:LAST_REVIEWED:= on the 7 oldest, dropping them out of the staleness count). That review would produce its own todo.org commit. Push decision (3 commits) pending. + +** 2026-05-20 15:25 EDT — Pushed 3; smoke test passed (component 6 done) + +Pushed the 3 implementation commits (=3627d5e..e6b27ba=, ff). Then ran the task-review workflow live as the smoke test. Surfaced the 7 oldest-unreviewed; Craig's dispositions: +- 1 (implement task-review), 3 (memory-sync) → keep + stamp. +- 2 (wrap-it-up GH-remote chore) → re-grade [#C]→[#A] + add =:quick:= tag + stamp. +- 4 (create-documentation), 5 (audit review pass), 7 (/update-skills) → re-grade [#A]→[#C] + stamp. +- 6 (OV-1 DoDAF skill) → "delete" → interpreted as kill = CANCELLED + CLOSED [2026-05-20 Wed] + note (kept as record, archivable; flagged to Craig that I can physically remove it instead if he meant that). + +Verified end-to-end: staleness count 19→12 (6 stamped fresh + 1 cancelled), =--list= now rotates to the next 7 oldest (none of today's batch). Habit works: select → review → stamp → rotate. Committed =a6aae67 chore(todo): re-grade and prune tasks in a review pass= (1 ahead, unpushed). + +All 6 spec components resolved (5 built + smoke test; component 3 elisp dropped). Open: (a) flip the =** DOING= implement-task DONE vs keep through the ~2-week first-cycle validation? (b) push commit 4? Surfacing to Craig. + +** 2026-05-20 15:35 EDT — Closed out; all pushed + +Craig: mark DONE now + push. Flipped the implement task to =DONE [#A]= + =CLOSED: [2026-05-20 Wed]= (CLOSED before the PROPERTIES drawer per todo-format), checked off component 6. Committed =4c4d285 chore(todo): close the task-review implementation as done=. Pushed =a6aae67= + =4c4d285= (=e6b27ba..4c4d285=, ff). =origin/main= at =4c4d285=, 0/0 in sync. + +Task-review daily-habit: DONE. Eight commits this session, all authored Craig, all pushed: +=64b617e= (staleness script+bats), =845fbd5= (inbox clear), =3627d5e= (wrap-up health check), =49898a8= (rename→open-tasks), =e9bd073= (habit workflow + =--list= + startup nudge), =e6b27ba= (spec Shape B revision), =a6aae67= (review pass), =4c4d285= (close implement task). + +The habit is now self-sustaining: startup nudge (threshold 7) + wrap-up watchdog (threshold 30) both call the same staleness script; "let's do a task review" runs the workflow. The DONE implement task is a candidate for =--archive-done= at the next todo cleanup. Session resumable (not wrapped). No follow-up =/schedule= warranted — no dated obligation; the spec's "~2-week first cycle" is soft validation the nudge already drives. diff --git a/inbox/lint-followups.org b/inbox/lint-followups.org new file mode 100644 index 0000000..5cce15e --- /dev/null +++ b/inbox/lint-followups.org @@ -0,0 +1,5 @@ + +* 2026-05-20 lint-org follow-ups — todo.org +** TODO line 2070 — misplaced-heading — Possibly misplaced heading line + +* 2026-05-20 Wed — Task-review health: 12 top-level [#A]/[#B]/[#C] tasks unreviewed for >30 days (daily review may have slipped) @@ -7,25 +7,6 @@ Project-scoped (not the global =~/sync/org/roam/inbox.org= list). * Rulesets Open Work -** DONE [#A] Implement task-review daily-habit per spec -CLOSED: [2026-05-20 Wed] -:PROPERTIES: -:LAST_REVIEWED: 2026-05-20 -:END: -Spec: [[file:docs/design/task-review.org]] - -Retires =wrap-it-up.org='s date-coverage scan and replaces it with a daily list-hygiene review (N=7 oldest-unreviewed top-level =[#A]= / =[#B]= / =[#C]= tasks per session, ~12-day rotation). Built as a pure Claude workflow — Shape B, no elisp; see the spec's Revision section for why the elisp approach was dropped. - -Status: -1. [X] =task-review-staleness.sh= + bats (count + =--list= modes). -2. [X] =wrap-it-up.org= health check (threshold 30). -3. [-] =task-review.el= — dropped (Shape B is a pure workflow, not an Emacs mode). -4. [X] New =task-review.org= workflow + INDEX entry (the existing listing workflow was renamed to =open-tasks.org= to free the name). -5. [X] Startup nudge in template =startup.org= (threshold 7), not the project-only startup-extras layer. -6. [X] Smoke test against live =todo.org= — first cycle run 2026-05-20 (7 tasks reviewed: 3 re-grades, 1 cancellation, 1 bump-and-tag). - -Triggered by: 2026-05-16 brainstorm on retiring the date-coverage scan. - ** TODO [#A] wrap-it-up Step 3.5 assumes GitHub-family remote :chore:quick: :PROPERTIES: :LAST_REVIEWED: 2026-05-20 @@ -1235,83 +1216,6 @@ or compound commands, and can misidentify targets. Use =shlex= for simple commands, document unsupported shell constructs, and fail toward asking when a destructive pattern is ambiguous. -** CANCELLED [#B] Build =ov-1= skill for DoDAF OV-1 (High-Level Operational Concept Graphic) -CLOSED: [2026-05-20 Wed] - -Cancelled during the 2026-05-20 task review. - -Triggered by SOFWeek (May 2026, Tampa) — DeepSat attending; DoD attendees -may ask for architecture diagrams. OV-1 is the universal informal -currency in DoD briefings ("show me the architecture" → OV-1 by default). - -Priority upgrades to =[#A]= if Craig confirms scenario 2 below (personal -load-bearing need at the event); stays =[#B]= or drops to =[#C]= if -scenario 1 (team already covers it, future asset only). - -*** Prior art (searched 2026-04-19) - -No existing Claude Code skill exists for DoDAF / OV-1 / SV-1 / SysML. - -- =anthropics/skills= — 17 skills, zero DoDAF/SysML/defense coverage. -- =awesome-claude-code= list — zero hits for DoDAF/OV-1/SysML/UAF. -- =mfsgr/sysml2dodaf= — empty repo (0 stars, no code). Vapor. -- =HowardKao-1130/mini-NEXEN= — broad SE methodology skill that - name-drops DoDAF as a trigger keyword; no artifact generation. 0 stars. -- =gaphor/gaphor= (Apache-2.0, 2.2k stars) — mature UML/SysML GUI - modeler. Not a skill; not a pipeline. Useful reference only. - -Nearest prior art to lean on when building: -- DoDAF 2.02 Viewpoints & Models reference (dodcio.defense.gov) — - canonical OV-1 exemplars. Embed 3-5 layouts as skill =references/=. -- Pattern from existing =c4-diagram= skill — same shape (prose → diagram - spec), swap the viewpoint vocabulary to DoDAF. -- PlantUML for SV-1 (when that skill comes later); Mermaid or draw.io - XML for OV-1 lightweight visuals. - -*** Build scope (when triggered) - -*In scope:* -- Input: prose description of a system + its operational context. -- Output: structured OV-1 *spec* — performers, external actors (other - systems, forces, adversaries), relationships (data/control flows), - narrative captions, classification marking, legend requirements. -- DoDAF 2.02 completeness checklist as a quality gate — verify the - produced spec contains every element a correct OV-1 requires. -- Optional lightweight visual: draw.io XML or Mermaid approximation for - quick review; NOT a finished rendering. - -*Out of scope:* -- Icon libraries, pictorial assets, finished PowerPoint export. OV-1 - final art belongs to a designer or Craig in Visio/PowerPoint; the - skill's job is the spec and the check, not the slide. -- SV-1, SV-2, UAF, IDEF1X, other viewpoints. Build only when a - concrete need triggers each. - -Estimate: 4-6 hours. - -*** Craig's investigation before kickoff - -1. Does DeepSat's systems-engineering or marketing team already have an - OV-1 (or the equivalent briefing artifact) for SOFWeek? -2. If yes (scenario 1) — skill is a future asset, not event-load-bearing. - Ship after SOFWeek. Priority drops to =[#C]=. -3. If no, or if the scenario is "Craig may need to produce/iterate an - OV-1 on the fly during the event" (scenario 2) — skill is load-bearing - for the event. Priority upgrades to =[#A]=; build before SOFWeek. -4. Confirm the classification level the skill needs to handle - (unclassified-only? or FOUO markings? affects the classification - block in the spec). -5. Confirm the target rendering format DeepSat uses for OV-1 - deliverables (PowerPoint slide? Cameo? Visio? affects whether the - skill emits draw.io XML vs Mermaid vs pure structured spec). - -*** Related - -See also the DoD-specific notations section under the later TODO -(=c4-*= rename revisit) — OV-1 is flagged there as the highest-value -starting point across the DoD notation landscape (SysML, DoDAF/UAF, -IDEF1X). This entry is the execution plan for that starting point. - ** TODO [#C] Build =/update-skills= skill for keeping forks in sync with upstream :PROPERTIES: :LAST_REVIEWED: 2026-05-20 @@ -2217,3 +2121,97 @@ Fix: extend Phase A's discovery to also scan =claude-templates/inbox/= when the Adjacent question worth answering at the same time: should cross-project handoffs file into =./inbox/= at the project root (matching what Phase A already scans), or stay in =claude-templates/inbox/= and rely on the discovery fix? The =inbox-send= script's target-project logic is the place to settle that. Triggered by: 2026-05-15 evening session, surfaced when committing the test-harness work. +** DONE [#A] Implement task-review daily-habit per spec +CLOSED: [2026-05-20 Wed] +:PROPERTIES: +:LAST_REVIEWED: 2026-05-20 +:END: +Spec: [[file:docs/design/task-review.org]] + +Retires =wrap-it-up.org='s date-coverage scan and replaces it with a daily list-hygiene review (N=7 oldest-unreviewed top-level =[#A]= / =[#B]= / =[#C]= tasks per session, ~12-day rotation). Built as a pure Claude workflow — Shape B, no elisp; see the spec's Revision section for why the elisp approach was dropped. + +Status: +1. [X] =task-review-staleness.sh= + bats (count + =--list= modes). +2. [X] =wrap-it-up.org= health check (threshold 30). +3. [-] =task-review.el= — dropped (Shape B is a pure workflow, not an Emacs mode). +4. [X] New =task-review.org= workflow + INDEX entry (the existing listing workflow was renamed to =open-tasks.org= to free the name). +5. [X] Startup nudge in template =startup.org= (threshold 7), not the project-only startup-extras layer. +6. [X] Smoke test against live =todo.org= — first cycle run 2026-05-20 (7 tasks reviewed: 3 re-grades, 1 cancellation, 1 bump-and-tag). + +Triggered by: 2026-05-16 brainstorm on retiring the date-coverage scan. +** CANCELLED [#B] Build =ov-1= skill for DoDAF OV-1 (High-Level Operational Concept Graphic) +CLOSED: [2026-05-20 Wed] + +Cancelled during the 2026-05-20 task review. + +Triggered by SOFWeek (May 2026, Tampa) — DeepSat attending; DoD attendees +may ask for architecture diagrams. OV-1 is the universal informal +currency in DoD briefings ("show me the architecture" → OV-1 by default). + +Priority upgrades to =[#A]= if Craig confirms scenario 2 below (personal +load-bearing need at the event); stays =[#B]= or drops to =[#C]= if +scenario 1 (team already covers it, future asset only). + +*** Prior art (searched 2026-04-19) + +No existing Claude Code skill exists for DoDAF / OV-1 / SV-1 / SysML. + +- =anthropics/skills= — 17 skills, zero DoDAF/SysML/defense coverage. +- =awesome-claude-code= list — zero hits for DoDAF/OV-1/SysML/UAF. +- =mfsgr/sysml2dodaf= — empty repo (0 stars, no code). Vapor. +- =HowardKao-1130/mini-NEXEN= — broad SE methodology skill that + name-drops DoDAF as a trigger keyword; no artifact generation. 0 stars. +- =gaphor/gaphor= (Apache-2.0, 2.2k stars) — mature UML/SysML GUI + modeler. Not a skill; not a pipeline. Useful reference only. + +Nearest prior art to lean on when building: +- DoDAF 2.02 Viewpoints & Models reference (dodcio.defense.gov) — + canonical OV-1 exemplars. Embed 3-5 layouts as skill =references/=. +- Pattern from existing =c4-diagram= skill — same shape (prose → diagram + spec), swap the viewpoint vocabulary to DoDAF. +- PlantUML for SV-1 (when that skill comes later); Mermaid or draw.io + XML for OV-1 lightweight visuals. + +*** Build scope (when triggered) + +*In scope:* +- Input: prose description of a system + its operational context. +- Output: structured OV-1 *spec* — performers, external actors (other + systems, forces, adversaries), relationships (data/control flows), + narrative captions, classification marking, legend requirements. +- DoDAF 2.02 completeness checklist as a quality gate — verify the + produced spec contains every element a correct OV-1 requires. +- Optional lightweight visual: draw.io XML or Mermaid approximation for + quick review; NOT a finished rendering. + +*Out of scope:* +- Icon libraries, pictorial assets, finished PowerPoint export. OV-1 + final art belongs to a designer or Craig in Visio/PowerPoint; the + skill's job is the spec and the check, not the slide. +- SV-1, SV-2, UAF, IDEF1X, other viewpoints. Build only when a + concrete need triggers each. + +Estimate: 4-6 hours. + +*** Craig's investigation before kickoff + +1. Does DeepSat's systems-engineering or marketing team already have an + OV-1 (or the equivalent briefing artifact) for SOFWeek? +2. If yes (scenario 1) — skill is a future asset, not event-load-bearing. + Ship after SOFWeek. Priority drops to =[#C]=. +3. If no, or if the scenario is "Craig may need to produce/iterate an + OV-1 on the fly during the event" (scenario 2) — skill is load-bearing + for the event. Priority upgrades to =[#A]=; build before SOFWeek. +4. Confirm the classification level the skill needs to handle + (unclassified-only? or FOUO markings? affects the classification + block in the spec). +5. Confirm the target rendering format DeepSat uses for OV-1 + deliverables (PowerPoint slide? Cameo? Visio? affects whether the + skill emits draw.io XML vs Mermaid vs pure structured spec). + +*** Related + +See also the DoD-specific notations section under the later TODO +(=c4-*= rename revisit) — OV-1 is flagged there as the highest-value +starting point across the DoD notation landscape (SysML, DoDAF/UAF, +IDEF1X). This entry is the execution plan for that starting point. |
