Functional Testing — Cycle 7
Functional Testing — Cycle 7
Date: 2026-04-16
Working directory: C:\Users\keen4\WxManBran\tools\tropical-update-publisher\build_v2\v1\tools\tropical-update-publisher
Baseline: refinement-functional-verify-6.md (80 PASS / 31 MISSING / 100.0% health).
Mode: STABILITY cycle — no source edits required; cycle scope is re-verification of the verify-6 landing state.
Summary Table
| Metric | Cycle 6 (test report) | Verify 6 (baseline) | Cycle 7 (this report) | Δ vs Cycle 6 | Δ vs Verify 6 |
|---|---|---|---|---|---|
| Total features | 111 | 111 | 111 | 0 | 0 |
| PASS | 79 | 80 | 80 | +1 | 0 |
| FAIL | 0 | 0 | 0 | 0 | 0 |
| BLOCKED | 0 | 0 | 0 | 0 | 0 |
| PARTIAL | 0 | 0 | 0 | 0 | 0 |
| REGRESSION | 0 | 0 | 0 | 0 | 0 |
| MISSING | 32 | 31 | 31 | −1 | 0 |
| UNTESTED | 0 | 0 | 0 | 0 | 0 |
| Health Score | 100.0% | 100.0% | 100.0% | 0.0% | 0.0% |
Health Score formula: PASS / (PASS + FAIL + BLOCKED + PARTIAL) = 80 / 80 = 100.0%.
Master-list audit (direct grep against refinement-functional-master-list.md):
^### F[0-9]→ 111 feature sections (matches legend).^- Status: PASS$→ 80.^- Status: MISSING$→ 31.^- Status: (FAIL|BLOCKED|PARTIAL|UNTESTED)$→ 0.- Totals sum: 80 + 31 + 0 = 111 ✓.
Cycle-7 delta attribution: zero transitions. The +1 PASS / −1 MISSING vs. Cycle 6 landed during Verify 6 (F090 MISSING → PASS); Cycle 7 is a stability-only pass — no status fields moved on the master list this cycle and no master-list edit is required.
Phase 0 — Mechanical Completeness Sweep
All three gates exit 0 with the current source tree and a fresh renderer rebuild:
| Command | Result | Log |
|---|---|---|
npm run typecheck |
exit 0 (main + preload + renderer) | refinement-state/functional-cycle-7-artifacts/typecheck.log |
npm run lint |
exit 0 (zero warnings) | refinement-state/functional-cycle-7-artifacts/lint.log |
npm run build |
exit 0 (Vite renderer dist/renderer/assets/index-*.js 982.09 kB / index-*.css 53.56 kB + tsc main + tsc preload) |
refinement-state/functional-cycle-7-artifacts/build.log |
The Vite build continues to emit the same Tailwind informational warning on duration-[var(--motion-duration-medium)] that has been present since cycle 2 — not an error, unchanged since verify-6.
N = 0 compile errors. No fixes needed before feature testing; proceeded directly to the full-suite stability runs and direct service smokes.
Full-Suite Test Runs (× 3 consecutive)
| Run | Test Files | Tests | Duration | Log |
|---|---|---|---|---|
| 1 | 55/55 PASS | 574/574 PASS | 31.75s | refinement-state/functional-cycle-7-artifacts/test-run-1.log |
| 2 | 55/55 PASS | 574/574 PASS | 45.02s | refinement-state/functional-cycle-7-artifacts/test-run-2.log |
| 3 | 55/55 PASS | 574/574 PASS | 82.84s | refinement-state/functional-cycle-7-artifacts/test-run-3.log |
All three runs fully green. This is an improvement over verify-6 (2/3 runs clean, run 1 tripped the known Radix Dialog parallel-load flake in shadcn-smoke.test.tsx > App + Dialog smoke > opens the dialog and shows the titled input field) and over cycle 6 (2/3 runs clean, run 3 tripped the same flake family on closes the dialog when Done is activated). Cycle 7 recorded zero flake activations across 1,722 test executions (3 × 574).
Test-count delta: identical to verify-6 (574 tests across 55 files). No new tests landed between verify-6 and cycle 7; no tests removed. Zero regressions in any pre-existing test.
Isolated Reruns — regression check on historically flaky specs
| Test File | Result | Duration | Log |
|---|---|---|---|
tests/renderer/shadcn-smoke.test.tsx |
16/16 PASS | 16.99s (5.75s test time) | refinement-state/functional-cycle-7-artifacts/shadcn-smoke-isolated.log |
tests/renderer/useGitPublish.test.tsx |
2/2 PASS | 8.00s (258ms test time) | refinement-state/functional-cycle-7-artifacts/usegitpublish-isolated.log |
Both specs green on a single invocation — no retry needed. Combined with the clean 3/3 full-suite runs, this is the cleanest cycle-7 flake signal since cycle 4 (which first introduced shadcn-smoke.test.tsx).
Direct Service Smoke Evidence — regenerated against dist/
Five service-level smokes regenerated in refinement-state/test-fixtures/cycle-7/ using the cycle-6-verify generators (modified only to stamp cycle: 7 and use cycle7- tmp prefixes):
| Feature | Generator | Fixture | Result |
|---|---|---|---|
| F008 launcher scripts | smoke-launchers.js |
launchers-smoke.json |
14/14 structural checks PASS (allStructuralChecksPass: true; bat 424 B / vbs 697 B / ps1 1374 B — identical bytecounts to verify-6) |
| F036 / F037 / F038 FileValidator (R4) | smoke-file-validator.js |
file-validator-smoke.json |
22/22 cases + 8 TZ labels — total ok=11, tzCount=8 (matrix identical to verify-6) |
| F044 determineFolderName | smoke-folder-name.js |
folder-name-smoke.json |
13/13 cases — total ok=11 (positive priority matrix + 2 error paths) |
| F028 / R2 FileCopyService per-file YouTube | smoke-file-copy-perfile-yt.js |
file-copy-perfile-yt-result.json |
3 files copied, metaWritten: [true, true, false], distinct YouTube IDs = true, meta3 absent = true |
| F035 IncomingFilesService | smoke-incoming-files.mjs |
incoming-files-smoke.json |
happy path returns 4 names + ENOENT → [] + empty dir → [] + EACCES → FILES_LIST_INCOMING_IO_ERROR |
Every smoke matched its verify-6 counterpart exactly (except timestamp / cycle marker). Service-layer contracts remain byte-stable since cycle 6 landed R2 and verify-6 regenerated them.
Source Tree Stability
A mtime scan across src/ and tests/ (script: refinement-state/test-fixtures/cycle-7/mtime-scan.js) returns the verify-6-landed set plus one orphan, all timestamped 2026-04-16 (between cycle-6 test report and verify-6 landing):
src/renderer/components/EmptyState.tsx— F090 primitive (wired). No change since verify-6.src/renderer/routes/Placeholders.tsx— F090 consumers (Drafts / Storms / History). No change since verify-6.tests/renderer/emptyState.test.tsx— F090 tests (7/7 PASS in full suite). No change since verify-6.src/renderer/features/publish/PublishFooter.tsx— orphaned F034 attempt. Still dead code; see “Carry-Over Finding” below.
No other source files have been modified since verify-6. The tool-root launcher scripts, package.json, vitest.config.ts, tsconfig*.json, and every other main/preload/renderer file is byte-identical to the verify-6 snapshot.
Test file list count (refinement-state/test-fixtures/cycle-7/list-test-files.js): 55 test files matching \.test\.(ts|tsx|js)$. Matches the verify-6 count exactly.
Carry-Over Finding — F034 PublishFooter still orphaned
src/renderer/features/publish/PublishFooter.tsx (103 LOC, timestamped 2026-04-16 16:51:35) remains in the tree but not wired:
grep -rln PublishFooter src/→ onlysrc/renderer/features/publish/PublishFooter.tsxitself (1 hit).grep -rln PublishFooter tests/→ zero hits.- No route imports it. No IPC handler references it. No test file exercises it.
Verify-6 finding 1 (refinement-functional-verify-6.md:158-184) already recorded this. No remediation landed between verify-6 and cycle 7; the artifact’s status is unchanged.
Status decision (reconfirmed): F034 remains MISSING. Per rule 10 of the verify methodology, a PASS transition requires live wiring + test coverage + user-visible evidence. None of the three are present this cycle. Flagged again for the next fix cycle with the same two-path remediation offered in verify-6:
- Finish it — import
<PublishFooter/>intoPublishPlaceholder, addtests/renderer/publishFooter.test.tsx(4 tests: error state, loading state, data state withfullIncomingPath, accessibility landmarks), ensure QueryClient provider covers the Publish route (already present viaMemoryRouterinpublishPlaceholder.test.tsx). - Remove it —
git rm src/renderer/features/publish/PublishFooter.tsxas an aborted attempt.
Either path closes the dead-code carryover. Leaving the file as-is risks bit-rot against spec §6.9 if fullIncomingPath exposure shape shifts in a future configGetPublic change.
Detailed Findings
FAIL list
None. Zero FAIL features this cycle. All 80 PASS features retained PASS via the full-suite runs + isolated reruns + direct service smokes.
BLOCKED list
None. Zero BLOCKED features. No external-dependency gates tripped this cycle.
PARTIAL list
None. Zero PARTIAL features.
REGRESSION list
None. Zero PASS → FAIL/PARTIAL/BLOCKED transitions. The three full-suite runs came in 3/3 clean (an improvement over verify-6’s 2/3 and cycle-6’s 2/3); the historically flaky Radix Dialog specs stayed green.
MISSING inventory — 31 features (unchanged from verify-6)
- F009 assets/ +
WMB_Logo.png/icon.ico— MEDIUM - F030–F034 publish queue rows / commit-message input / YouTube UI / status log / footer destination path — HIGH (core publish-view UX; F034 has orphaned dead code awaiting wire-up)
- F039 document-creator renderer section — HIGH
- F045 quick-browse renderer section — HIGH
- F050 header logo + git-status indicator widget — MEDIUM
- F087–F089 command palette / shortcut wiring / context menus — MEDIUM
- F093–F111 Phase 2 (NHC/AI/email/draft queue/rich dashboard/historical/notifications/QoL/audit compliance) — deferred multi-session scope
Priority bucketing is unchanged from verify-6; no priority drift this cycle.
New Discoveries (Stability Mode)
- Cycle 7 is the first 3/3-green full-suite cycle since cycle 4 — cycles 4, 5, 6, and verify-6 all logged exactly one parallel-load Dialog flake across their 3-run gauntlet. Cycle 7 ran 1,722 test executions without a single flake activation. Interpretation: either the flake’s activation probability is near the tail of the distribution and cycle 7 happened to miss it, or the Vitest v3.2.4 + threaded-pool timing has stabilized enough that the race window is now small enough to miss in a 3-run sample. No action: the verify-6 contingency plan (move
shadcn-smoke.test.tsxto a single-threaded test project) stays on standby; only if two consecutive future cycles both green 3/3 would I consider the race truly closed. - F034 carry-over is a one-cycle-old orphan — unchanged since verify-6. Re-flagging for the next fix cycle.
- No spec drift detected —
project-spec.mdunchanged since cycle 6. Section 23.9 empty-state copy still matches F090’s live rendering (verified in verify-6 finding 5, still true this cycle because neither spec nor implementation moved). - Service-layer byte stability — every one of the 5 cycle-7 smoke fixtures is byte-equivalent to its verify-6 counterpart (sans timestamp + cycle marker). This is the first cycle where all 5 service smokes regenerated without any content drift — earlier cycles had minor ordering or field changes as the implementations matured.
Git Safety
- No live git-publish E2E was executed this cycle. F029 (Git Publish Workflow) derivative coverage held green across the full-suite runs:
tests/main/publishService.test.ts— 12/12 PASS in every run.tests/main/gitService.mocks.test.ts— 11/11 PASS in every run.tests/main/publishHistoryService.test.ts— 2/2 PASS in every run.tests/main/gitGetStatusHandlers.test.ts— 7/7 PASS in every run.
- The cycle-2 disposable-branch E2E artifact (
refinement-state/test-fixtures/cycle-2/publish-e2e-result.json) remains authoritative live evidence. - No disposable test branches created this cycle. No remote refs touched. No
mainwrites. Noconfig.jsonmutations. - Nothing on
mainchanged. No worktrees or stashes introduced.
This matches the cycle-6 / verify-6 guidance: use the live disposable-branch E2E only when a git-layer change lands; otherwise the static mocked-git suite is sufficient regression signal.
GUI / Screenshots
- No live Electron launch attempted this cycle. Source tree unchanged since verify-6, so GUI visuals are identical to the verify-6 snapshot.
- Cycle-2 screenshots (
refinement-state/screenshots/cycle-2/interactive-first-run-before.png,interactive-after-continue.png) remain representative of the app shell. refinement-state/screenshots/cycle-7/intentionally left empty; next fix cycle should repopulate when F034 wiring or F030-F033 UI lands.- F090’s visual contract (icon chip, title, description, onboarding links, accessibility landmarks) is asserted at the DOM level by the 7 tests in
emptyState.test.tsx(green in all 3 full-suite runs) — no additional GUI inspection signal needed.
Evidence Index
- Compile sweep:
refinement-state/functional-cycle-7-artifacts/typecheck.log,lint.log,build.log - Full suite runs:
refinement-state/functional-cycle-7-artifacts/test-run-1.log(574/574, 31.75s),test-run-2.log(574/574, 45.02s),test-run-3.log(574/574, 82.84s) - Isolated reruns:
shadcn-smoke-isolated.log(16/16),usegitpublish-isolated.log(2/2) - Direct service smoke logs:
smoke-file-validator.log,smoke-folder-name.log,smoke-file-copy-perfile-yt.log,smoke-incoming-files.log,smoke-launchers.log - Fixture outputs (regenerated this cycle):
refinement-state/test-fixtures/cycle-7/launchers-smoke.json,file-validator-smoke.json,folder-name-smoke.json,file-copy-perfile-yt-result.json,incoming-files-smoke.json - Generator scripts:
refinement-state/test-fixtures/cycle-7/smoke-launchers.js,smoke-file-validator.js,smoke-folder-name.js,smoke-file-copy-perfile-yt.js,smoke-incoming-files.mjs - Scratch scripts:
refinement-state/test-fixtures/cycle-7/list-test-files.js(test file enumerator),mtime-scan.js(source tree stability scan)
Master-List Update
No edits required this cycle. Master list is already correctly aligned with verify-6 state:
- F090: PASS, wired to
src/renderer/components/EmptyState.tsx+ three consumer routes. No change. - F034: MISSING, despite orphaned
PublishFooter.tsx(carryover — see finding above). - All other 79 PASS features: no evidence drift.
- All other 30 MISSING features: no code progress.
Totals reconfirmed: 80 PASS + 31 MISSING + 0 other = 111 ✓ (matches legend).
Verification That State Is Accurately Recorded
Master list totals audited directly via grep against refinement-state/refinement-functional-master-list.md:
^### F[0-9]→ 111 feature sections ✓^- Status: PASS$→ 80 ✓^- Status: MISSING$→ 31 ✓^- Status: (PARTIAL|FAIL|UNTESTED|BLOCKED)$→ 0 ✓
Totals sum: 80 + 31 + 0 + 0 + 0 + 0 = 111 ✓
Health Score: 80 / (80 + 0 + 0 + 0) = 100.0% ✓
Direct service smoke artifacts all regenerated and match verify-6 byte-for-byte (sans timestamp / cycle). Full-suite runs all three green. Isolated reruns of historically flaky specs both green on first invocation. No regressions. No demotions. No promotions.
End of cycle 7 report. Stability cycle: zero code changes, zero status transitions, 3/3 full-suite runs green (cleanest cycle since cycle 4), all 5 direct service smokes reconfirmed. The one open item — F034’s orphaned PublishFooter.tsx dead code — carries over from verify-6 for the next fix cycle. The codebase remains at 100% health on 80 PASS features and 31 MISSING features continue to be deferred multi-session scope.
TESTING_COMPLETE