diff --git a/.cursor-plugin/plugin.json b/.cursor-plugin/plugin.json index 83cf686..8edeeee 100644 --- a/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugin.json @@ -15,10 +15,10 @@ "anti-slop" ], "license": "PolyForm-Noncommercial-1.0.0", - "version": "5.2.0", + "version": "5.2.1", "homepage": "https://github.com/agent-kit-startup/agent-kit", "repository": "https://github.com/agent-kit-startup/agent-kit", - "logo": "dashboard/logo.svg", + "logo": "dashboard/logo-marketplace.svg", "rules": ".cursor/rules", "skills": ".cursor/skills/core", "agents": ".cursor/agents", diff --git a/.cursor/agent-kit.json b/.cursor/agent-kit.json index a76124a..d9af3cf 100644 --- a/.cursor/agent-kit.json +++ b/.cursor/agent-kit.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "version": "5.2.0", + "version": "5.2.1", "protected": [ ".cursor/HANDOFF.md", ".cursor/agents/test-suites.md", diff --git a/.cursor/commands/plan-external-review.md b/.cursor/commands/plan-external-review.md index 8b8a79b..aa5a580 100644 --- a/.cursor/commands/plan-external-review.md +++ b/.cursor/commands/plan-external-review.md @@ -128,7 +128,7 @@ Same contract as `.cursor/context/templates/plan-external-review-prompt.md` (Cla This command does **not** require Ask questions to launch Claude. -After a successful autonomous arm in chat, **do not** hand off with "run `/plan-review-triage` later". Wait for the monitor file, then run `/plan-review-triage` Ask in the same session (explicit monitor path(s) preferred). Paste-only: wait starts after the operator pastes and Claude is writing. Bare `/plan-review-triage` selects untriaged / git-fresh monitors, but path paste remains the reliable post-batch path. For **multiple** fresh paths (batch arm or Field Report **Review all**), paste the full path list once; `/plan-review-triage` uses **one** Ask when outcomes are uniform (durable heading on every file) and sequential Asks when mixed — do not tell the operator to "reply N times". That command summarizes residuals and offers options (write residuals plan / fix nits only / ack and stop) via Ask questions. Do not auto-implement from Claude findings without HITL. If no `plan-monitor-*.md` exists after timeout/soft-fail, say so and stop (nothing to triage; Field Report owed). +After a successful autonomous arm in chat, **do not** hand off with "run `/plan-review-triage` later". Wait for the monitor file, then run `/plan-review-triage` Ask in the same session (explicit monitor path(s) preferred). Paste-only: wait starts after the operator pastes and Claude is writing. Bare `/plan-review-triage` selects untriaged / git-fresh monitors, but path paste remains the reliable post-batch path. For **multiple** fresh paths (batch arm or `/run-plan-all` queue-end), paste the full path list once; `/plan-review-triage` uses **one** Ask when outcomes are uniform (durable heading on every file) and sequential Asks when mixed. Do not tell the operator to "reply N times". That command summarizes residuals and offers options (write residuals plan / fix nits only / ack and stop) via Ask questions. Do not auto-implement from Claude findings without HITL. If no `plan-monitor-*.md` exists after timeout/soft-fail, say so and stop (nothing to triage). There is no `/field-report-review` command and no Mission Control **Review all** button. ## References diff --git a/.cursor/commands/plan-review-triage.md b/.cursor/commands/plan-review-triage.md index c04e33f..c5d2812 100644 --- a/.cursor/commands/plan-review-triage.md +++ b/.cursor/commands/plan-review-triage.md @@ -9,7 +9,7 @@ description: Triage residuals from an external plan review monitor and guide nex Triage residuals from a **Claude external plan review** monitor. Select the right monitor(s) (untriaged / explicit paths, **not** raw mtime), summarize open residuals, and guide next steps with **Ask questions**. -Supports **multi-path walk**: iterate multiple monitors in blocking-first then debt order when given several report paths (for example from Field Report **Review all**, or the path list printed by `/plan-external-review` after a batch). When remaining monitors share a **uniform** outcome class, use **one** batch Ask (still write a durable triage heading on every target). Mixed outcomes fall back to sequential Asks. Operator may expand Write residuals to the whole remaining set in one reply (`1 and write all the other`); enqueue via paced per-monitor Tasks (wave size 2) or one combined plan (see Step 6). +Supports **multi-path walk**: iterate multiple monitors in blocking-first then debt order when given several report paths (for example the path list printed by `/plan-external-review` after a batch, or a Flight Log **Copy triage command** paste). When remaining monitors share a **uniform** outcome class, use **one** batch Ask (still write a durable triage heading on every target). Mixed outcomes fall back to sequential Asks. Operator may expand Write residuals to the whole remaining set in one reply (`1 and write all the other`); enqueue via paced per-monitor Tasks (wave size 2) or one combined plan (see Step 6). ## When to Use @@ -30,7 +30,7 @@ Multi-path (preferred after a fresh external review; walk specific monitors in o /plan-review-triage .cursor/memory/plan-monitor-slug-1.md .cursor/memory/plan-monitor-slug-2.md ``` -When paths are provided, the agent walks them in the given order (blocking first, then debt when auto-ordered by **Review all**). After gap-aware skip, if two or more monitors still need a decision and share a **uniform** outcome class, use **one** Ask for the set (batch Ack or one residuals summary); otherwise Ask **per** monitor. Every decided monitor still gets its own durable triage heading. +When paths are provided, the agent walks them in the given order (blocking first, then debt when auto-ordered). After gap-aware skip, if two or more monitors still need a decision and share a **uniform** outcome class, use **one** Ask for the set (batch Ack or one residuals summary); otherwise Ask **per** monitor. Every decided monitor still gets its own durable triage heading. **Do not rely on bare `/plan-review-triage` after a batch external review** when the launcher (or Claude closeout) already printed explicit monitor paths: paste that path list so triage cannot miss the files just written. @@ -44,7 +44,7 @@ Before Asking on a path, skip with a **one-line note** (do not abort the walk) w | No open gaps (empty Still open / no residual items / clean Outcome) | `Skip plan-monitor-x.md: no open residuals` | | Path missing or not a `plan-monitor-*.md` under `.cursor/memory/` | `Skip : not a monitor file` | -Field Report **Review all** already pastes a gap-filtered path list; the skip rules above are defensive for hand-built multi-path lists. Per-row **Copy triage command** remains available for intentional one-monitor triage of a clean or already-visible row. +The skip rules above are defensive for hand-built multi-path lists. Flight Log per-row **Copy triage command** remains available for intentional one-monitor triage of a clean or already-visible row. There is no `/field-report-review` command and no Mission Control **Review all** button. ## Preconditions @@ -55,7 +55,7 @@ Field Report **Review all** already pastes a gap-filtered path list; the skip ru If no `plan-monitor-*.md` exists (and no paths given), say so once, suggest `/plan-external-review` after prefight files exist, and **stop**. Do not invent residuals. -If monitors exist but **all** are already triaged (and none are new/staged without a heading), say so once, suggest Field Report **Review all** or `/plan-external-review` if new reviews are owed, and **stop**. Do not invent residuals from an already-acked file. +If monitors exist but **all** are already triaged (and none are new/staged without a heading), say so once, suggest `/plan-external-review` if a new review is owed, and **stop**. Do not invent residuals from an already-acked file. Do not suggest Field Report **Review all** or `/field-report-review`: neither exists. ## What to Do @@ -78,7 +78,7 @@ Use the returned `monitors[].relativePath` list as the walk order. Cite: ADR `20 3. **Untriaged scan:** all `.cursor/memory/plan-monitor-*.md` without a triage heading. Prefer those with open gaps (numbered Residual items, non-empty Still open, substantive Standing finding; same spirit as Field Report `reportHasOpenReviewGaps`), but still include clean untriaged files so the operator can **Ack and stop**. If several match, walk them (blocking/debt order when obvious; otherwise newest **content** review date, then mtime as a weak tie-break only). 4. **Hard stop:** if every candidate is already triaged, report "no untriaged monitors" and stop. Do **not** Ask on an already-triaged file just because its mtime is newest. -**Gap-aware skip** (empty Still open / no residual items) applies to **explicit multi-path** lists (e.g. Field Report **Review all**). Bare-command selection above does **not** skip clean untriaged monitors: they still need a durable triage heading. +**Gap-aware skip** (empty Still open / no residual items) applies to **explicit multi-path** lists (launcher-printed paths or hand-built lists). Bare-command selection above does **not** skip clean untriaged monitors: they still need a durable triage heading. **Then read the selected set:** @@ -97,7 +97,7 @@ When one path is selected, continue with Steps 2-5. When several are selected, u When **paths provided**: -1. Treat paths as an ordered list: blocking paths first, debt paths second (same order as the **Review all** copy target). +1. Treat paths as an ordered list: blocking paths first, debt paths second (Field Report classification order). 2. For each path, apply **Gap-aware skip** (above). Only remaining gap monitors get a Task(explore) dispatch (or batch them in one worker if multiple paths). 3. **Fallback:** when Task dispatch is unavailable, verify each path is an existing file under `.cursor/memory/` matching `plan-monitor-*.md`. Non-existent, non-monitor, already-triaged, or no-open-residual paths are skipped with a one-line note; the walk continues. 4. Read the worker summary for each path that was not skipped. diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a14a2b..71997c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,18 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and ## [Unreleased] +## [5.2.1] - 2026-08-14 + +### Changed + +- Marketplace SoT no longer claims the public plugin manifest is **4.8.9** / metadata-only. Public `.cursor-plugin/plugin.json` is **5.2.0** with explicit component paths; live Cursor Marketplace submission stays publisher HITL and unchecked (`docs/marketplace.md`, `docs/cursor-update-awareness.md`, `docs/comms-channel-map.md`, `docs/cursor-native-audit.md`). +- Marketplace / plugin logotype is `dashboard/logo-marketplace.svg`: 512×512 (1:1) SVG, transparent square canvas, rounded `#0b0e14` plate, Cursor-skin stroke mark centered. Mission Control chrome still uses unplated `dashboard/logo.svg` (legacy) and `dashboard/logo-cursor.svg` (Cursor skin). +- Production also versions the Mission Control logo marks (helmet, cursor-skin, marketplace plate) under `assets/production/` (private; not public-synced). + +### Fixed + +- `/plan-review-triage` no longer tells agents to suggest Field Report **Review all** or `/field-report-review` when every monitor is already triaged. Next step is `/plan-external-review` if a new review is owed, or a Flight Log **Copy triage command** paste. There is no `/field-report-review` slash command and no Mission Control **Review all** button. + ## [5.2.0] - 2026-08-14 ### Added diff --git a/dashboard/logo-marketplace.svg b/dashboard/logo-marketplace.svg new file mode 100644 index 0000000..ebcabe1 --- /dev/null +++ b/dashboard/logo-marketplace.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/comms-channel-map.md b/docs/comms-channel-map.md index 7f2d959..2f881d9 100644 --- a/docs/comms-channel-map.md +++ b/docs/comms-channel-map.md @@ -27,7 +27,7 @@ Do not market unchecked full autonomy. Staging may be automatic; production (`/g | GitHub Discussions | - | - | **never** (until enabled) | [SUPPORT.md](../.github/SUPPORT.md) states Discussions is not enabled; issues are the support channel | Do not invent a Discussions presence | | Slack | Low | Med | **defer** | No official Mission Kit Slack is documented in this repo | Do not create or post until an operator-owned workspace exists | | Discord | Low | Med | **defer** | Same as Slack | Same | -| Cursor Marketplace listing | - | - | **never** (this loop) | Distribution channel owned by parked `submit-cursor-marketplace` | Reference only; no submit from this plan | +| Cursor Marketplace listing | - | - | **never** (this loop) | Distribution channel owned by `submit-cursor-marketplace` (publisher HITL; public manifest **5.2.0**) | Reference only; no submit from a comms plan | **Never:** paid ads as the first delivery; scraping PII into recaps; silent cross-network posting; renaming npm/CLI/slash to Mission Kit; overloading Agent Personas as the poster. diff --git a/docs/cursor-native-audit.md b/docs/cursor-native-audit.md index 3e513af..c1b01ba 100644 --- a/docs/cursor-native-audit.md +++ b/docs/cursor-native-audit.md @@ -14,7 +14,7 @@ Audit of Cursor-specific artifacts in the Agent Kit repository: what exists, wha | `.cursor/commands/` | Present (27 commands) | DevOps spine + handoff + orchestration + backlog/dashboard | | `.cursor/hooks/` (shell) | Present | Git pre-commit + edit validators; not wired to Cursor agent events | | `.cursor/hooks.json` | **Present (L0)** | 5 events (`sessionStart`, `preCompact`, `beforeShellExecution`, `afterFileEdit`, `beforeSubmitPrompt`); no `stop` hook | -| `.cursor-plugin/plugin.json` | Present | Marketplace-ready at **5.2.0**, aligned with product; declares explicit component paths | +| `.cursor-plugin/plugin.json` | Present | Marketplace-ready at **5.2.1**, aligned with product; declares explicit component paths | | `git-hooks/prepare-commit-msg` | Present | Strips Cursor co-author trailer | | `AGENTS.md` (dogfood) | **Present** | Root cross-IDE contract; points at `.cursor/project-context.md` | | `mcp.json` | Absent | No project-level MCP config in core | @@ -28,7 +28,7 @@ Audit of Cursor-specific artifacts in the Agent Kit repository: what exists, wha | Field | Value | |-------|-------| | name | `agent-kit` | -| version | `5.2.0` (pinned to `KIT_VERSION` by `packages/cli/src/lifecycle/l0.test.ts`) | +| version | `5.2.1` (pinned to `KIT_VERSION` by `packages/cli/src/lifecycle/l0.test.ts`) | | description | HITL framework for AI-assisted IDEs (plan, handoff, staging→prod, memory loop, anti-slop) | | components | `rules`, `skills`, `agents`, `commands`, `hooks` declared explicitly | @@ -39,7 +39,7 @@ Audit of Cursor-specific artifacts in the Agent Kit repository: what exists, wha - `skills` points at `.cursor/skills/core`, not `.cursor/skills`: discovery matches direct children holding a `SKILL.md`, and `core/`/`community/` are one level too shallow. This also keeps stack skills on `agent-kit add`. - CLI `init` does **not** write `.cursor-plugin/plugin.json` into target projects; no generator under `packages/cli/src/generator/` references it. (Corrected 2026-08-05; the earlier claim was stale.) -**Gap:** Plugin packaging and Marketplace submission flow are not documented end-to-end in `docs/getting-started.md`. See [marketplace.md](marketplace.md) and Phase B registry cutover plan. Live submission stays publisher HITL and is gated on the public mirror carrying the 5.2.0 manifest. +**Gap:** Plugin packaging and Marketplace submission flow are not documented end-to-end in `docs/getting-started.md`. See [marketplace.md](marketplace.md) and Phase B registry cutover plan. Live submission stays publisher HITL. The public mirror already carries the **5.2.1** manifest with explicit component paths. --- diff --git a/docs/cursor-update-awareness.md b/docs/cursor-update-awareness.md index 9763a26..654fc2a 100644 --- a/docs/cursor-update-awareness.md +++ b/docs/cursor-update-awareness.md @@ -11,7 +11,7 @@ Opt-in advisory for Cursor product updates (releases, changelog entries, new MCP | No Field Reports | `fieldReportRecommended` is always `false` | | Conveyor | Confirmed gaps → Ask → `/backlog-add` or `/dogfood` (lane-aware) | | Separate from kit update | Kit self-release uses `updateCheck` / `/update` (ADR `2026-07-27_consumer-autoupdate-check-opt-in.md`) | -| Native-audit prose | Marketplace / version-prose refresh stays on parked `submit-cursor-marketplace` | +| Native-audit prose | Native-audit plugin version is **5.2.0**. Live Marketplace submission stays on `submit-cursor-marketplace` (publisher HITL) | ## Detection source diff --git a/docs/marketplace.md b/docs/marketplace.md index 0ac1240..77170e0 100644 --- a/docs/marketplace.md +++ b/docs/marketplace.md @@ -71,7 +71,7 @@ The plugin root is the **parent of `.cursor-plugin/`** - the repo root. Cursor's | `agents` | `.cursor/agents` | 14 subagent definitions | | `commands` | `.cursor/commands` | 27 slash commands | | `hooks` | `.cursor/hooks.json` | Thin adapters; every one is fail-open, and `sessionStart` surfaces the degraded-mode diagnostic (see "Hook resolution boundary" below) | -| `logo` | `dashboard/logo.svg` | Must sit on a path inside `scripts/public-sync.manifest`. `assets/**` is **not** synced and would be dropped from the public mirror without failing anything | +| `logo` | `dashboard/logo-marketplace.svg` | 512×512 SVG (1:1), transparent canvas, rounded plate `#0b0e14`, Cursor-skin stroke mark from `logo-cursor.svg` centered (~10% padding). Chrome keeps unplated `logo.svg` (legacy helmet) and `logo-cursor.svg` (16px header). Must sit on a path inside `scripts/public-sync.manifest`. `assets/**` is **not** synced and would be dropped from the public mirror without failing anything. Production copies of the three marks live under `assets/production/` (private; not public-synced) | #### Hook resolution boundary @@ -96,7 +96,7 @@ The promotion path is ready only when the evidence gate is green; each step belo 1. **Evidence gate green:** `npm run evidence:knowledge-classification:check` passes on the staging tip being promoted. The shared ledger (`docs/evidence/knowledge-classification.json`) has **one regeneration owner** — the ship-5.0 evidence closeout (clean-tree regen guard + regen shipped in the PR #719–#725 stack). Marketplace-side plans record the dependency and never regenerate the ledger themselves. Note: the check recomputes from the working tree, so uncommitted `_index.md` rows pointing at untracked `plan-monitor-*.md` files fail it locally; verify at committed HEAD content (e.g. a clean worktree) when audit WIP is present. 2. **Merge pending staging PRs** in stack order (operator merge gate). 3. **`/git-prod`** (never agent-initiated) → annotated `vX.Y.Z` tag → `sync-public` PR, per the submission checklist above. -4. **Public mirror recheck:** verify the public repo exposes `.cursor-plugin/plugin.json` at the released version with explicit component paths — owned by the parked `submit-cursor-marketplace.plan.md` (`recheck-public-mirror`), alongside the publisher HITL submission gate. +4. **Public mirror recheck:** verify the public repo exposes `.cursor-plugin/plugin.json` at the released version with explicit component paths. Owned by `submit-cursor-marketplace.plan.md` (`recheck-public-mirror`), alongside the publisher HITL submission gate. Rechecked 2026-08-14: public manifest is **5.2.0** with explicit `rules` / `skills` / `agents` / `commands` / `hooks`. 5. **Post-promote plugin smoke:** rerun the local-plugin smoke checklist ([plugin-smoke-checklist.md](plugin-smoke-checklist.md)) against the public ref before submitting. ## Listing UX (CLI) @@ -117,5 +117,5 @@ Future nicety (not required for this to-do): `agent-kit search ` over `re - [x] Builder emits version/category into `registry.json` - [x] CONTRIBUTING quality gate documented - [x] This marketplace doc + plugin.json thesis/version note -- [ ] Live Cursor Marketplace submission (publisher ops / HITL) - packaging ready at **5.0.0**; blocked on promoting that manifest to the public mirror (still **4.8.9**) +- [ ] Live Cursor Marketplace submission (publisher ops / HITL) - packaging ready at **5.2.0** on the public mirror (explicit component paths). Submit remains operator HITL; this box stays unchecked until a real submission. - [x] Phase B cutover so public catalog is not overwritten by private sync diff --git a/install.md b/install.md index c037f1e..5ba5aa0 100644 --- a/install.md +++ b/install.md @@ -154,7 +154,7 @@ Create if it doesn't exist (adjust `version` / `registry` to current SoT): ```json { "schemaVersion": 1, - "version": "5.2.0", + "version": "5.2.1", "profile": "default", "packs": [], "skills": [], diff --git a/package.json b/package.json index 0695689..d66ed4f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "agent-kit", - "version": "5.2.0", + "version": "5.2.1", "description": "HITL framework for AI-assisted IDEs: plan, handoff, staging-to-prod, memory loop; project-aware setup for Cursor, VS Code, and Windsurf.", "private": true, "license": "PolyForm-Noncommercial-1.0.0", diff --git a/packages/cli/package.json b/packages/cli/package.json index e217ec6..01823d2 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@dadado/agent-kit-cli", - "version": "5.2.0", + "version": "5.2.1", "description": "Agent Kit CLI: HITL framework install and tooling for AI-assisted IDEs (rules, skills, plan/handoff, context).", "license": "PolyForm-Noncommercial-1.0.0", "type": "module", diff --git a/packages/cli/src/dashboard/external-reports.test.ts b/packages/cli/src/dashboard/external-reports.test.ts index 215a989..2525eb2 100644 --- a/packages/cli/src/dashboard/external-reports.test.ts +++ b/packages/cli/src/dashboard/external-reports.test.ts @@ -200,6 +200,19 @@ describe("/plan-review-triage triage heading contract", () => { /Broad Intake[\s\S]*Write plan to backlog[\s\S]*Modify proposal first[\s\S]*Cancel/i, ); }); + + it("does not offer retired Review all or /field-report-review as a next step", () => { + expect(planReviewTriageCmd).not.toMatch( + /suggest Field Report \*\*Review all\*\* or `\/plan-external-review`/, + ); + expect(planReviewTriageCmd).toContain( + "Do not suggest Field Report **Review all** or `/field-report-review`: neither exists.", + ); + expect(planReviewTriageCmd).toContain("There is no `/field-report-review` command"); + expect(planReviewTriageCmd).toContain( + "suggest `/plan-external-review` if a new review is owed", + ); + }); }); describe("isReportTriaged", () => { diff --git a/packages/cli/src/lifecycle/overlay-known-hashes.ts b/packages/cli/src/lifecycle/overlay-known-hashes.ts index d47b187..070ef8b 100644 --- a/packages/cli/src/lifecycle/overlay-known-hashes.ts +++ b/packages/cli/src/lifecycle/overlay-known-hashes.ts @@ -132,4 +132,6 @@ export const KNOWN_SHIPPED_OVERLAY_HASHES: ReadonlySet = new Set([ "fc39ec6d8a22498697f968ffc0fe5f717bed97afd68f922c76a80ed1f10d6579", "a8756742197c3a2e1a6d64f4bde2a88db48abb66a0f449d625cd2e1c7b8d0cb4", "6a5f8795a4a26b419f167e249576b798781c95308dc1ea50958351de713231d4", + "4009c5e2faf9775d5708cdff0b5f9da80fd3ce390cc42aed0bb94272f6b05b1b", + "a8e070fae187908ef7b2cf2a41605e3079329403b1802b5fc67e83294c96a070", ]);