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
38 changes: 0 additions & 38 deletions .github/workflows/test.yml

This file was deleted.

4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ git diff --check
corepack pnpm ui-patrol
```

Node 지원 범위는 `package.json#engines.node`가 authoritative하다. dependency update가 더 좁은 Node engine을 요구하면 package engine, README, CI 정책을 함께 검토하기 전에는 머지하지 않는다.
Node 지원 범위는 `package.json#engines.node`가 authoritative하다. dependency update가 더 좁은 Node engine을 요구하면 package engine, README, local gate 정책을 함께 검토하기 전에는 머지하지 않는다.

## Privacy And Local-First Invariants

Expand Down Expand Up @@ -92,5 +92,5 @@ Node 지원 범위는 `package.json#engines.node`가 authoritative하다. depend
- `main`은 보호 브랜치다. 새 브랜치에서 작업하고 PR로 머지한다.
- 커밋 메시지는 Conventional Commits를 따른다.
- 커밋 단위는 너무 잘게 쪼개지지 않게 한다. 하나의 PR은 "검증 가능한 행동 변화", "문서/의사결정 단위", "dependency update" 중 하나로 묶는다.
- solo-maintainer 단계에서는 PR이 CI `test (22)`, `test (24)`를 통과하고 unresolved conversation이 없으면 머지할 수 있다.
- solo-maintainer 단계에서는 focused tests와 local gate가 통과하고 unresolved conversation이 없으면 머지할 수 있다. 일반 PR/main test CI는 사용하지 않는다.
- 최종 보고에는 커밋 해시, 푸시 여부, 검증 결과, 남은 리스크를 짧게 포함한다.
2 changes: 1 addition & 1 deletion docs/AGENT-HARNESS.md
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ Use the narrowest relevant gate first, then broaden before PR.
| Web user-flow dogfood | `corepack pnpm dogfood:web-user-flow` and `docs/DOGFOOD_WEB_USER_FLOW_2026-07-05.md` |
| Plugin/packaging | `corepack pnpm pack:dry-run`, package contents tests |
| Instruction docs | `git diff --check`, packaging docs tests if shipped |
| Dependency update | CI `test (22)`, CI `test (24)`, engine compatibility review |
| Dependency update | local test/lint/build/pack gate, engine compatibility review |

Full gate before merge unless the change is docs-only and the risk is clearly
bounded:
Expand Down
22 changes: 21 additions & 1 deletion docs/NEXT_BACKLOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,17 @@ After the PromptLane product contract and first-screen metadata are aligned, the
next implementation work should favor reliability and agent-loop continuity
over more naming work.

Current integration policy:

- General PR/main test CI is removed. Use the local gate as the authoritative
release and merge signal: focused tests, `corepack pnpm test`,
`corepack pnpm lint`, `corepack pnpm build`, `corepack pnpm pack:dry-run`,
and slice-specific smoke/dogfood commands.
- Keep `.github/workflows/ui-patrol.yml` because scheduled browser screenshot
evidence is an external operational blocker, not a general CI gate.
- Do not re-add generic `test.yml` without a dedicated product decision that
explains what local-first risk it closes beyond the local gate.

Current goal audit:

- `docs/superpowers/specs/2026-07-05-promptlane-repositioning-design.md` maps
Expand Down Expand Up @@ -145,6 +156,10 @@ Current goal audit:
- `docs/RELEASE_STABILITY_EVIDENCE_2026-07-06.md` records current
`corepack pnpm smoke:release` and `corepack pnpm pack:dry-run` evidence for
the local-first release path.
- General PR/main test CI has been removed by maintainer decision. Release
stability is now judged by the local release gate and package evidence; the
scheduled `ui-patrol` workflow remains only for external operational
evidence.

Decision:

Expand All @@ -171,7 +186,7 @@ Decision:
- The 9.5 quality plan now includes an Evidence Progress Ledger with PR #417,
PR #419, PR #421, PR #425, PR #427, PR #429, PR #433, PR #447, PR #449,
PR #450, PR #457, PR #458, PR #460, PR #464, workflow_dispatch run
`28717406758`, latest main CI run `28750611089`,
`28717406758`, local release gate,
`docs/RELEASE_STABILITY_EVIDENCE_2026-07-06.md`, the missing `schedule`
event, and Remaining 9.5 blockers.
- `corepack pnpm evidence:quality` emits the machine-readable
Expand Down Expand Up @@ -244,6 +259,11 @@ Decision:
dogfood recommendations include preconditions, completion evidence, and
guardrails so agents can unblock the remaining 9.5 work without confusing
manual/readiness evidence with real external completion.
- The human `prompt-coach quality-evidence` summary now renders external
evidence status directly: scheduled patrol status, workflow, cron,
`next_expected_schedule_utc`, and native dialog approved-run requirement.
Agents no longer need to switch to JSON output just to decide when to re-check
the remaining external blockers.
- PR #478 moved that quality evidence gate onto the installed product CLI. Main
CI run `28753458359` passed Node 22 and Node 24 after merge, so `prompt-coach
quality-evidence --require-complete` is now a current default-branch release
Expand Down
2 changes: 1 addition & 1 deletion docs/PROMPTLANE.md
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ TDD execution rule for each slice:
- RED: add the narrowest failing test or packaging guard first.
- GREEN: make the smallest product-aligned change.
- VERIFY: run the focused test, then broaden to the repo gate.
- INTEGRATE: commit, push, PR, CI `test (22)` and `test (24)`, merge, and prune.
- INTEGRATE: commit, push, PR, local gate, review, merge, and prune.

