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
7 changes: 7 additions & 0 deletions docs/NEXT_BACKLOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,13 @@ Decision:
`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.
`docs/UI_PATROL_SCHEDULE_READINESS_2026-07-06.md` records the current
scheduled patrol readiness: `ui-patrol.yml` has both manual and scheduled
triggers, the cron is `17 6 * * 1`, workflow_dispatch run `28717406758`
proves the 9-png artifact path, and `corepack pnpm evidence:ui-patrol`
refuses to treat manual evidence as cron completion. `quality-evidence`
records this as `scheduled_ui_patrol_preflight`, but it does not complete
`scheduled_ui_patrol`.
`docs/CODEX_CLAUDE_LOCAL_INTEGRATION_EVIDENCE_2026-07-06.md` records current
non-operator setup, hook, MCP, elicitation, no-dialog fallback, first-loop,
and loop-memory evidence. `quality-evidence` records this as
Expand Down
22 changes: 22 additions & 0 deletions docs/UI_PATROL_SCHEDULE_READINESS_2026-07-06.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# UI Patrol Schedule Readiness Evidence 2026-07-06

This ledger records the operational readiness evidence for the scheduled
`ui-patrol` workflow. It is not scheduled-run completion evidence.

| Evidence | Status | Notes |
| --- | --- | --- |
| `.github/workflows/ui-patrol.yml` | PASS | The workflow has `workflow_dispatch` and `schedule` triggers. |
| Weekly cron | PASS | Configured as cron: `17 6 * * 1`. |
| Recent manual artifact | PASS | workflow_dispatch run `28717406758` uploaded `ui-patrol-screenshots` with 9 png files. |
| Repeatable checker | PASS | `corepack pnpm evidence:ui-patrol` distinguishes manual evidence from a real `schedule` event. |

## Boundary

This evidence proves the scheduled workflow is configured, manually runnable,
and guarded by a repeatable checker. It does not complete `scheduled_ui_patrol`
because the current workflow history has no successful `schedule` event with a
downloaded `ui-patrol-screenshots` artifact containing 9 png files.

`quality-evidence` records this readiness ledger as
`scheduled_ui_patrol_preflight` and must keep `scheduled_ui_patrol` in remaining
evidence until the first real cron artifact is verified.
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,12 @@
`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.
- `docs/UI_PATROL_SCHEDULE_READINESS_2026-07-06.md` records scheduled patrol
readiness separately: `ui-patrol.yml` has both manual and scheduled triggers,
the cron is `17 6 * * 1`, the latest proven manual artifact path remains
workflow_dispatch run `28717406758`, and the repeatable evidence checker
refuses to treat that as cron completion. `quality-evidence` records this as
`scheduled_ui_patrol_preflight` while keeping `scheduled_ui_patrol` pending.
- `docs/CODEX_CLAUDE_LOCAL_INTEGRATION_EVIDENCE_2026-07-06.md` records current
non-operator Codex and Claude Code evidence: setup/doctor smoke, hook smoke,
MCP coach-loop smoke, MCP elicitation smoke, no-dialog native fallback
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"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/UI_PATROL_SCHEDULE_READINESS_2026-07-06.md",
"docs/CODEX_CLAUDE_LOCAL_INTEGRATION_EVIDENCE_2026-07-06.md",
"docs/RELEASE_CHECKLIST.md",
"plugins",
Expand Down
17 changes: 17 additions & 0 deletions scripts/quality-95-evidence.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,7 @@ function readCompletedEvidence() {
let claudePlugin = "";
let claudeMarketplace = "";
let uiPatrolEvidence = "";
let uiPatrolReadiness = "";
let codexClaudeEvidence = "";
try {
plan = readFileSync(planPath, "utf8");
Expand All @@ -193,6 +194,10 @@ function readCompletedEvidence() {
"docs/UI_PATROL_EVIDENCE_2026-07-06.md",
"utf8",
);
uiPatrolReadiness = readFileSync(
"docs/UI_PATROL_SCHEDULE_READINESS_2026-07-06.md",
"utf8",
);
codexClaudeEvidence = readFileSync(
"docs/CODEX_CLAUDE_LOCAL_INTEGRATION_EVIDENCE_2026-07-06.md",
"utf8",
Expand All @@ -201,6 +206,7 @@ function readCompletedEvidence() {
return {
product_positioning_metadata_alignment: false,
manual_ui_patrol_artifact_evidence: false,
scheduled_ui_patrol_preflight: false,
codex_claude_local_integration_evidence: false,
web_user_flow_current_main_evidence: false,
privacy_raw_free_regression_sweep: false,
Expand Down Expand Up @@ -234,6 +240,11 @@ function readCompletedEvidence() {
uiPatrolEvidence.includes("Local `corepack pnpm ui-patrol`") &&
uiPatrolEvidence.includes("pending_no_schedule_run") &&
uiPatrolEvidence.includes("manual_ui_patrol_artifact_evidence"),
scheduled_ui_patrol_preflight:
uiPatrolReadiness.includes("scheduled_ui_patrol_preflight") &&
uiPatrolReadiness.includes("workflow_dispatch run `28717406758`") &&
uiPatrolReadiness.includes("cron: `17 6 * * 1`") &&
uiPatrolReadiness.includes("does not complete `scheduled_ui_patrol`"),
codex_claude_local_integration_evidence:
codexClaudeEvidence.includes("corepack pnpm smoke:agent-setup") &&
codexClaudeEvidence.includes("corepack pnpm smoke:hooks") &&
Expand Down Expand Up @@ -302,6 +313,12 @@ function axisEvidenceCoverage({
) {
satisfied.push("manual_ui_patrol_artifact_evidence");
}
if (
axis.id === "web_ui_and_operational_evidence" &&
completedEvidence.scheduled_ui_patrol_preflight
) {
satisfied.push("scheduled_ui_patrol_preflight");
}
if (
axis.id === "local_first_privacy_boundary" &&
completedEvidence.privacy_raw_free_regression_sweep
Expand Down
3 changes: 2 additions & 1 deletion src/cli/commands/quality-evidence.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ describe("quality-evidence CLI command", () => {
satisfied_evidence: expect.arrayContaining([
"web_user_flow_current_main_evidence",
"manual_ui_patrol_artifact_evidence",
"scheduled_ui_patrol_preflight",
]),
remaining_evidence: expect.arrayContaining([
"scheduled_ui_patrol",
Expand Down Expand Up @@ -168,7 +169,7 @@ describe("quality-evidence CLI command", () => {
"web_ui_and_operational_evidence: blocked_external",
);
expect(text).toContain(
"satisfied=web_user_flow_current_main_evidence,manual_ui_patrol_artifact_evidence",
"satisfied=web_user_flow_current_main_evidence,manual_ui_patrol_artifact_evidence,scheduled_ui_patrol_preflight",
);
expect(text).toContain("remaining=scheduled_ui_patrol");
expect(text).toContain(
Expand Down
34 changes: 34 additions & 0 deletions src/packaging/plugin-files.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -903,6 +903,40 @@ describe("plugin packaging files", () => {
expect(backlog).toContain("PR #420");
});

it("ships scheduled ui-patrol preflight evidence without treating it as cron completion", () => {
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 readiness = readFileSync(
join(process.cwd(), "docs/UI_PATROL_SCHEDULE_READINESS_2026-07-06.md"),
"utf8",
);
const backlog = readFileSync(
join(process.cwd(), "docs/NEXT_BACKLOG.md"),
"utf8",
);

expect(packageJson.files).toContain(
"docs/UI_PATROL_SCHEDULE_READINESS_2026-07-06.md",
);
expect(qualityScript).toContain("scheduled_ui_patrol_preflight");
expect(qualityScript).toContain(
"UI_PATROL_SCHEDULE_READINESS_2026-07-06",
);
expect(readiness).toContain("scheduled_ui_patrol_preflight");
expect(readiness).toContain("workflow_dispatch run `28717406758`");
expect(readiness).toContain("cron: `17 6 * * 1`");
expect(readiness).toContain("does not complete `scheduled_ui_patrol`");
expect(backlog).toContain("scheduled_ui_patrol_preflight");
expect(backlog).toContain(
"docs/UI_PATROL_SCHEDULE_READINESS_2026-07-06.md",
);
});

it("ships a repeatable 9.5 quality evidence summary command", () => {
const packageJson = readJson<{
files: string[];
Expand Down
1 change: 1 addition & 0 deletions src/packaging/quality-evidence-script.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@ describe("quality 9.5 evidence script", () => {
satisfied_evidence: expect.arrayContaining([
"web_user_flow_current_main_evidence",
"manual_ui_patrol_artifact_evidence",
"scheduled_ui_patrol_preflight",
]),
remaining_evidence: expect.arrayContaining([
"scheduled_ui_patrol",
Expand Down
22 changes: 22 additions & 0 deletions tasks/todo.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,27 @@
# 작업 계획

## 2026-07-06 PromptLane UI Patrol Schedule Readiness Evidence

- [x] CHECK: The GitHub `ui-patrol` workflow has no successful `schedule` event
yet, so `scheduled_ui_patrol` must stay pending.
- [x] RED: quality evidence CLI/script tests required
`web_ui_and_operational_evidence` to include
`scheduled_ui_patrol_preflight` while still keeping `scheduled_ui_patrol` and
`scorecard_level_below_9_5` as remaining evidence; packaging tests required
the readiness ledger to ship.
- [x] GREEN: `docs/UI_PATROL_SCHEDULE_READINESS_2026-07-06.md` records the
configured cron, latest manual artifact path, and checker boundary, and
`quality-evidence` exposes it as `scheduled_ui_patrol_preflight`.
- [x] EFFECT: agents can see schedule readiness without confusing it with
actual cron completion.

### 판단 기준

- Do not mark scheduled `ui-patrol` complete without a real `schedule` event.
- Do not use workflow_dispatch evidence as a substitute for cron evidence.
- Keep readiness evidence visible so future work waits for the right external
event instead of rerunning unrelated local checks.

## 2026-07-06 PromptLane Codex Claude Evidence Split

- [x] CHECK: Codex/Claude integration still has an external native-dialog
Expand Down