Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 30 additions & 5 deletions docs/SPEC.md
Original file line number Diff line number Diff line change
Expand Up @@ -2491,7 +2491,19 @@ findings) and the build rationale are in
main window also isn't visible, the accepted mitigation. Goal
0015's own ⌘K in-window palette is unchanged — still the surface
for *already being in Mill*, distinct from the Quick Panel's *not
yet being in Mill* summon target.
yet being in Mill* summon target. **Update (2026-08-12)**: the
Quick Panel's workflow list is frecency-sorted (frequency-only,
`app/workflowFrecency.ts`, off goal 0014's `HomeMetrics.mostUsed`),
a "Review" row surfaces the panel's own independent pending-review
count (its own window, its own `ListRuns`/`PendingMCPWrites` read +
`guardrail-pending-changed`/`mcp-write-approval` subscription — it
can't share App.tsx's, a separate React tree entirely), and
connector/List/MCP-Server rows jump the main window to the right
Configure tab (`OpenMainWindow('configure:<tab>')`, a new
`app/useMillNavigate.ts` hook parsing the target, `ConfigureView`'s
new `initialTab` prop) — goal 0015's own remaining Acceptance
halves, see that goal file for what's still open (pins, the ⌘K
palette's own inline-hotkey-per-row detail, a ⌘?/⌘/ alias).
- **Auto-update** — `app.Updater` (Wails3's own first-party,
zero-new-dependency `v3/pkg/updater`) is `Init`'d in `main.go` with a
GitHub Releases provider pointed at `alicoding/mill`;
Expand Down Expand Up @@ -2540,10 +2552,23 @@ findings) and the build rationale are in
WITH its effective shortcut inline — the owner's
unblock-yourself-in-place requirement — plus workflows (Enter = the
same test-run semantics as the list Run button) and open work tabs
(jump/close). Frecency/pins, Configure entities, the pending-review
count, and a ⌘?/⌘/ alias — blocked on the 1:1 command↔binding
registry shape — stay recorded in the goal file, not silently
dropped). `workflow.run`'s default moved
(jump/close). **Update (2026-08-12)**: frecency, Configure entities,
and the pending-review count — goal 0015's own remaining Acceptance
halves — landed into the **Quick Panel** (`app/QuickPanel.tsx`,
ADR-0033), not this ⌘K palette: frequency-only workflow sort off
goal 0014's `HomeMetrics.mostUsed` (`app/workflowFrecency.ts`; pins
stayed out — no pin/favorite concept exists anywhere in Mill, a
BACKLOG.md tech-debt line rather than invented schema), connector/
List/MCP-Server rows that jump the main window to the right
Configure tab (`SettingsService.OpenMainWindow('configure:<tab>')`
→ `app/useMillNavigate.ts` → `ConfigureView`'s `initialTab`), and
the panel's own independent pending-review read+subscribe (separate
Wails window, can't share App.tsx's). This ⌘K palette's own
still-open gap — the *inline per-workflow hotkey/armed-state
detail* the Acceptance sentence's "showed them the hotkey" half
names — and a ⌘?/⌘/ alias (blocked on the 1:1 command↔binding
registry shape) both stay recorded in the goal file, not silently
dropped. `workflow.run`'s default moved
off an initial ⌘R pick to ⌘↩ by owner decision, once implementation
surfaced a real collision the original research missed: macOS's
`DefaultApplicationMenu()` installs View > Reload on Cmd+R
Expand Down
74 changes: 74 additions & 0 deletions docs/goals/0015-summon-quick-invoke.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,77 @@ anything.
runs a workflow" run path is real and built there today; the
inline-hotkey-hint and frecency/pins halves of this acceptance bar are
still the unbuilt remainder this goal file tracks, for either surface.

## Remainder delivered 2026-08-12 — three of four items, into the Quick Panel

Investigated and confirmed DoR-met (the usage substrate, the RPCs, and
the live-sync infra all already existed — nothing here needed new
backend surface):