## Autonomy Model

Expand Down
8 changes: 4 additions & 4 deletions docs/RELEASE_CHECKLIST.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,11 +123,11 @@ Confirm `corepack pnpm pack:dry-run` excludes:
- [ ] Benchmark v1 passes with `privacy_leak_count` equal to 0.
- [ ] Browser E2E passes on desktop and mobile viewport checks.

## CI
## Local Release Gate

- [ ] Node 22 CI passes.
- [ ] Node 24 CI passes.
- [ ] `better-sqlite3` opens a database and supports WAL/FTS5 in CI.
- [ ] Node support matches `package.json#engines.node`.
- [ ] `corepack pnpm test`, `lint`, `build`, and `pack:dry-run` pass locally.
- [ ] `better-sqlite3` opens a database and supports WAL/FTS5 in local smoke.
- [ ] Platform support notes are accurate for the release.

## Manual Smoke
Expand Down
13 changes: 8 additions & 5 deletions docs/RELEASE_STABILITY_EVIDENCE_2026-07-06.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,17 @@ separate blockers.
| `corepack pnpm smoke:release` | PASS | Built the package, initialized an isolated data directory and HOME, previewed Claude Code and Codex hook installers without touching real user config, started the local server, ingested Claude Code and Codex prompt fixtures, verified CLI list/search/show/rebuild-index, executed transcript import, verified imported-only filtering, previewed and executed anonymized export, then verified SQLite, Markdown, FTS, and delete cleanup. |
| `corepack pnpm pack:dry-run` | PASS | Built server and web assets, ran the package dry-run wrapper, and produced `prompt-coach-0.1.0-beta.0.tgz` with 344 files including this release evidence document. |

## CI
## Local Release Gate

- PR #464 added this evidence document, package manifest coverage, and the
release-stability packaging guard.
- main CI run `28750611089` passed `test (22)` and `test (24)` after PR #464
merged.
- Both jobs ran `pnpm test`, `pnpm lint`, `pnpm build`, and
`pnpm pack:dry-run`.
- The current local release gate is local-first: focused tests,
`corepack pnpm test`, `corepack pnpm lint`, `corepack pnpm build`,
`corepack pnpm pack:dry-run`, `corepack pnpm smoke:release`, and package
manifest guards.
- General PR/main test CI is not a release requirement. The scheduled
`ui-patrol.yml` workflow remains separate operational evidence for browser
screenshots.

## Privacy Observations

Expand Down
37 changes: 21 additions & 16 deletions docs/superpowers/plans/2026-07-05-promptlane-95-quality-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

**Architecture:** Treat 9.5 as a proof standard, not a slogan. Each score axis must have a measurable bar, current evidence, missing evidence, and one or more TDD slices that close the gap without changing the trust model. Keep `PromptLane` as product name and `prompt-coach` as runtime compatibility id until a dedicated migration proves otherwise.

**Tech Stack:** TypeScript, Node.js, Commander CLI, Fastify, SQLite, React/Vite, Vitest, Playwright, pnpm, GitHub Actions, Codex and Claude Code hooks/MCP/plugin surfaces.
**Tech Stack:** TypeScript, Node.js, Commander CLI, Fastify, SQLite, React/Vite, Vitest, Playwright, pnpm, Codex and Claude Code hooks/MCP/plugin surfaces. GitHub Actions is used only for scheduled `ui-patrol` operational evidence.

---

