From 2cf1707b6eb3877d850fe16922cee5be2fa12f95 Mon Sep 17 00:00:00 2001 From: stark Date: Mon, 6 Jul 2026 06:52:33 +0900 Subject: [PATCH] docs: add native dialog preflight evidence --- .../NATIVE_DIALOG_DOGFOOD_AUDIT_2026-07-05.md | 6 ++++ docs/NEXT_BACKLOG.md | 4 +++ .../2026-07-05-promptlane-95-quality-plan.md | 3 ++ package.json | 1 + scripts/quality-95-evidence.mjs | 16 ++++++++++ src/cli/commands/quality-evidence.test.ts | 3 +- src/packaging/plugin-files.test.ts | 30 +++++++++++++++++++ src/packaging/quality-evidence-script.test.ts | 1 + tasks/todo.md | 24 +++++++++++++++ 9 files changed, 87 insertions(+), 1 deletion(-) diff --git a/docs/NATIVE_DIALOG_DOGFOOD_AUDIT_2026-07-05.md b/docs/NATIVE_DIALOG_DOGFOOD_AUDIT_2026-07-05.md index 090b135e..44921742 100644 --- a/docs/NATIVE_DIALOG_DOGFOOD_AUDIT_2026-07-05.md +++ b/docs/NATIVE_DIALOG_DOGFOOD_AUDIT_2026-07-05.md @@ -13,6 +13,12 @@ requires operator approval before doing that. The evidence below proves the MCP elicitation path and the metadata-only fallback path, and it confirms the native dialog fallback remains opt-in. +`quality-evidence` records this audit as pending native_dialog_preflight evidence. +It does not complete `native_dialog_approved_dogfood`; only an explicitly +approved local run of +`PROMPT_COACH_NATIVE_DIALOG_APPROVED=1 corepack pnpm +dogfood:mcp-native-dialog-approved` can do that. + ## Commands Run ```bash diff --git a/docs/NEXT_BACKLOG.md b/docs/NEXT_BACKLOG.md index 86d1a886..cf260b46 100644 --- a/docs/NEXT_BACKLOG.md +++ b/docs/NEXT_BACKLOG.md @@ -234,6 +234,10 @@ Decision: `codex_claude_local_integration_evidence`, while `native_dialog_approved_dogfood` remains pending until explicit operator approval exists. + `docs/NATIVE_DIALOG_DOGFOOD_AUDIT_2026-07-05.md` is also shipped as + `native_dialog_preflight` evidence: it proves MCP elicitation and no-dialog + fallback behavior while explicitly refusing to treat that as + `native_dialog_approved_dogfood`. - 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/superpowers/plans/2026-07-05-promptlane-95-quality-plan.md b/docs/superpowers/plans/2026-07-05-promptlane-95-quality-plan.md index 8dd55108..97c43aa3 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 @@ -236,6 +236,9 @@ `codex_claude_local_integration_evidence` while keeping `native_dialog_approved_dogfood` pending until explicit operator approval exists. +- `docs/NATIVE_DIALOG_DOGFOOD_AUDIT_2026-07-05.md` is packaged as + `native_dialog_preflight` evidence for MCP elicitation and no-dialog fallback + behavior. It must not be treated as approved native OS dialog dogfood. - 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 479d77d2..e3868518 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,7 @@ "docs/NPM_PUBLISHING.md", "docs/PACKAGE_CONTENTS.md", "docs/PRE_PUBLISH_PRIVACY_AUDIT.md", + "docs/NATIVE_DIALOG_DOGFOOD_AUDIT_2026-07-05.md", "docs/RELEASE_STABILITY_EVIDENCE_2026-07-06.md", "docs/LOCAL_95_EVIDENCE_2026-07-06.md", "docs/PRODUCT_POSITIONING_EVIDENCE_2026-07-06.md", diff --git a/scripts/quality-95-evidence.mjs b/scripts/quality-95-evidence.mjs index ac54ba8d..7a9b0f7f 100644 --- a/scripts/quality-95-evidence.mjs +++ b/scripts/quality-95-evidence.mjs @@ -174,6 +174,7 @@ function readCompletedEvidence() { let uiPatrolEvidence = ""; let uiPatrolReadiness = ""; let codexClaudeEvidence = ""; + let nativeDialogAudit = ""; try { plan = readFileSync(planPath, "utf8"); localEvidence = readFileSync("docs/LOCAL_95_EVIDENCE_2026-07-06.md", "utf8"); @@ -202,12 +203,14 @@ function readCompletedEvidence() { "docs/CODEX_CLAUDE_LOCAL_INTEGRATION_EVIDENCE_2026-07-06.md", "utf8", ); + nativeDialogAudit = readFileSync(nativeDialogAuditPath, "utf8"); } catch { return { product_positioning_metadata_alignment: false, manual_ui_patrol_artifact_evidence: false, scheduled_ui_patrol_preflight: false, codex_claude_local_integration_evidence: false, + native_dialog_preflight: false, web_user_flow_current_main_evidence: false, privacy_raw_free_regression_sweep: false, codex_claude_setup_smoke_refresh: false, @@ -255,6 +258,13 @@ function readCompletedEvidence() { codexClaudeEvidence.includes("corepack pnpm dogfood:loop-memory-approval") && codexClaudeEvidence.includes("native_dialog_approved_dogfood") && codexClaudeEvidence.includes("codex_claude_local_integration_evidence"), + native_dialog_preflight: + nativeDialogAudit.includes("corepack pnpm smoke:mcp-native-dialog") && + nativeDialogAudit.includes("mcp native dialog preflight passed") && + nativeDialogAudit.includes("pending native_dialog_preflight evidence") && + nativeDialogAudit.includes( + "does not complete `native_dialog_approved_dogfood`", + ), web_user_flow_current_main_evidence: plan.includes("web_user_flow_current_main_evidence") && plan.includes("corepack pnpm dogfood:web-user-flow") && @@ -337,6 +347,12 @@ function axisEvidenceCoverage({ ) { satisfied.push("codex_claude_local_integration_evidence"); } + if ( + axis.id === "codex_and_claude_code_integration" && + completedEvidence.native_dialog_preflight + ) { + satisfied.push("native_dialog_preflight"); + } if ( [ "local_first_privacy_boundary", diff --git a/src/cli/commands/quality-evidence.test.ts b/src/cli/commands/quality-evidence.test.ts index 4e3445f7..5884cd2b 100644 --- a/src/cli/commands/quality-evidence.test.ts +++ b/src/cli/commands/quality-evidence.test.ts @@ -99,6 +99,7 @@ describe("quality-evidence CLI command", () => { satisfied_evidence: expect.arrayContaining([ "codex_claude_setup_smoke_refresh", "codex_claude_local_integration_evidence", + "native_dialog_preflight", "local_95_evidence_sweep", ]), remaining_evidence: expect.arrayContaining([ @@ -176,7 +177,7 @@ describe("quality-evidence CLI command", () => { "codex_and_claude_code_integration: blocked_external", ); expect(text).toContain( - "satisfied=codex_claude_setup_smoke_refresh,codex_claude_local_integration_evidence,local_95_evidence_sweep", + "satisfied=codex_claude_setup_smoke_refresh,codex_claude_local_integration_evidence,native_dialog_preflight,local_95_evidence_sweep", ); expect(text).toContain("remaining=native_dialog_approved_dogfood"); expect(text).toContain("Scorecard review candidates"); diff --git a/src/packaging/plugin-files.test.ts b/src/packaging/plugin-files.test.ts index 171b75ae..5edf6c6d 100644 --- a/src/packaging/plugin-files.test.ts +++ b/src/packaging/plugin-files.test.ts @@ -937,6 +937,36 @@ describe("plugin packaging files", () => { ); }); + it("ships native dialog preflight evidence without treating it as approved dogfood", () => { + const packageJson = JSON.parse( + readFileSync(join(process.cwd(), "package.json"), "utf8"), + ) as { files: string[] }; + const qualityScript = readFileSync( + join(process.cwd(), "scripts/quality-95-evidence.mjs"), + "utf8", + ); + const audit = readFileSync( + join(process.cwd(), "docs/NATIVE_DIALOG_DOGFOOD_AUDIT_2026-07-05.md"), + "utf8", + ); + const backlog = readFileSync( + join(process.cwd(), "docs/NEXT_BACKLOG.md"), + "utf8", + ); + + expect(packageJson.files).toContain( + "docs/NATIVE_DIALOG_DOGFOOD_AUDIT_2026-07-05.md", + ); + expect(qualityScript).toContain("native_dialog_preflight"); + expect(audit).toContain("corepack pnpm smoke:mcp-native-dialog"); + expect(audit).toContain("mcp native dialog preflight passed"); + expect(audit).toContain("pending native_dialog_preflight evidence"); + expect(audit).toContain( + "does not complete `native_dialog_approved_dogfood`", + ); + expect(backlog).toContain("native_dialog_preflight"); + }); + it("ships a repeatable 9.5 quality evidence summary command", () => { const packageJson = readJson<{ files: string[]; diff --git a/src/packaging/quality-evidence-script.test.ts b/src/packaging/quality-evidence-script.test.ts index 5b006920..753c5059 100644 --- a/src/packaging/quality-evidence-script.test.ts +++ b/src/packaging/quality-evidence-script.test.ts @@ -200,6 +200,7 @@ describe("quality 9.5 evidence script", () => { satisfied_evidence: expect.arrayContaining([ "codex_claude_setup_smoke_refresh", "codex_claude_local_integration_evidence", + "native_dialog_preflight", "local_95_evidence_sweep", ]), remaining_evidence: expect.arrayContaining([ diff --git a/tasks/todo.md b/tasks/todo.md index e54ce8de..434ace72 100644 --- a/tasks/todo.md +++ b/tasks/todo.md @@ -1,5 +1,29 @@ # 작업 계획 +## 2026-07-06 PromptLane Native Dialog Preflight Evidence + +- [x] CHECK: Approved native OS dialog dogfood still requires explicit operator + approval, so `native_dialog_approved_dogfood` must stay pending. +- [x] RED: quality evidence CLI/script tests required + `codex_and_claude_code_integration` to include `native_dialog_preflight` + while still keeping `native_dialog_approved_dogfood` and + `scorecard_level_below_9_5` as remaining evidence; packaging tests required + the native dialog audit to ship. +- [x] GREEN: `docs/NATIVE_DIALOG_DOGFOOD_AUDIT_2026-07-05.md` is now packaged + and `quality-evidence` exposes its no-dialog and elicitation proof as + `native_dialog_preflight`. +- [x] EFFECT: agents can see native dialog readiness without confusing it with + operator-approved OS dialog dogfood. + +### 판단 기준 + +- Do not run approved native OS dialog dogfood without explicit operator + approval. +- Do not use no-dialog fallback evidence as a substitute for answered OS dialog + evidence. +- Keep preflight evidence visible so future work waits for the right manual + approval instead of repeating unrelated smoke checks. + ## 2026-07-06 PromptLane UI Patrol Schedule Readiness Evidence - [x] CHECK: The GitHub `ui-patrol` workflow has no successful `schedule` event