- **Frecency (frequency-only, not frequency+recency)**: the Quick
Panel's workflow list now sorts by `ExecutionService.HomeMetrics`'
`mostUsed` (goal 0014's own value-mirror substrate, `mostUsedFor` —
every run counted regardless of Kind/Status, over the entire local
run history, not a rolling window) — `app/workflowFrecency.ts`
(`sortWorkflowsByFrecency`), unit-tested
(`workflowFrecency.test.ts`) and proven live end to end (a workflow
run twice from the panel sorts above one never run,
`e2e/quick-panel.spec.ts`). **Pins are NOT built** — grepped the
whole codebase first, confirmed no pin/favorite concept exists
anywhere (not even a stub) — recorded as its own, smaller tech-debt
line in `docs/goals/BACKLOG.md` rather than inventing schema for it
ad hoc under this goal.
- **Pending-review count**: the Quick Panel is its own Wails window
(ADR-0033) — App.tsx's existing `reviewPendingCount` effect only
ever ran in the main window's React tree. `QuickPanel.tsx` now owns
a second, independent read of the same two sources
(`ExecutionService.ListRuns` pending runs + `SettingsService.
PendingMCPWrites`) and the same two live-update events
(`guardrail-pending-changed`, `mcp-write-approval`) — a "Review" row
always present (unblock-yourself-in-place), badged once non-zero.
Deliberately does NOT re-run App.tsx's `SetPendingBadge`/
`NotifyPendingApproval` side effects (the main window already owns
those; a second window firing them too would double-notify).
Proven e2e with a REAL parked MCP write via the existing MCP test
client (`mcpTestClient.ts`), asserting the badge updates live while
the panel stays open and mounted — not just on next open.
- **Configure entities**: connectors (`ConfigureService.HTTPRequests`,
"Integration" tab), Lists (`.Lists`), MCP Servers (`.MCPServers`) —
all already-bound RPCs, already read via the shared stores
(`shared/store.ts`'s `requests`, `shared/configureEntityStore.ts`'s
`lists`/`mcpServers`) — now render as searchable/jumpable rows
alongside workflows, each landing the MAIN window on its own
Configure tab (`SettingsService.OpenMainWindow('configure:<tab>')`
→ a new `app/useMillNavigate.ts` hook, extracted out of App.tsx to
stay under the 500-line convention → `View.tab` → `ConfigureView`'s
new `initialTab` prop). Lands on the TAB, not the individual
entity's own row within it — deep-linking to one specific entity's
edit form would need `ConfigureView`'s tab components to accept a
selected-row id too, real additional scope beyond what this
remainder's DoR covered. Proven e2e (search "country" → jump →
the main window's Configure > Lists tab is visible with the seeded
"Example: Country codes" row).

## Still open — not touched this session, named so they're not silently dropped

- **Inline hotkey hint per workflow row** (the ⌘K palette's own
documented simplification from the 2026-08-11 core build —
`app/CommandPalette.tsx`'s workflow-row comment: shows the trigger
NodeType label, e.g. "Hotkey trigger," not the live armed/hotkey-
combo detail `TriggerRowLabel.tsx` owns). Not part of this session's
investigated-DoR-met scope; still the literal "showed them the
hotkey they'll use instead next time" half of this goal's Acceptance
sentence.
- **⌘?/⌘/ multi-binding alias** — needs a command to carry more than
one `KeyCombo` (today's registry is 1:1, `shared/commands.ts`'s
`defaultBinding: KeyCombo | null`); recorded as a BACKLOG.md
tech-debt line, not silently dropped.
- **Pins/favorites** — no schema exists yet for either surface;
recorded as its own, smaller BACKLOG.md tech-debt line (separate
from the alias — different kind of missing infra, a data model vs a
registry shape).

This goal file stays OPEN (not archived) until the three items above
are picked up — none of them block the palette/panel being genuinely
useful today, but the Acceptance sentence isn't fully true until the
first one lands.
4 changes: 3 additions & 1 deletion docs/goals/BACKLOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,13 +129,15 @@ live-review material, interleaved during owner reviews, not a lane.**
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)
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)
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)
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)
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).
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)
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)

**Standing**
- [ ] [0001 — Authoring-surface overhaul](0001-authoring-surface-overhaul.md) (spacing audit + §3.8 prototype elements — live-review material)
- [ ] [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)
- [ ] 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.
- [ ] ⌘?/⌘/ 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.

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