Expand All @@ -20,7 +20,7 @@
| Setup, doctor, and MCP smoke | 9.5/10 | 9.5 bar: setup and doctor smoke proves capture readiness; MCP smoke proves score/improve/clarify/record loop; failure states produce raw-free recovery actions instead of generic errors. | smoke:agent-setup, smoke:mcp-coach-loop, storage_unavailable tests, package checks. |
| Loop memory and continuation | 9.5/10 | 9.5 bar: collect, brief, outcome, memory candidate, memory approval, instruction patch proposal, and apply gate are proven through CLI and MCP with evidence-first rules and no automatic instruction writes. | Loop unit tests, storage evidence guards, dogfood:first-coach-loop, dogfood:loop-memory-approval, prompt-linked outcome evidence. |
| Web UI and operational evidence | 8.6/10 | 9.5 bar: archive, detail, coach, saved draft reuse, settings, loops, exports, projects, and mobile layout have screenshots or browser assertions, plus scheduled `ui-patrol` artifact evidence. | corepack pnpm ui-patrol, workflow_dispatch run `28717406758`, scheduled `ui-patrol`, browser E2E, screenshot artifacts, in-app Browser audit. |
| Release stability | 9.5/10 | 9.5 bar: Node 22 and 24 CI, pack dry-run, release smoke, first coach loop dogfood, package contents, dependency audit, and release checklist all agree on shipped files and commands. | GitHub Actions, corepack pnpm pack:dry-run, smoke:release, dogfood:first-coach-loop, dogfood:loop-memory-approval, docs/RELEASE_CHECKLIST.md. |
| Release stability | 9.5/10 | 9.5 bar: local supported-node gate, pack dry-run, release smoke, first coach loop dogfood, package contents, dependency audit, and release checklist all agree on shipped files and commands. | Local release gate, corepack pnpm pack:dry-run, smoke:release, dogfood:first-coach-loop, dogfood:loop-memory-approval, docs/RELEASE_CHECKLIST.md. |

## Evidence Progress Ledger

Expand Down Expand Up @@ -121,19 +121,21 @@
- `docs/RELEASE_STABILITY_EVIDENCE_2026-07-06.md` records current
`corepack pnpm smoke:release` and `corepack pnpm pack:dry-run` evidence for
the local-first release path.
- PR #464 closed the release-stability evidence log after local release smoke,
package dry-run, PR CI, latest main CI run `28750611089`, and branch pruning
proved the evidence document on the default branch.
- latest main CI run `28750611089` after PR #464 passed `test (22)` and
`test (24)` with `pnpm test`, `pnpm lint`, `pnpm build`, and
`pnpm pack:dry-run`.
- PR #464 added the release-stability evidence document and package manifest
guards. The local release gate now owns release stability evidence: focused tests,
`corepack pnpm test`, `corepack pnpm lint`, `corepack pnpm build`,
`corepack pnpm pack:dry-run`, `smoke:release`, and package manifest guards
prove the shipped files and commands.
- General test CI was removed by maintainer decision. Do not reintroduce
PR/main test workflows as a release-stability requirement without a dedicated
product decision; keep scheduled `ui-patrol` as the only GitHub Actions
workflow because it proves external operational evidence.
- PR #478 exposed the same 9.5 quality evidence as an installed product CLI:
`prompt-coach quality-evidence`, `prompt-coach quality-evidence --json`, and
`prompt-coach quality-evidence --require-complete`. The command lists every
current scorecard/direct evidence blocker, keeps output local and raw-free,
and exits nonzero while completion evidence remains pending. Main CI run
`28753458359` passed Node 22 and Node 24 after merge with `pnpm test`,
`pnpm lint`, `pnpm build`, and `pnpm pack:dry-run`.
and exits nonzero while completion evidence remains pending. Future changes
use the local gate instead of PR/main test CI.

## Remaining 9.5 blockers

Expand Down Expand Up @@ -245,10 +247,13 @@
completion evidence, and guardrails for the remaining external blockers. This
makes the next operator or scheduled-event pass executable without changing
the rule that 9.5 remains pending until real external evidence exists.
- PR #478 proved that installed CLI path on the default branch; main CI run
`28753458359` passed Node 22 and Node 24 after merge, so future agents can use
the product CLI itself to decide whether 9.5 is still blocked before claiming
completion.
- The human `prompt-coach quality-evidence` output also renders external
evidence status, including scheduled patrol cron and next expected UTC check
time plus the native dialog approved-run requirement, so normal CLI use can
drive the remaining external work without requiring JSON parsing.
- PR #478 proved that installed CLI path on the default branch, so future
agents can use the product CLI itself to decide whether 9.5 is still blocked
before claiming completion.
- Native OS ask UI dogfood remains operator-approved only; do not run
`dogfood:mcp-native-dialog-approved` without explicit approval because it can
open a native dialog.
Expand Down Expand Up @@ -485,4 +490,4 @@ Expected: pass.

## Completion Rule

