Skip to content

Release v7.15.0#486

Merged
Data-Wise merged 26 commits into
mainfrom
dev
Jul 2, 2026
Merged

Release v7.15.0#486
Data-Wise merged 26 commits into
mainfrom
dev

Conversation

@Data-Wise

Copy link
Copy Markdown
Owner

Release v7.15.0

Homebrew distribution health checks + documentation gap fills.

Added

  • doctor INSTALLATION section — catches Homebrew distribution failures (opt/Cellar symlink drift, stale kegs, man-page name collisions) that silently break brew upgrade. New tests/e2e-doctor-install.zsh (7 scenarios).
  • docs/guides/WORKFLOW-COOKBOOK.md — daily/weekly routine cookbook with a Mermaid diagram, 13 recipes.
  • Command docs for ref, setup, tutorial — the last 3 undocumented user-facing commands (confirmed via docs/DOC-DASHBOARD.md), wired into MkDocs nav.
  • sec tutorial subsection in docs/SECRET-MANAGEMENT.md.

Fixed

  • MASTER-DISPATCHER-GUIDE.md claude section — was stale at C1-C6 since v7.13.0 shipped C7-C11 + the watch daemon; now synced.

Changed

  • Homepage reorganized — flat 8-card grid → 3 labeled clusters ("New here?" / "Solve a specific problem" / "Already using it?"); surfaced setup/tutorial/ref/Cookbook, none previously linked from the homepage.

Test plan

  • ./tests/run-all.sh74 passed / 0 failed / 1 timeout / 1 skipped (matches documented baseline: timeout = interactive/tmux test, skip = himalaya absent — both expected locally)
  • mkdocs build --strict → 0 warnings
  • markdownlint-cli2 on all touched docs → 0 new errors (pre-existing MD049 hits in CHANGELOG.md history untouched by this release)
  • tests/test-manpage-version-sync.zsh → 12/12 guard checks pass

🤖 Generated with Claude Code

