Skip to content

Commit 4abcf04

Browse files
alicodingclaude
andauthored
feat: goal 0015 remainder — frecency, pending-review, Configure jump rows (Quick Panel) (#18)
Three of the four DoR-met remaining items land into the Quick Panel (ADR-0033), not the ⌘K palette: - Frecency sort (frequency-only): QuickPanel's workflow list ranks by ExecutionService.HomeMetrics' mostUsed -- goal 0014's own value-mirror substrate, reused rather than reinvented (app/workflowFrecency.ts, unit-tested + proven live via e2e). Pins stayed out: no pin/favorite concept exists anywhere in Mill (grepped first) -- recorded as its own BACKLOG.md tech-debt line instead of inventing schema under this goal. - Pending-review count: the Quick Panel is its own Wails window and can't share App.tsx's reviewPendingCount effect -- a second, independent read of ListRuns/PendingMCPWrites + the same two live events, display-only (doesn't duplicate the main window's SetPendingBadge/NotifyPendingApproval side effects). Proven e2e with a real parked MCP write, asserting the badge updates live with no reload. - Configure entities: connectors/Lists/MCP Servers now render as searchable/jumpable rows, landing the main window on the right Configure tab via a new 'configure:<tab>' mill-navigate target (app/useMillNavigate.ts, extracted out of App.tsx to stay under the 500-line convention; ConfigureView gained an initialTab prop). Out of scope, recorded honestly rather than silently dropped: a ⌘?/⌘/ multi-binding keybinding alias (needs the 1:1 command↔binding registry to become multi-binding) and pins/favorites (needs its own schema decision) both get BACKLOG.md tech-debt lines; the ⌘K palette's own inline-hotkey-per-row detail stays a named, untouched gap. Goal 0015's file stays open (not archived) until those land. Also fixes a real, CI-blocking bug found live this session: formatUpdated (shared/inventorySort.ts) silently ignored the `now` override formatLastChecked (shared/staleness.ts) already threaded through it, using the real wall clock instead -- staleness.test.ts's hardcoded NOW anchor caught this for real once the actual clock crossed a day boundary past it mid-session, flipping a "9 minutes ago" expectation to "yesterday". now is threaded through properly now. Claude-Session: https://claude.ai/code/session_018pkViCNAuZp2vBv2K9AbUh Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
1 parent 2b4bfeb commit 4abcf04

13 files changed

Lines changed: 594 additions & 35 deletions

docs/SPEC.md

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2491,7 +2491,19 @@ findings) and the build rationale are in
24912491
main window also isn't visible, the accepted mitigation. Goal
24922492
0015's own ⌘K in-window palette is unchanged — still the surface
24932493
for *already being in Mill*, distinct from the Quick Panel's *not
2494-
yet being in Mill* summon target.
2494+
yet being in Mill* summon target. **Update (2026-08-12)**: the
2495+
Quick Panel's workflow list is frecency-sorted (frequency-only,
2496+
`app/workflowFrecency.ts`, off goal 0014's `HomeMetrics.mostUsed`),
2497+
a "Review" row surfaces the panel's own independent pending-review
2498+
count (its own window, its own `ListRuns`/`PendingMCPWrites` read +
2499+
`guardrail-pending-changed`/`mcp-write-approval` subscription — it
2500+
can't share App.tsx's, a separate React tree entirely), and
2501+
connector/List/MCP-Server rows jump the main window to the right
2502+
Configure tab (`OpenMainWindow('configure:<tab>')`, a new
2503+
`app/useMillNavigate.ts` hook parsing the target, `ConfigureView`'s
2504+
new `initialTab` prop) — goal 0015's own remaining Acceptance
2505+
halves, see that goal file for what's still open (pins, the ⌘K
2506+
palette's own inline-hotkey-per-row detail, a ⌘?/⌘/ alias).
24952507
- **Auto-update**`app.Updater` (Wails3's own first-party,
24962508
zero-new-dependency `v3/pkg/updater`) is `Init`'d in `main.go` with a
24972509
GitHub Releases provider pointed at `alicoding/mill`;
@@ -2540,10 +2552,23 @@ findings) and the build rationale are in
25402552
WITH its effective shortcut inline — the owner's
25412553
unblock-yourself-in-place requirement — plus workflows (Enter = the
25422554
same test-run semantics as the list Run button) and open work tabs
2543-
(jump/close). Frecency/pins, Configure entities, the pending-review
2544-
count, and a ⌘?/⌘/ alias — blocked on the 1:1 command↔binding
2545-
registry shape — stay recorded in the goal file, not silently
2546-
dropped). `workflow.run`'s default moved
2555+
(jump/close). **Update (2026-08-12)**: frecency, Configure entities,
2556+
and the pending-review count — goal 0015's own remaining Acceptance
2557+
halves — landed into the **Quick Panel** (`app/QuickPanel.tsx`,
2558+
ADR-0033), not this ⌘K palette: frequency-only workflow sort off
2559+
goal 0014's `HomeMetrics.mostUsed` (`app/workflowFrecency.ts`; pins
2560+
stayed out — no pin/favorite concept exists anywhere in Mill, a
2561+
BACKLOG.md tech-debt line rather than invented schema), connector/
2562+
List/MCP-Server rows that jump the main window to the right
2563+
Configure tab (`SettingsService.OpenMainWindow('configure:<tab>')`
2564+
`app/useMillNavigate.ts``ConfigureView`'s `initialTab`), and
2565+
the panel's own independent pending-review read+subscribe (separate
2566+
Wails window, can't share App.tsx's). This ⌘K palette's own
2567+
still-open gap — the *inline per-workflow hotkey/armed-state
2568+
detail* the Acceptance sentence's "showed them the hotkey" half
2569+
names — and a ⌘?/⌘/ alias (blocked on the 1:1 command↔binding
2570+
registry shape) both stay recorded in the goal file, not silently
2571+
dropped. `workflow.run`'s default moved
25472572
off an initial ⌘R pick to ⌘↩ by owner decision, once implementation
25482573
surfaced a real collision the original research missed: macOS's
25492574
`DefaultApplicationMenu()` installs View > Reload on Cmd+R