Do not call the long-running goal complete until every scorecard axis has current evidence at the 9.5 bar. Passing unit tests alone is not enough; dogfood evidence, CI evidence, package evidence, and privacy evidence must match the axis being claimed.
Do not call the long-running goal complete until every scorecard axis has current evidence at the 9.5 bar. Passing unit tests alone is not enough; dogfood evidence, local gate evidence, package evidence, and privacy evidence must match the axis being claimed.
6 changes: 6 additions & 0 deletions scripts/quality-95-evidence.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import { readFileSync } from "node:fs";
const planPath =
"docs/superpowers/plans/2026-07-05-promptlane-95-quality-plan.md";
const nativeDialogAuditPath = "docs/NATIVE_DIALOG_DOGFOOD_AUDIT_2026-07-05.md";
const uiPatrolWorkflow = "ui-patrol.yml";
const uiPatrolScheduleCron = "17 6 * * 1";

const args = parseArgs(process.argv.slice(2));
const uiPatrol = args.uiPatrolJson
Expand Down Expand Up @@ -111,6 +113,8 @@ function runUiPatrolEvidence() {
return {
check: "scheduled_ui_patrol",
status: "unknown_checker_failed",
workflow: uiPatrolWorkflow,
schedule_cron: uiPatrolScheduleCron,
next_action: "Run corepack pnpm evidence:ui-patrol and inspect stderr.",
};
}
Expand All @@ -120,6 +124,8 @@ function runUiPatrolEvidence() {
return {
check: "scheduled_ui_patrol",
status: "unknown_invalid_checker_output",
workflow: uiPatrolWorkflow,
schedule_cron: uiPatrolScheduleCron,
next_action: "Fix scripts/ui-patrol-evidence.mjs JSON output.",
};
}
Expand Down
13 changes: 13 additions & 0 deletions src/cli/commands/quality-evidence.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,19 @@ describe("quality-evidence CLI command", () => {
expect(text).toContain("remaining=native_dialog_approved_dogfood");
expect(text).toContain("Scorecard review candidates");
expect(text).toContain("- none");
expect(text).toContain("External evidence status");
expect(text).toContain(
"scheduled_ui_patrol:",
);
expect(text).toContain(
"workflow=ui-patrol.yml cron=17 6 * * 1",
);
if (text.includes("pending_no_schedule_run")) {
expect(text).toContain("next_expected_schedule_utc=");
}
expect(text).toContain(
"native_dialog_approved_dogfood: pending_operator_approval approved_run_required=yes",
);
expect(text).toContain("scheduled_ui_patrol");
expect(text).toContain("native_dialog_approved_dogfood");
expect(text).toContain("Recommended next slices");
Expand Down
40 changes: 40 additions & 0 deletions src/cli/commands/quality-evidence.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,18 @@ type QualityEvidenceSummary = {
guardrails?: string[];
expected_effect: string;
}>;
evidence?: {
scheduled_ui_patrol?: {
status: string;
workflow?: string;
schedule_cron?: string;
next_expected_schedule_utc?: string;
};
native_dialog_approved_dogfood?: {
status: string;
approved_run_required?: boolean;
};
};
next_action: string;
};

Expand Down Expand Up @@ -139,6 +151,7 @@ function formatSummary(summary: QualityEvidenceSummary): string {
`- ${axis.id}: review=${axis.required_review} satisfied=${axis.satisfied_evidence.join(",") || "none"}`,
)
: ["- none"];
const externalEvidenceRows = formatExternalEvidenceRows(summary);

return [
"PromptLane 9.5 quality evidence",
Expand All @@ -155,6 +168,9 @@ function formatSummary(summary: QualityEvidenceSummary): string {
"Scorecard review candidates",
...scorecardReviewRows,
"",
"External evidence status",
...externalEvidenceRows,
"",
"Recommended next slices",
...recommendedRows,
"",
Expand All @@ -163,3 +179,27 @@ function formatSummary(summary: QualityEvidenceSummary): string {
"Privacy: local-only, no external calls, no prompt bodies, no raw paths.",
].join("\n");
}

function formatExternalEvidenceRows(summary: QualityEvidenceSummary): string[] {
const rows: string[] = [];
const scheduled = summary.evidence?.scheduled_ui_patrol;
if (scheduled) {
rows.push(
`- scheduled_ui_patrol: ${scheduled.status} workflow=${scheduled.workflow ?? "unknown"} cron=${scheduled.schedule_cron ?? "unknown"}`,
);
if (scheduled.next_expected_schedule_utc) {
rows.push(
` next_expected_schedule_utc=${scheduled.next_expected_schedule_utc}`,
);
}
}

const nativeDialog = summary.evidence?.native_dialog_approved_dogfood;
if (nativeDialog) {
rows.push(
`- native_dialog_approved_dogfood: ${nativeDialog.status} approved_run_required=${nativeDialog.approved_run_required ? "yes" : "no"}`,
);
}

return rows.length > 0 ? rows : ["- none"];
}
Loading