diff --git a/docs/NEXT_BACKLOG.md b/docs/NEXT_BACKLOG.md index c9370550..398950f3 100644 --- a/docs/NEXT_BACKLOG.md +++ b/docs/NEXT_BACKLOG.md @@ -216,6 +216,11 @@ Decision: `product_positioning_metadata_alignment`. Codex/Claude operator dogfood, web operations, scheduled `ui-patrol`, and native-dialog approved dogfood remain pending. + `docs/UI_PATROL_EVIDENCE_2026-07-06.md` records the current manual + workflow_dispatch artifact, local `corepack pnpm ui-patrol`, and + `dogfood:web-user-flow` browser evidence. `quality-evidence` records this as + `manual_ui_patrol_artifact_evidence`, but `scheduled_ui_patrol` remains + pending until a real cron `schedule` event exists. - 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 diff --git a/docs/UI_PATROL_EVIDENCE_2026-07-06.md b/docs/UI_PATROL_EVIDENCE_2026-07-06.md new file mode 100644 index 00000000..c33fa9dc --- /dev/null +++ b/docs/UI_PATROL_EVIDENCE_2026-07-06.md @@ -0,0 +1,29 @@ +# PromptLane UI Patrol Evidence 2026-07-06 + +This document records current UI patrol evidence for the PromptLane web +operations 9.5 quality bar. + +## Manual And Local Evidence + +| Evidence | Result | Details | +| --- | --- | --- | +| GitHub workflow_dispatch run `28717406758` | PASS | Uploaded the `ui-patrol-screenshots` artifact with 9 png files. | +| Local `corepack pnpm ui-patrol` | PASS | Captured 9 png files for archive, detail, dashboard, coach, projects, MCP, exports, settings desktop, and settings mobile. | +| `corepack pnpm dogfood:web-user-flow` | PASS | Completed the archive/detail/dashboard/coach/projects/mcp/exports/settings/mobile browser flow with `browser e2e passed`. | + +## Remaining Scheduled Evidence + +This evidence does not complete the scheduled `ui-patrol` blocker. + +`corepack pnpm evidence:ui-patrol` still reports +`pending_no_schedule_run` because the current workflow history has no real +`schedule` event. The checker must continue to require a scheduled run with a +`ui-patrol-screenshots` artifact containing 9 png files before returning +`complete`. + +## Interpretation + +The web operations axis has current manual and local browser evidence, but it +remains blocked externally until the scheduled cron event exists. `quality-evidence` +records the proven non-scheduled portion as `manual_ui_patrol_artifact_evidence` +and keeps `scheduled_ui_patrol` in remaining evidence. diff --git a/docs/superpowers/plans/2026-07-05-promptlane-95-quality-plan.md b/docs/superpowers/plans/2026-07-05-promptlane-95-quality-plan.md index ef7f1391..33f39db4 100644 --- a/docs/superpowers/plans/2026-07-05-promptlane-95-quality-plan.md +++ b/docs/superpowers/plans/2026-07-05-promptlane-95-quality-plan.md @@ -216,6 +216,12 @@ while keeping `prompt-coach` as the compatibility runtime ID. `quality-evidence` records this as `product_positioning_metadata_alignment`. +- `docs/UI_PATROL_EVIDENCE_2026-07-06.md` records current non-scheduled web + operations evidence: workflow_dispatch run `28717406758`, the + `ui-patrol-screenshots` artifact with 9 png files, local + `corepack pnpm ui-patrol`, and `dogfood:web-user-flow`. `quality-evidence` + records this as `manual_ui_patrol_artifact_evidence` while keeping + `scheduled_ui_patrol` pending until a real cron `schedule` event 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 diff --git a/package.json b/package.json index 72175386..12eac1a8 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,7 @@ "docs/RELEASE_STABILITY_EVIDENCE_2026-07-06.md", "docs/LOCAL_95_EVIDENCE_2026-07-06.md", "docs/PRODUCT_POSITIONING_EVIDENCE_2026-07-06.md", + "docs/UI_PATROL_EVIDENCE_2026-07-06.md", "docs/RELEASE_CHECKLIST.md", "plugins", "integrations", diff --git a/scripts/quality-95-evidence.mjs b/scripts/quality-95-evidence.mjs index efdc1871..22b4a3c0 100644 --- a/scripts/quality-95-evidence.mjs +++ b/scripts/quality-95-evidence.mjs @@ -171,6 +171,7 @@ function readCompletedEvidence() { let codexPlugin = ""; let claudePlugin = ""; let claudeMarketplace = ""; + let uiPatrolEvidence = ""; try { plan = readFileSync(planPath, "utf8"); localEvidence = readFileSync("docs/LOCAL_95_EVIDENCE_2026-07-06.md", "utf8"); @@ -187,9 +188,14 @@ function readCompletedEvidence() { ); claudePlugin = readFileSync(".claude-plugin/plugin.json", "utf8"); claudeMarketplace = readFileSync(".claude-plugin/marketplace.json", "utf8"); + uiPatrolEvidence = readFileSync( + "docs/UI_PATROL_EVIDENCE_2026-07-06.md", + "utf8", + ); } catch { return { product_positioning_metadata_alignment: false, + manual_ui_patrol_artifact_evidence: false, web_user_flow_current_main_evidence: false, privacy_raw_free_regression_sweep: false, codex_claude_setup_smoke_refresh: false, @@ -215,6 +221,13 @@ function readCompletedEvidence() { codexPlugin.includes("loop-aware continuation") && claudePlugin.includes("PromptLane is a local-first prompt improvement workspace") && claudeMarketplace.includes("PromptLane is a local-first prompt improvement workspace"), + manual_ui_patrol_artifact_evidence: + uiPatrolEvidence.includes("workflow_dispatch run `28717406758`") && + uiPatrolEvidence.includes("ui-patrol-screenshots") && + uiPatrolEvidence.includes("9 png files") && + uiPatrolEvidence.includes("Local `corepack pnpm ui-patrol`") && + uiPatrolEvidence.includes("pending_no_schedule_run") && + uiPatrolEvidence.includes("manual_ui_patrol_artifact_evidence"), web_user_flow_current_main_evidence: plan.includes("web_user_flow_current_main_evidence") && plan.includes("corepack pnpm dogfood:web-user-flow") && @@ -267,6 +280,12 @@ function axisEvidenceCoverage({ ) { satisfied.push("web_user_flow_current_main_evidence"); } + if ( + axis.id === "web_ui_and_operational_evidence" && + completedEvidence.manual_ui_patrol_artifact_evidence + ) { + satisfied.push("manual_ui_patrol_artifact_evidence"); + } if ( axis.id === "local_first_privacy_boundary" && completedEvidence.privacy_raw_free_regression_sweep diff --git a/src/cli/commands/quality-evidence.test.ts b/src/cli/commands/quality-evidence.test.ts index 9c84f0cd..831e8855 100644 --- a/src/cli/commands/quality-evidence.test.ts +++ b/src/cli/commands/quality-evidence.test.ts @@ -85,6 +85,7 @@ describe("quality-evidence CLI command", () => { status: "blocked_external", satisfied_evidence: expect.arrayContaining([ "web_user_flow_current_main_evidence", + "manual_ui_patrol_artifact_evidence", ]), remaining_evidence: expect.arrayContaining([ "scheduled_ui_patrol", @@ -161,7 +162,9 @@ describe("quality-evidence CLI command", () => { expect(text).toContain( "web_ui_and_operational_evidence: blocked_external", ); - expect(text).toContain("satisfied=web_user_flow_current_main_evidence"); + expect(text).toContain( + "satisfied=web_user_flow_current_main_evidence,manual_ui_patrol_artifact_evidence", + ); expect(text).toContain("remaining=scheduled_ui_patrol"); expect(text).toContain( "codex_and_claude_code_integration: blocked_external", diff --git a/src/packaging/plugin-files.test.ts b/src/packaging/plugin-files.test.ts index 889e3bb1..fdb07663 100644 --- a/src/packaging/plugin-files.test.ts +++ b/src/packaging/plugin-files.test.ts @@ -945,6 +945,9 @@ describe("plugin packaging files", () => { expect(packageJson.files).toContain( "docs/PRODUCT_POSITIONING_EVIDENCE_2026-07-06.md", ); + expect(packageJson.files).toContain( + "docs/UI_PATROL_EVIDENCE_2026-07-06.md", + ); expect(packageJson.scripts["evidence:quality"]).toBe( "node scripts/quality-95-evidence.mjs", ); @@ -968,6 +971,7 @@ describe("plugin packaging files", () => { expect(content).toContain( "docs/PRODUCT_POSITIONING_EVIDENCE_2026-07-06.md", ); + expect(content).toContain("docs/UI_PATROL_EVIDENCE_2026-07-06.md"); expect(content).toContain("PR #478"); expect(content).toContain("28753458359"); expect(content).toContain("corepack pnpm evidence:quality"); @@ -980,6 +984,7 @@ describe("plugin packaging files", () => { expect(content).toContain("recommended_next_slices"); expect(content).toContain("blocked_by_external_event"); expect(content).toContain("product_positioning_metadata_alignment"); + expect(content).toContain("manual_ui_patrol_artifact_evidence"); expect(content).toContain("local-first privacy boundary"); expect(content).toContain("setup/doctor/MCP smoke"); expect(content).toContain("loop memory"); @@ -1040,6 +1045,8 @@ describe("plugin packaging files", () => { expect(evidenceScript).toContain("readCompletedEvidence"); expect(evidenceScript).toContain("product_positioning_metadata_alignment"); expect(evidenceScript).toContain("PRODUCT_POSITIONING_EVIDENCE_2026-07-06"); + expect(evidenceScript).toContain("manual_ui_patrol_artifact_evidence"); + expect(evidenceScript).toContain("UI_PATROL_EVIDENCE_2026-07-06"); expect(evidenceScript).toContain("web_user_flow_current_main_evidence"); expect(evidenceScript).toContain("browser e2e passed"); expect(evidenceScript).toContain("privacy_raw_free_regression_sweep"); diff --git a/src/packaging/quality-evidence-script.test.ts b/src/packaging/quality-evidence-script.test.ts index a048a2ac..a01f930c 100644 --- a/src/packaging/quality-evidence-script.test.ts +++ b/src/packaging/quality-evidence-script.test.ts @@ -186,6 +186,7 @@ describe("quality 9.5 evidence script", () => { status: "blocked_external", satisfied_evidence: expect.arrayContaining([ "web_user_flow_current_main_evidence", + "manual_ui_patrol_artifact_evidence", ]), remaining_evidence: expect.arrayContaining([ "scheduled_ui_patrol", diff --git a/tasks/todo.md b/tasks/todo.md index 91e51020..16f1bc6d 100644 --- a/tasks/todo.md +++ b/tasks/todo.md @@ -1,5 +1,28 @@ # 작업 계획 +## 2026-07-06 PromptLane Web Operations Evidence Split + +- [x] CHECK: GitHub `ui-patrol.yml` still has only workflow_dispatch runs and + no real `schedule` event, so scheduled `ui-patrol` cannot be completed. +- [x] RED: quality evidence CLI/script tests required + `web_ui_and_operational_evidence` to include + `manual_ui_patrol_artifact_evidence` while still keeping + `scheduled_ui_patrol` and `scorecard_level_below_9_5` as remaining evidence; + tests failed while only `web_user_flow_current_main_evidence` was satisfied. +- [x] GREEN: `docs/UI_PATROL_EVIDENCE_2026-07-06.md` records manual + workflow_dispatch artifact, local UI patrol, and web-user-flow evidence, and + `quality-evidence` now exposes that non-scheduled web proof separately. +- [x] EFFECT: web operations evidence is more accurate without claiming the + scheduled cron blocker is complete. + +### 판단 기준 + +- Do not mark scheduled `ui-patrol` complete without a real `schedule` event. +- Do not promote web operations to 9.5 while scheduled evidence remains + pending. +- Keep manual/local browser evidence visible so agents do not rerun stale local + work unnecessarily. + ## 2026-07-06 PromptLane Product Positioning Evidence - [x] CHECK: GitHub repository metadata, README copy, package metadata, Codex