Test User and others added 26 commits June 30, 2026 15:38
…k-mint)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Merged Dependabot PRs #477, #478, #481 (actions/checkout, lint-staged, prettier)
- Synced dev with main (6 files)
- Cleaned all worktrees (3 stale entries removed)
- Removed stale "CI smoke tests only" pending item (full suite live since PRs #465+#466)
- Updated status footer to v7.13.0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Ecosystem proposal + flow-cli SPEC for daily-planning coordination across
flow-cli, atlas, and obsidian-cli-ops. atlas owns the planning brain (Task
entity + agenda aggregator); flow-cli refactors planning-command duplication
(incl. $path->project_path bug fix) and consumes atlas agenda via a new
schedule-engine source. First-class testing (§5) and documentation (§6) plans.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvJR434JKwmpq8LD458Aum
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvJR434JKwmpq8LD458Aum
…genda source + .STATUS enforcer (#483)

* docs(orchestrate): planning-coordination phase plan

3-phase plan (Track A refactor + $path fix / Track C atlas agenda source +
contract / docs), TDD red-first, graceful-degradation gate. Tracks B (atlas)
and D (obs) are contract-only, out of scope for this worktree.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvJR434JKwmpq8LD458Aum

* docs(spec+orchestrate): apply grill decisions D1-D16

Adversarial grill of the planning-coordination SPEC + ORCHESTRATE surfaced 16
load-bearing decisions:

- $path bug fix isolated as its own pre-step (Phase 0), red-test-first
- Consolidation of 4x .STATUS readers / 2x path resolvers / 5x project
  suggesters guarded by characterization/parity tests landed BEFORE the
  refactor (silent-behavior-loss guard)
- Track C (atlas agenda source) ships dark-ready/capability-probed, mirrors
  the existing 'schedule push' no-op pattern; zero payoff until atlas Track B
  ships, zero rework when it does
- .STATUS-ingestion mechanism left as atlas's own open design question, not
  prescribed here (respects the Track B contract-only boundary)
- New flow-cli-scoped .STATUS template + warn-only enforcer (check-status.zsh)
- Execution re-modeled as phase-gated (stop+report each phase, reviewer runs
  the FULL suite independently) instead of one-shot, with a 2-attempt
  fix-forward cap and explicit escalation on repeated failure
- Atlas-absent/present test simulation via capability-flag override + a PATH
  stub shim, with a fixture whose shape is asserted against the documented
  contract to prevent silent stub/contract drift

Full ledger + board summary + dispatch-suitability debate: see the grilled
plan (paths differ by session). Hard-scoped to flow-cli only this cycle per
the grill's reversibility/scope-creep finding — atlas Track B and obs Track D
remain contract-only, deferred to their own specs+grills.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvJR434JKwmpq8LD458Aum

* fix(planning): read $project_path not $path in morning/next

_flow_get_project_fallback deliberately emits `project_path=` (never
`path=`) to avoid colliding with ZSH's PATH-tied `$path` array. But
morning.zsh and adhd.zsh read `$path` after `eval "$info"`, so the
.STATUS lookup silently fails and focus/progress render blank while
project-type detection falls back to generic even for typed projects.

Red test (tests/test-path-bug-fix.zsh) proves the current broken
output, then the two-file fix restores it. Isolated pre-step ahead of
the Phase 1 shared-accessor refactor per SPEC §3.0 / ORCHESTRATE
Phase 0.

* docs(orchestrate): check off Phase 0

Phase 0 (the isolated $path -> $project_path fix) is implemented,
tested, and approved at the review gate. Check off 0.1-0.5 to keep
the tracking checklist current before Phase 1.

* test(planning): characterize .STATUS field readers before refactor

Snapshots the current byte-exact output of _dash_get_status_field (+
its Status/Focus/Progress wrappers), the inline greps in morning/next/
capture, and _flow_where_fallback across dialect, colon-in-value, %-
in-non-progress-field, missing-field, and status-synonym cases.

Green on today's code (17/17) — the parity guard required before any
_flow_status_field accessor exists, per SPEC §3.1 / ORCHESTRATE 1.0.

Also documents a pre-existing bug found while characterizing: _flow_-
where_fallback's `local status=...` crashes (status is a zsh read-only
special variable, even function-local), so it never actually prints
Status:/Focus: today. Captured explicitly as the one assertion that is
expected to flip after the Phase 1 migration fixes it as an
unavoidable side effect of touching that line.

* refactor(planning): shared .STATUS/project accessors

Adds three shared accessors to lib/core.zsh (SPEC-planning-coordination
-2026-07-01 §3.1), each pinned by new unit tests:

- _flow_status_field <root> <field>: replaces the 4 divergent .STATUS
  field readers (_dash_get_status_field, and the inline greps in
  morning/next/capture). Handles both "## Field:" and "field:" dialects;
  does NOT strip '%' (kept at call sites — a universal strip would
  corrupt any other field containing '%', e.g. "## Focus: hit 80%
  coverage"; also dash's own _dash_get_project_progress '%'-strip is a
  pre-existing zsh pattern-matching no-op, confirmed via characterization
  and left untouched, out of migration scope).
- _flow_resolve_project_path <name>: merges _dash_find_project_path's
  taxonomy (dev-tools/apps/r-packages/research/teaching/quarto-
  manuscripts/quarto-presentations) with _flow_get_project_fallback's
  exact-root-match + generic quarto/ fallback. Always emits
  `project_path=`, never `path=`.
- _flow_suggest_project <strategy>: replaces the 5 project-suggestion
  reimplementations (dash "right now"/footer, morning priority scan,
  adhd next/js) with one active/priority/random scan. NOT byte-parity
  guarded like the field reader (the 5 sites genuinely differ in
  selection logic) — each strategy is pinned by its own test instead.

_dash_get_status_field, _dash_find_project_path, and
_flow_get_project_fallback now delegate to the shared accessors as thin
wrappers, so their ~25 combined internal call sites needed no changes.

Also routes `agenda` (agenda.zsh) through the shared
_schedule_window_records pipeline (schedule.zsh), which gained two
additive, backward-compatible parameters (category, keep_holidays) so
agenda's --all/category-filter behavior is preserved while the
collect->filter->sort->holiday-drop logic now lives in one place.
_schedule_classify stays for OVERDUE/TODAY/WEEK/LATER bucketing.

Bug fixes discovered via characterization (tests/test-status-field-
parity.zsh, task 1.0) and fixed as an unavoidable side effect of the
mandated atlas-bridge.zsh:836 migration: _flow_where_fallback declared
`local status=...`, but `status` is a zsh read-only special variable
even as a function-local, so it crashed before ever printing Status:/
Focus: — the characterization test that captured this crash was
updated (not silently adjusted) to assert the now-fixed behavior, with
the reasoning documented inline.

Also fixed in this pass: a genuine zsh gotcha found while developing
_flow_suggest_project — redeclaring `local var` on an already-local
variable on every iteration of a `while read ... done <<< ...` loop
causes zsh to echo the previous iteration's value to stdout. Fixed by
declaring loop-scoped locals once, outside the loop.

Scope calls made along the way (flagged per the phase-gate review
process):
- capture.zsh's daily_goal read drops its `grep -i` case-insensitivity;
  every real .STATUS uses lowercase "## daily_goal:" (templates/docs),
  so this is a narrowing with no real-world effect.
- _flow_resolve_project_path checks the project-root exact match LAST
  (matching _dash_find_project_path's original, better-tested order)
  rather than FIRST (_flow_get_project_fallback's original order) —
  the two disagreed; dash's order wins as the fuller, more-tested
  taxonomy for this now-shared function.
- _flow_suggest_project's wiring into all 5 original call sites was
  done (not left as unwired dead code), backstopped by existing
  dash/adhd/morning test coverage plus the new strategy-level tests and
  a manual dogfood pass (dash/morning/next/js/agenda all producing
  correct, unchanged-looking output against a live fixture).

tests/test-status-field-parity.zsh (task 1.0, characterization) stays
green post-refactor except the one flagged, deliberate exception above.
Full ./tests/run-all.sh: 71 passed, 0 failed, 0 timeout, 1 skipped
(pre-existing, tool-absence skip — up from 67/0/0/1 pre-Phase-1 by the
4 new suites registered here).

* docs(contract): pin proposed atlas agenda read contract (dark-ready)

Adds the atlas agenda <window-days> --format=json section (Track C,
SPEC-planning-coordination-2026-07-01 §3.4) alongside the existing
atlas schedule push section, bumps contract to v1.2.0. Pins only the
read INTERFACE flow-cli calls (_flow_atlas_json agenda "$window"); how
atlas populates Task.dueDate — including whether it ever reads .STATUS
itself — is explicitly left as atlas's own open design question (D4),
not prescribed here.

No atlas release implements `agenda` yet; this is the proposed contract
ahead of the implementing code landing in the same commit range.

* feat(agenda): merge atlas agenda source into schedule engine (dark-ready)

Adds a third, capability-probed source to _schedule_collect alongside
.STATUS Schedule blocks and teach-config: atlas-tracked deadlines
(Task.dueDate). Ships as tested, INERT code — no atlas release
implements `agenda` yet (Track B, tracked separately) — same posture
`schedule push` shipped with before atlas B existed.

- _schedule_atlas_items <window> (lib/schedule.zsh): probes
  `atlas agenda --help` once per session (cached in
  _FLOW_ATLAS_HAS_AGENDA, mirroring _FLOW_ATLAS_HAS_SCHEDULE), calls
  _flow_atlas_json agenda "$window", maps the JSON array to the
  engine's date|label|type|project|recurrence|source shape with
  source hardcoded to `atlas`. Requires jq to parse the array response
  — jq absence is just another silent-no-op path, same as atlas
  absence; the engine adds no hard dependency.
- Wired into _schedule_collect as a third source after the per-project
  loop (one call per collect, not per-project — atlas returns
  cross-project results in one shot). Category filtering resolves each
  atlas record's project to a local path the same way the other two
  sources do.
- Added a dedupe pass on (date, label, project) — the first duplicate-
  possible scenario in this engine, since .STATUS + teach-config could
  never structurally collide before. First occurrence wins, so a local
  .STATUS record always takes priority over an atlas duplicate of it.
- `at` dispatcher (2.5): verified, not implemented — the existing
  generic `atlas "$@"` passthrough already forwards `at agenda ...
  --format=json` correctly when atlas is present; confirmed via a
  stub-atlas dogfood check, no code change needed.

Tests (all new, registered in tests/run-all.sh):
- tests/test-schedule-atlas-source.zsh (6 unit tests): function
  exists; absent-via-capability-flag is empty (D15 — not
  FLOW_ATLAS_ENABLED=no alone); present-but-incapable (older atlas) is
  empty; capable atlas maps the fixture correctly; capability probe is
  cached; jq-absent is a graceful no-op.
- tests/e2e-agenda-atlas.zsh (5 e2e tests, stub atlas shim on PATH per
  D16 — real atlas can't be used, it lacks the command): atlas-absent
  output unaffected; atlas-present merges fixture items; atlas items
  pass the category filter via _schedule_collect directly (agenda's
  CLI hardcodes window=7 for category filters, which would make a
  date-window assertion here flaky against the fixture's fixed dates
  as real time passes — verified `_schedule_filter_window` always
  retains "overdue" regardless of window, then used a wide window
  directly against _schedule_collect to make the category-match
  assertion itself window-independent); dedupe — an atlas record
  identical to a local one on (date,label,project) does not double-count.
- tests/test-atlas-contract.zsh: 2 new assertions pinning
  atlas-agenda-stub.json's shape to the contract doc's documented
  example — verified with a planted-defect check (removed a field from
  the fixture, confirmed the test fails; restored, confirmed it passes
  again) that this guard actually catches contract/fixture drift, not
  just a tautology.
- tests/fixtures/atlas-agenda-stub.json (new): the canned
  `atlas agenda --format=json` response used by the above.

Dogfood (manual, against a live multi-project fixture):
- No atlas: dash "right now"/footer suggestion, morning priority
  suggestion, and agenda output are byte-identical to the Phase 1
  dogfood pass — confirmed degradation is truly a no-op.
- Atlas stub present: both fixture deadlines merge into `agenda -m`
  alongside the local project's own item, no duplication, correct
  THIS WEEK / LATER bucketing.

Full ./tests/run-all.sh: 73 passed, 0 failed, 0 timeout, 1 skipped
(pre-existing tool-absence skip; up from 71 by the 3 new suites
registered here — test-schedule-atlas-source, e2e-agenda-atlas, plus
test-atlas-contract's 2 new assertions inside the existing suite).

Scope note: ORCHESTRATE's Key Files list referenced
tests/integration/agenda-merged-sources.zsh as a file to "extend" for
3-source dedup coverage; it did not exist in this repo. Dedup coverage
was added as e2e-agenda-atlas.zsh Section 3 instead (flagged for
review, same as the Phase 0/1 scope calls).

* feat(status): add .STATUS template + warn-only schema enforcer

flow-cli-scoped only (SPEC-planning-coordination-2026-07-01 §3.6, D9) —
not an ecosystem-wide standard. Reuses the scripts/check-math.zsh
pattern (standalone, lint-staged-wired, callable directly).

- templates/.STATUS.template: canonical structure with inline comments
  — header fields (Project/Type/Status/Focus/Phase/Priority/Progress),
  the ## Schedule: grammar, ## daily_goal:, ## Active Worktrees,
  session-log convention. Documents the dual dialect ("## Field:" /
  "field:") _flow_status_field supports. Priority/Progress/Status use
  concrete starter values (2/0/active), not bracketed placeholders,
  so the template itself validates clean — a placeholder like
  "<integer 0-100>" would otherwise fail the Progress format check.
- scripts/check-status.zsh: validates required fields present,
  Progress is an integer 0-100, Status is in the allowed set
  (active|paused|archived|blocked, or a recognized _flow_status_field
  synonym), and ## Schedule: lines match the grammar
  _schedule_parse_status (lib/schedule.zsh) actually expects — a line
  the real parser can't match is silently dropped there (invisible,
  not fatal), which is exactly the mistake worth surfacing here.
  D11 HARD CONSTRAINT: exits 0 always, no matter how malformed the
  input — prints violations, never blocks. Verified directly against
  the maximally-broken-input case, not just asserted.
- Wired into lint-staged as a literal ".STATUS" key (not a glob),
  alongside the existing "*.qmd" -> check-math.zsh entry.

Two zsh footguns found and fixed while writing check-status.zsh (both
first discovered in Phase 1, recurring here in new code — same
lib/core.zsh `_flow_status_field` root+filename convention doesn't
apply to templates/.STATUS.template, whose filename isn't literally
".STATUS": staged a throwaway copy under that exact name per
validation call so the accessor's contract is met without duplicating
its parsing logic):
- `local status=...` crashes (status is a zsh read-only special
  variable, even function-local) -> renamed to `proj_status`.
- redeclaring `local var` inside a loop echoes the previous
  iteration's value to stdout -> all loop-scoped locals declared once,
  outside the loops.

tests/test-status-schema.zsh (14 tests, registered in
tests/run-all.sh): checker/template exist; a fully valid fixture
produces zero warnings and exit 0; the template and flow-cli's own
.STATUS both pass clean; missing-field / bad-Progress (out-of-range
and non-numeric) / bad-Status / malformed-Schedule-line all warn but
still exit 0; a Status synonym is NOT flagged; a maximally-broken
fixture (not even STATUS-shaped) still exits 0; no-args exits 0;
lint-staged wiring is present.

Full ./tests/run-all.sh: 74 passed, 0 failed, 0 timeout, 1 skipped
(pre-existing tool-absence skip; up from 73 by this one new suite).

* docs(planning): agenda/dispatcher/API guides + CHANGELOG

Phase 4 (Documentation & Discoverability) — SPEC-planning-coordination
-2026-07-01 §6, ORCHESTRATE final phase.

- docs/reference/MASTER-API-REFERENCE.md: documents the 4 new/changed
  functions (_flow_status_field, _flow_resolve_project_path,
  _flow_suggest_project in a new "Project Utilities" subsection;
  _schedule_atlas_items in a new "Schedule Engine" top-level section —
  lib/schedule.zsh had no section here before). Coverage count bumped
  178 -> 182.
- docs/guides/AGENDA-SCHEDULE-GUIDE.md: adds a mermaid data-source
  diagram (.STATUS + teach-config + atlas -> collect -> dedupe ->
  surfaces), a new "3. Atlas-tracked deadlines" source entry, and
  rewrites "Atlas integration" into push (shipped) + read (dark-ready)
  halves. The read half includes a REAL captured `agenda -m` run
  (memory capture-real-agenda-output-for-docs — built a live 3-source
  fixture with a stub atlas, ran it, transcribed the actual output; not
  fabricated) showing a .STATUS item, a teach-config item, and an
  atlas-sourced item merged, correctly typed and bucketed.
- docs/reference/MASTER-DISPATCHER-GUIDE.md: notes the engine now
  merges three sources and that the atlas one degrades to a silent
  no-op without atlas.
- docs/help/QUICK-REFERENCE.md: tip clarifying `agenda` spans every
  project category (dev/r/quarto/apps), not just research/teach.
- docs/ATLAS-CONTRACT.md: verified already current from Phase 2
  (v1.2.0, `atlas agenda` documented) — no further change needed.
- CONTRIBUTING.md: new ".STATUS Files" subsection pointing at
  templates/.STATUS.template and scripts/check-status.zsh (warn-only).
  Inserted narrowly — this file is otherwise significantly stale
  (describes a structure/toolchain that doesn't match flow-cli's
  actual pure-ZSH layout); that pre-existing staleness is out of scope
  here and is flagged in the phase report, not fixed.
- CHANGELOG.md + docs/CHANGELOG.md: mirrored [Unreleased] entries for
  all of Phases 0-3 (shared accessors, atlas agenda source + dedupe,
  .STATUS template/enforcer, the $path and _flow_where_fallback bug
  fixes). The two files were already drifted before this commit (an
  extra "tok mint" entry only in docs/CHANGELOG.md, a missing blank
  line before the 7.13.0 heading) — not reconciled here, flagged in
  the phase report as a separate pre-existing issue.
- CLAUDE.md: test-file count 219 -> 245 (already stale beyond just
  this phase's +8 new files — pre-existing drift); suite-run wording
  corrected from "67/67 passing, 1 expected interactive/tmux timeout"
  to "74/74 passing, 1 skipped — required external tool absent" to
  match what run-all.sh actually reports today (a skip, not a
  timeout); added scripts/check-status.zsh and templates/ to the
  structure tree.
- docs/specs/SPEC-agenda-schedule-2026-06-13.md: Status draft ->
  Implemented, with a pointer to this SPEC's §3.4 for the atlas-source
  addition.

Verification:
- `mkdocs build --strict`: 0 warnings (clean).
- markdownlint (craft's config — flow-cli has no markdownlint config
  or CI step of its own; runs prettier instead): 0 findings in every
  region this commit touched. 20 pre-existing findings remain in
  CHANGELOG.md (historical entries, lines 128-1065) and the SPEC file
  (lines 66-114, pre-existing body) — untouched by this commit,
  flagged rather than fixed (out of scope).
- Full ./tests/run-all.sh: 74 passed, 0 failed, 0 timeout, 1 skipped
  (unchanged from Phase 3 — this phase touches docs only).

* docs(orchestrate): check off final acceptance criteria (reviewer-verified)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvJR434JKwmpq8LD458Aum

* fix(test): hide jq via controlled PATH, not /bin assumption (Linux CI)

test_no_jq_is_graceful_noop used PATH="$STUB_BIN:/bin", assuming /bin
is jq-free. True on macOS (a real, separate /bin). False on Ubuntu's
ubuntu-latest CI runner: Ubuntu has been usr-merged since 19.10, so
/bin is a symlink to /usr/bin, which ships jq preinstalled. /bin/jq
resolved on CI, the no-op branch never triggered, and the test failed
with a non-empty assert_empty. Same bug class as the documented
macos-only-shell-isms-break-linux-ci gotcha, new instance: a PATH-
based "hide this tool" assumption that only holds on macOS's
non-merged /bin.

Fix: PATH="$STUB_BIN" alone, no /bin. $STUB_BIN is a fresh mktemp dir
under the test's exclusive control containing only the atlas stub, so
it's guaranteed jq-free on every platform — no reliance on any real
system directory's contents.

Verified nothing else was needed from /bin: _schedule_atlas_items only
consults `atlas` (found — the stub) and `jq` (not found, by
construction) on PATH before its early return; confirmed
`command -v jq` fails under PATH="$STUB_BIN" alone.

Local verification: tests/test-schedule-atlas-source.zsh 6/6 passing;
full ./tests/run-all.sh 74 passed, 0 failed, 0 timeout, 1 skipped
(unchanged pre-existing tool-absence skip).

---------

Co-authored-by: Test User <test@example.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Remove ORCHESTRATE-planning-coordination.md (implementation complete,
merged) and update .STATUS: clear the worktree entry, record the session
summary (5 phase-gated increments, 2 real zsh bugs found+fixed, 1
Linux-CI-only bug caught before merge).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvJR434JKwmpq8LD458Aum
…int entry

tok mint (2ed8504, merged 2026-06-30, PR #480) was documented in
docs/CHANGELOG.md's [Unreleased] but missing from root CHANGELOG.md.
Add it to root, matching wording, ahead of the v7.14.0 release cut.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvJR434JKwmpq8LD458Aum
Version bump (flow.plugin.zsh, package.json, CLAUDE.md, 23 man pages
.TH lines) + CHANGELOG [Unreleased] -> [7.14.0] (mirrored, both files)
+ docs/index.md What's New refresh (was stale at v7.10.2, 3 releases
behind).

Ships: shared .STATUS/project accessors, dark-ready atlas agenda source,
.STATUS template + warn-only enforcer, $path bug fix, atlas-bridge crash
fix. See CHANGELOG.md [7.14.0] for full detail.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvJR434JKwmpq8LD458Aum
…ak audit

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvJR434JKwmpq8LD458Aum
Investigation only, no fixes applied. Confirms mkdocs/tests/CHANGELOG
clean; finds real staleness in docs/guides/TESTING.md (219/67 vs actual
74/74), a test-count methodology inconsistency (230 raw files / 75
registered suites / 245 claimed), and >=5 stale-marked-draft specs
whose features have shipped per CHANGELOG evidence.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvJR434JKwmpq8LD458Aum
- Fixed test-count staleness: docs/guides/TESTING.md (219/67 -> 230/74,
  2 locations) and CLAUDE.md (245 -> 230 test files, 2 locations).
  Canonical methodology: 'test files' = raw .zsh count under tests/
  (230, via find); 'registered suites' = run_test entries in
  run-all.sh (75 total, 74 pass + 1 skip).
- Marked 8 specs Implemented, each with a real evidence pointer (not
  just 'looks old'): teach-doctor-v2, teach-deploy-v2, teach-plan-v2
  (test suites passing), em-v2 (README What's New v7.5.0),
  dot-rename-split (README What's New v7.1.0), teach-map (CHANGELOG
  v6.6.0 + dispatcher guide), latex-macros (lib/macro-parser.zsh +
  test file exist), testing-framework (test-framework.zsh +
  dogfood-test-quality.zsh + CI gate all exist as specced).
  SPEC-himalaya-editor-plugin-2026-02-11.md checked and left as-is —
  its 'partially-implemented' annotation is already accurate.

Verified: mkdocs build --strict 0 warnings; full suite 74/0/0/1
(reproduced 4x across this session, stable).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvJR434JKwmpq8LD458Aum
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvJR434JKwmpq8LD458Aum
…th (#485)

* feat(doctor): add INSTALLATION section for Homebrew distribution health

Catches the class of bug fixed in homebrew-tap PR #135: a Homebrew
formula install that "succeeds" (brew reports installed, brew upgrade
says "already installed") but silently fails to link — man-page name
collisions on case-insensitive filesystems, and shell/Cellar version
drift after an upgrade the user forgot to restart their shell for.

New `_doctor_check_installation` checks, scoped to flow-cli's own
Homebrew install (skips silently for git-clone/plugin-manager installs):
- opt/Cellar symlink integrity (installed-but-unlinked detection)
- shell-loaded FLOW_VERSION vs. installed Cellar keg version drift
- flow-cli's own man pages actually resolving into the shared man1 dir
  (vs. losing a case-insensitive name collision to another formula,
  scoped to formulae that actually link — Homebrew's own keg-only
  convention, e.g. lua vs lua@5.4, produces same-name kegs constantly
  and is not a bug)

New tests/e2e-doctor-install.zsh (7 scenarios, all via mocked `brew`).

* docs(doctor): document INSTALLATION check category

Adds the new section to REFCARD-DOCTOR.md's check-category list
(renumbering the categories after it) and to both CHANGELOGs.

---------

Co-authored-by: Test User <test@example.com>
231 test files (was 230), 76 registered suites (was 75), 75/75
passing (was 74/74) — reflects tests/e2e-doctor-install.zsh added
in PR #485. Also fixed a pre-existing 32→33 command-file drift.
Adds docs/commands/{ref,setup,tutorial}.md and a "sec tutorial"
subsection in SECRET-MANAGEMENT.md, wired into mkdocs nav — the last
4 user-facing commands flagged undocumented by DOC-DASHBOARD.md.

Also syncs MASTER-DISPATCHER-GUIDE.md's claude section, stale at C1-C6
since v7.13.0 added C7-C11 + the watch daemon (found via a 2-week
commit-vs-docs audit).

Includes the BRAINSTORM writeup for closing stale issue #423 (already
fully shipped, closed with commit evidence).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
SPEC-code-workspace-2026-02-13.md (code ws dispatcher) sat in draft
for 4.5mo with zero implementation and no references anywhere in
commands/ or lib/ — no demand signal beyond the original brainstorm.
Overloading the code binary carries real risk (flow-cli already needs
a binary-precedence guard for r/mcp/cc) without a validated need.

Archived rather than deleted — fully recoverable via git history if
the need resurfaces.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…359/#275 confirmed real backlog)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
13 recipes across the two cadences flow-cli is built around (morning
-> work -> dash -> finish daily; agenda -w -> dash -> wt prune -> g
sync -> yay --week -> doctor weekly), each sourced from real command
docs. Wired into mkdocs nav under Workflows & Guides.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Points to the Claude Artifact companion (Daily/Weekly toggle, step
cards, right-side big-picture panel with ring diagrams for both
loops) without hardcoding the session-scoped URL.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Closes an ADHD-organization gap: setup (interactive wizard) and
tutorial (12 lessons) are the commands built specifically to reduce
onboarding friction, but weren't linked anywhere on the page whose
job is reducing onboarding friction. Also adds the new Workflow
Cookbook to the Next Steps grid and ref to the core command list.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Splits the flat 8-card grid into "New here?" / "Solve a specific
problem" / "Already using it? Look something up" — turns one 8-way
decision into three easier 2-4-way ones, matching the page's own
decision-fatigue-reduction philosophy. Adds the missing Setup Wizard
card. Trims the What's New admonition from 5 dense bullets to 2
headline items + a changelog pointer for the rest.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Cookbook, ref/setup/tutorial/sec-tutorial docs, claude section C7-C11
sync, and homepage reorganization — none were reflected in the
Unreleased section yet, only the doctor INSTALLATION feature was.
Root and docs/ mirrors verified identical.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Version bump: package.json, package-lock.json (version-only, drifted
since 7.13.0), CLAUDE.md, flow.plugin.zsh, 23 man pages.

CHANGELOG: [Unreleased] -> [7.15.0] in both root and docs/ mirrors
(verified identical). docs/index.md What's New + footer version
refreshed to headline this release's actual content (doctor
INSTALLATION checks, doc gap fills) instead of the stale v7.14.0
planning-coordination summary.

Verified: 74/74 effective tests pass (1 timeout + 1 skip, both
documented baseline), mkdocs build --strict clean, 12/12 man-page
version-sync guard checks pass.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@Data-Wise Data-Wise merged commit d8e2ae5 into main Jul 2, 2026
4 checks passed
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