docs/goals/0015-summon-quick-invoke.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,77 @@ anything.
6363
runs a workflow" run path is real and built there today; the
6464
inline-hotkey-hint and frecency/pins halves of this acceptance bar are
6565
still the unbuilt remainder this goal file tracks, for either surface.
66+
67+
## Remainder delivered 2026-08-12 — three of four items, into the Quick Panel
68+
69+
Investigated and confirmed DoR-met (the usage substrate, the RPCs, and
70+
the live-sync infra all already existed — nothing here needed new
71+
backend surface):
72+
73+
- **Frecency (frequency-only, not frequency+recency)**: the Quick
74+
Panel's workflow list now sorts by `ExecutionService.HomeMetrics`'
75+
`mostUsed` (goal 0014's own value-mirror substrate, `mostUsedFor`
76+
every run counted regardless of Kind/Status, over the entire local
77+
run history, not a rolling window) — `app/workflowFrecency.ts`
78+
(`sortWorkflowsByFrecency`), unit-tested
79+
(`workflowFrecency.test.ts`) and proven live end to end (a workflow
80+
run twice from the panel sorts above one never run,
81+
`e2e/quick-panel.spec.ts`). **Pins are NOT built** — grepped the
82+
whole codebase first, confirmed no pin/favorite concept exists
83+
anywhere (not even a stub) — recorded as its own, smaller tech-debt
84+
line in `docs/goals/BACKLOG.md` rather than inventing schema for it
85+
ad hoc under this goal.
86+
- **Pending-review count**: the Quick Panel is its own Wails window
87+
(ADR-0033) — App.tsx's existing `reviewPendingCount` effect only
88+
ever ran in the main window's React tree. `QuickPanel.tsx` now owns
89+
a second, independent read of the same two sources
90+
(`ExecutionService.ListRuns` pending runs + `SettingsService.
91+
PendingMCPWrites`) and the same two live-update events
92+
(`guardrail-pending-changed`, `mcp-write-approval`) — a "Review" row
93+
always present (unblock-yourself-in-place), badged once non-zero.
94+
Deliberately does NOT re-run App.tsx's `SetPendingBadge`/
95+
`NotifyPendingApproval` side effects (the main window already owns
96+
those; a second window firing them too would double-notify).
97+
Proven e2e with a REAL parked MCP write via the existing MCP test
98+
client (`mcpTestClient.ts`), asserting the badge updates live while
99+
the panel stays open and mounted — not just on next open.
100+
- **Configure entities**: connectors (`ConfigureService.HTTPRequests`,
101+
"Integration" tab), Lists (`.Lists`), MCP Servers (`.MCPServers`) —
102+
all already-bound RPCs, already read via the shared stores
103+
(`shared/store.ts`'s `requests`, `shared/configureEntityStore.ts`'s
104+
`lists`/`mcpServers`) — now render as searchable/jumpable rows
105+
alongside workflows, each landing the MAIN window on its own
106+
Configure tab (`SettingsService.OpenMainWindow('configure:<tab>')`
107+
→ a new `app/useMillNavigate.ts` hook, extracted out of App.tsx to
108+
stay under the 500-line convention → `View.tab``ConfigureView`'s
109+
new `initialTab` prop). Lands on the TAB, not the individual
110+
entity's own row within it — deep-linking to one specific entity's
111+
edit form would need `ConfigureView`'s tab components to accept a
112+
selected-row id too, real additional scope beyond what this
113+
remainder's DoR covered. Proven e2e (search "country" → jump →
114+
the main window's Configure > Lists tab is visible with the seeded
115+
"Example: Country codes" row).
116+
117+
## Still open — not touched this session, named so they're not silently dropped
118+
119+
- **Inline hotkey hint per workflow row** (the ⌘K palette's own
120+
documented simplification from the 2026-08-11 core build —
121+
`app/CommandPalette.tsx`'s workflow-row comment: shows the trigger
122+
NodeType label, e.g. "Hotkey trigger," not the live armed/hotkey-
123+
combo detail `TriggerRowLabel.tsx` owns). Not part of this session's
124+
investigated-DoR-met scope; still the literal "showed them the
125+
hotkey they'll use instead next time" half of this goal's Acceptance
126+
sentence.
127+
- **⌘?/⌘/ multi-binding alias** — needs a command to carry more than
128+
one `KeyCombo` (today's registry is 1:1, `shared/commands.ts`'s
129+
`defaultBinding: KeyCombo | null`); recorded as a BACKLOG.md
130+
tech-debt line, not silently dropped.
131+
- **Pins/favorites** — no schema exists yet for either surface;
132+
recorded as its own, smaller BACKLOG.md tech-debt line (separate
133+
from the alias — different kind of missing infra, a data model vs a
134+
registry shape).
135+
136+
This goal file stays OPEN (not archived) until the three items above
137+
are picked up — none of them block the palette/panel being genuinely
138+
useful today, but the Acceptance sentence isn't fully true until the
139+
first one lands.

