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— addtest_intunewin_includes_icon(monkeypatchbuild_intunewinto capture staging dir contents)tests/test_packages.py— addtest_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
.intunewinoutput. One row per Phase 6 success criterion, derived frommilestones/v1.0-ROADMAP.mdPhase 6 goal block +REQUIREMENTS.mdPKG-04, cross-checked against06-VERIFICATION.md(2/2 truths VERIFIED 2026-04-10) and06-01-SUMMARY.md. Evidence cites committed pytest invocations, source lines, commit SHAs, and — as supporting transitive evidence — Phase 10RUNTIME-VALIDATION.mdRTVAL-01 (artifact-backed tenant acceptance of the exact.intunewinbuilder 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 packageCopieur_2eme.intunewin) exercised the exact samebuild_intunewin()staging path that Phase 6'sshutil.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.intunewinoutput. 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: trueset 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)