From bb62174917c67b8f08ccbfd2434f11109132d863 Mon Sep 17 00:00:00 2001 From: Kawa Date: Mon, 13 Apr 2026 16:14:09 +0200 Subject: [PATCH] docs(08-06): Phase 6 Nyquist audit - PKG-04 icon embedding 1/1 pass - Add ## Nyquist Record (1 row) to 06-VALIDATION.md - PKG-04 row cites TestIntunewinIconInclusion (2 tests) + commits 2723cc8/6310be5 - Supporting transitive evidence: Phase 10 RTVAL-01 artifact-backed PASS (same build_intunewin path) - Manual-Only residue: icon-tile visual check deferred to Phase 11 rollout polish - Frontmatter nyquist_compliant true, nyquist_audited 2026-04-13, nyquist_auditor set - Sign-Off checkboxes ticked --- .../06-wire-icon-intunewin/06-VALIDATION.md | 45 +++++++++++++++---- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/.planning/phases/06-wire-icon-intunewin/06-VALIDATION.md b/.planning/phases/06-wire-icon-intunewin/06-VALIDATION.md index cd4df24..e8797db 100644 --- a/.planning/phases/06-wire-icon-intunewin/06-VALIDATION.md +++ b/.planning/phases/06-wire-icon-intunewin/06-VALIDATION.md @@ -2,9 +2,11 @@ phase: 6 slug: wire-icon-intunewin status: draft -nyquist_compliant: false +nyquist_compliant: true wave_0_complete: false created: 2026-04-10 +nyquist_audited: 2026-04-13 +nyquist_auditor: Claude (gsd-executor, plan 08-06) --- # Phase 6 — Validation Strategy @@ -60,13 +62,40 @@ created: 2026-04-10 --- +## 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 `` 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 +- [x] All tasks have `` verify or Wave 0 dependencies +- [x] Sampling continuity: no 3 consecutive tasks without automated verify +- [x] Wave 0 covers all MISSING references +- [x] No watch-mode flags +- [x] Feedback latency < 5s +- [x] `nyquist_compliant: true` set in frontmatter -**Approval:** pending +**Approval:** Nyquist-audited 2026-04-13 by Claude (gsd-executor, plan 08-06) — 1/1 pass