docs/goals/BACKLOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,13 +129,15 @@ live-review material, interleaved during owner reviews, not a lane.**
129129
8. [x] [0013 — Canonical type system](archive/0013-canonical-type-system.md) — COMPLETE 2026-08-10 (typedfield leaf pkg; all 4 vocabularies converged incl. openapispec Phase 3; the #1 kernel investment)
130130
9. [x] [0011 — Lists maturation](archive/0011-lists-maturation.md) — DELIVERED 2026-08-12 (harvested from a parallel owner session + reconciled onto main: typed Columns/Rows against ADR-0029's canonical typedfield, system-managed audit columns w/ Expired-excluded-by-default, `list-search` node w/ go-edlib fuzzy matching, in-place legacy-List migration; CSV import + full per-run dataset snapshot named-deferred)
131131
10. [x] [0014 — Home dashboard / value mirror](archive/0014-home-dashboard.md) — delivered 2026-08-10 (Recharts, industry-decided metric semantics, editable minutes-saved, default landing)
132-
11. [ ] [0015 — Summon quick-invoke](0015-summon-quick-invoke.md) — CORE delivered 2026-08-11 (⌘K palette: commands with inline shortcuts, workflow run, tab jump/close; delegated build); PHASE 2 delivered same day (ADR-0033: the summon hotkey opens a dedicated floating Quick Panel — frameless, floats over fullscreen, Esc/blur dismiss, focus-yield; supersedes "summon opens the main window"). Remainder open: frecency/pins (needs the 0014 usage substrate), Configure entities, pending-review count, ⌘?/⌘/ alias (needs multi-binding registry support)
132+
11. [ ] [0015 — Summon quick-invoke](0015-summon-quick-invoke.md) — CORE delivered 2026-08-11 (⌘K palette: commands with inline shortcuts, workflow run, tab jump/close; delegated build); PHASE 2 delivered same day (ADR-0033: the summon hotkey opens a dedicated floating Quick Panel — frameless, floats over fullscreen, Esc/blur dismiss, focus-yield; supersedes "summon opens the main window"). REMAINDER delivered 2026-08-12, into the Quick Panel: frecency sort (frequency-only, `app/workflowFrecency.ts` off goal 0014's `HomeMetrics.mostUsed`), pending-review count (own window-local read+subscribe, `QuickPanel.tsx`), Configure entities as jumpable rows (`configure:<tab>` via new `app/useMillNavigate.ts` + `ConfigureView.initialTab`). Still open, named in the goal file, not silently dropped: the ⌘K palette's own inline-hotkey-per-workflow-row detail (a pre-existing documented simplification, untouched this session); pins/favorites and the ⌘?/⌘/ multi-binding alias — see their own tech-debt lines below (Standing section).
133133
12. [x] [0022 — Workflow view mode](archive/0022-workflow-view-mode.md) — delivered 2026-08-11 (row click → read-only canvas w/ Run+step-debug; Edit explicit in-place mode switch; breakpoint dot moved onto the node card, both modes; fixed a latent bug where a policy deny could hide a breakpoint's existence)
134134
13. [x] [0020 — Workflow breakpoints](archive/0020-workflow-breakpoints.md) — delivered 2026-08-11 (ADR-0031 full scope incl. step mode + MCP debug tools; delegated build; found+fixed the ExecuteOptions.WorkflowID never-set bug that silently disabled all workflow/instance-scoped guardrail rules at runtime)
135135

136136
**Standing**
137137
- [ ] [0001 — Authoring-surface overhaul](0001-authoring-surface-overhaul.md) (spacing audit + §3.8 prototype elements — live-review material)
138138
- [ ] [0021 — MCP dogfood gap closure](0021-mcp-dogfood-gap-closure.md) (owner-mandated 2026-08-11: orchestrator live-probes the MCP surface against the bank use cases, logs ranked gaps, fixes graduate out; phase 1 done — 4 gaps + 1 confirmed-by-design)
139+
- [ ] Workflow pins/favorites (tech debt, split from goal 0015's remainder 2026-08-12) — no pin/favorite concept exists anywhere in Mill today (grepped before scoping it out); needs its own small schema decision (which store owns a pin list, per-workflow or a plain ID set) before any build — deliberately not invented ad hoc under 0015's frecency-only ship. Quick Panel's workflow list sorts by frequency alone until this lands.
140+
- [ ] ⌘?/⌘/ multi-binding keybinding alias (tech debt, split from goal 0015's remainder 2026-08-12) — the owner's goal-0015 "bind ⌘? (and/or ⌘/) to open the palette too" ask needs a command to carry more than one `KeyCombo`; today's registry (`shared/commands.ts`) is 1:1 (`defaultBinding: KeyCombo | null`). Needs a real schema call (array vs. a small alias table) before it's buildable — real data-model infrastructure, not a self-contained UI change.
139141

140142
**Delivered**
141143
- [x] [0003 — MCP authoring live dogfood](archive/0003-mcp-authoring-dogfood.md) — 2026-08-10

0 commit comments

Comments
 (0)