Files
2026-04-15 17:57:12 +02:00

7.2 KiB

phase, slug, status, nyquist_compliant, wave_0_complete, created, nyquist_audited, nyquist_auditor
phase slug status nyquist_compliant wave_0_complete created nyquist_audited nyquist_auditor
6 wire-icon-intunewin draft true false 2026-04-10 2026-04-13 Claude (gsd-executor, plan 08-06)

Phase 6 — Validation Strategy

Per-phase validation contract for feedback sampling during execution.


Test Infrastructure

Property Value
Framework pytest
Config file none — runs via python -m pytest
Quick run command python -m pytest tests/test_packages.py -x -q
Full suite command python -m pytest tests/ -q
Estimated runtime ~5 seconds

Sampling Rate

  • After every task commit: Run python -m pytest tests/test_packages.py -x -q
  • After every plan wave: Run python -m pytest tests/ -q
  • Before /gsd:verify-work: Full suite must be green
  • Max feedback latency: 5 seconds

Per-Task Verification Map

Task ID Plan Wave Requirement Test Type Automated Command File Exists Status
06-01-01 01 1 PKG-04 integration python -m pytest tests/test_packages.py::test_intunewin_includes_icon -x -q W0 pending
06-01-02 01 1 PKG-04 integration python -m pytest tests/test_packages.py::test_intunewin_without_icon_succeeds -x -q W0 pending

Status: pending · green · red · ⚠️ flaky


Wave 0 Requirements

  • tests/test_packages.py — add test_intunewin_includes_icon (monkeypatch build_intunewin to capture staging dir contents)
  • tests/test_packages.py — add test_intunewin_without_icon_succeeds (baseline: export without icon)

Existing test infrastructure covers the rest — no new files or fixtures needed.


Manual-Only Verifications

All phase behaviors have automated verification.


Nyquist Record

Audited 2026-04-13 by Claude (gsd-executor, plan 08-06). Phase 6 is a gap-closure phase with a single success criterion (PKG-04 icon embedding) spawned after the first v1.0 milestone audit flagged that Phase 5 had shipped icon upload+storage but never wired the icon into .intunewin output. One row per Phase 6 success criterion, derived from milestones/v1.0-ROADMAP.md Phase 6 goal block + REQUIREMENTS.md PKG-04, cross-checked against 06-VERIFICATION.md (2/2 truths VERIFIED 2026-04-10) and 06-01-SUMMARY.md. Evidence cites committed pytest invocations, source lines, commit SHAs, and — as supporting transitive evidence — Phase 10 RUNTIME-VALIDATION.md RTVAL-01 (artifact-backed tenant acceptance of the exact .intunewin builder path on tenant rubis.fr, 2026-04-13).

Phase 6 goal (v1.0-ROADMAP.md): "Uploaded PNG icon is embedded in the .intunewin package so Intune displays it as the app icon."

Single-criterion phase: Unlike Phases 1-5 which enumerate multiple requirements, Phase 6 has exactly one requirement (PKG-04) and one plan (06-01). The Nyquist Record therefore contains exactly one row. This mirrors the plan 08-05 row-4 (PKG-04) closure citation in reverse direction: 05-VALIDATION.md rows 4 cites this phase's test as its closure evidence; this phase's row cites the same test as its canonical evidence.

RTVAL-01 transitive coverage: RTVAL-01 PASS on tenant rubis.fr (screenshots rtval-01-tenant-upload.png + rtval-01-app-assigned.png, committed package Copieur_2eme.intunewin) exercised the exact same build_intunewin() staging path that Phase 6's shutil.copy2(...'icon.png') feeds into. The test package was built with the icon-wiring code live, so Intune's successful ingestion of the package is transitive evidence that the icon staging does not corrupt the .intunewin output. The PKG-04 row notes this as supporting — not primary — evidence because RTVAL-01's observable check was "tenant accepts package", not "icon appears on Intune app tile" (the latter remains a Manual-Only polish item owned by Phase 11 rollout).

# Criterion Observable Check Evidence Status Notes
1 PKG-04: Uploaded PNG icon is embedded in .intunewin output so Intune displays it as the app icon python -m pytest tests/test_packages.py::TestIntunewinIconInclusion -x -q (2 tests: test_intunewin_includes_icon asserts icon.png appears in staged files via monkeypatched build_intunewin; test_intunewin_without_icon_succeeds asserts baseline export returns 200 when no icon uploaded) Tests: tests/test_packages.py::TestIntunewinIconInclusion::test_intunewin_includes_icon (lines 200-231) + ::test_intunewin_without_icon_succeeds (lines 233-245). Source: imptune/api/packages.py line 149 (Icon.get_or_none(Icon.printer == printer.id)), line 151 (cfg.ICONS_DIR), line 153 (shutil.copy2 as icon.png), line 157 (build_intunewin call — staging BEFORE build confirmed). Imports: Icon from imptune.db.models (line 13), cfg (line 13). Commits: 2723cc8 (06-01 TDD RED — failing test) + 6310be5 (06-01 TDD GREEN — 4-line icon staging block). 06-VERIFICATION.md (2026-04-10): 2/2 truths VERIFIED, key links WIRED, PKG-04 SATISFIED, no anti-patterns, full suite 96/96 green. Supporting: Phase 10 RUNTIME-VALIDATION.md RTVAL-01 PASS on tenant rubis.fr (2026-04-13) — same build_intunewin path with icon-wiring code live, package Copieur_2eme.intunewin accepted by tenant after fix commits 74535ea + 7716246. pass Silent-skip pattern: missing Icon DB record or missing disk file both skip the copy; export always succeeds (decision in 06-01-SUMMARY.md). Icon staged as constant filename icon.png regardless of original filename. Manual-Only polish item: Visual confirmation that the icon actually appears on the Intune app tile in the portal is NOT covered by this row — RTVAL-01 proved ingestion, not icon-tile rendering. This cosmetic check is Manual-Only and owned by Phase 11 rollout visual polish (same as 05-VALIDATION.md row 4 notes). Audit trail for the embedding mechanism itself is strong (pytest + source review + TDD commits + transitive real-tenant ingestion).

Audit Outcome

Status Count
pass 1
fail-fix-v1.1 0
deferred-v1.2 0
wont-do 0

Phase 6 is Nyquist-compliant. The single gap-closure criterion is satisfied with strong test-level evidence plus transitive artifact-backed runtime coverage via RTVAL-01. The only residual item is the cosmetic "does the icon actually show on the Intune app tile" visual check, which is Manual-Only and correctly deferred to Phase 11 rollout.


Validation Sign-Off

  • All tasks have <automated> verify or Wave 0 dependencies
  • Sampling continuity: no 3 consecutive tasks without automated verify
  • Wave 0 covers all MISSING references
  • No watch-mode flags
  • Feedback latency < 5s
  • nyquist_compliant: true set in frontmatter
  • Nyquist audit complete — 2026-04-13 — Sébastien QUEROL

Approval: Nyquist-audited 2026-04-13 by Claude (gsd-executor, plan 08-06) — 1/1 pass; signed off 2026-04-13 by Sébastien QUEROL (index: v1.0-VALIDATION-INDEX.md)