chore: complete v1.0 milestone

Archive v1.0 MVP: 7 phases, 13 plans, 27/27 requirements.

- Archive roadmap to milestones/v1.0-ROADMAP.md
- Archive requirements to milestones/v1.0-REQUIREMENTS.md
- Move milestone audit into milestones/
- Create MILESTONES.md with v1.0 entry
- Evolve PROJECT.md: move shipped requirements to Validated,
  update Context with stack/LOC, log Key Decisions with outcomes
- Collapse ROADMAP.md to one-line milestone summary
- Update STATE.md to shipped status
- Back-fill stale requirements-completed frontmatter on
  02-01, 04-01, 05-01, 06-01 SUMMARY.md files

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-13 09:42:56 +02:00
co-authored by Claude Opus 4.6
parent 63c935e860
commit 7edd3a68a2
11 changed files with 573 additions and 327 deletions
+53
View File
@@ -0,0 +1,53 @@
# ImpTune Milestones
Historical record of shipped versions.
---
## v1.0 — ImpTune MVP
**Shipped:** 2026-04-13
**Timeline:** 2026-04-10 → 2026-04-13 (4 days)
**Phases:** 7 (17, including gap-closure phases 6 & 7)
**Plans:** 13
**Requirements:** 27/27 satisfied
**Git tag:** `v1.0`
### Delivered
A self-hosted single-container webapp that takes a driver ZIP + printer configuration and produces ready-to-deploy packages for Microsoft Intune (.intunewin, Python-native) or NinjaRMM (ZIP) — covering driver INF parsing, full printer configuration with client/tenant grouping, PowerShell install/uninstall/detect generation with UAC + WOW64 guards, icon embedding, and command-preview UI.
### Key Accomplishments
1. **Python-native `.intunewin` format** — reimplemented AES-256-CBC + HMAC-SHA256 encrypted ZIP-in-ZIP with detection.xml, validated byte-level (Phase 1 / 01-03)
2. **Driver upload with INF parsing** — RawConfigParser-based parser handles BOM/UTF-16, `%TOKEN%` resolution, multi-model drivers, and unused-file detection; backed by SHA256 content-addressed storage (Phase 2)
3. **Full printer CRUD** — all 10 PRNT requirements (name, IP, port, duplex, color, paper, collate, client assignment, persistence, regenerate), HTMX forms, Alpine.js IP→port auto-derivation (Phase 3)
4. **Production-ready PowerShell generators** — install/uninstall/detect with SYSTEM-vs-user UAC elevation, WOW64 64-bit relaunch guard, pnputil two-step staging, duplex mapping (Phase 4)
5. **One-click package export**`/packages/intunewin` and `/packages/ninja` endpoints assemble complete ready-to-deploy artifacts from a saved printer config (Phase 5)
6. **Icon upload + embedding** — Pillow-validated 256×256 PNG ≤750KB, SHA256-addressed storage, wired into .intunewin output (Phases 5 + 6)
7. **Working dashboard + nav**`/packages` listing page, live `recent_printers` / `recent_packages` DB queries on dashboard (Phase 7 gap closure)
### Architecture / Stack
Python 3.12 · FastAPI · Jinja2 · HTMX · Alpine.js · Pico CSS · SQLite (Peewee WAL) · pycryptodome · Pillow — single Docker container, no Node.js, no external DB, no auth.
### Known Gaps / Tech Debt carried into v1.1
- Printer form driver dropdown requires manual page reload after new driver upload (Phase 2)
- PRNT-03 Alpine.js port auto-derivation — code verified, live browser runtime verification pending (Phase 3)
- No UI links to individual script downloads — only via package export or direct URL (Phase 5)
- `.intunewin` byte-level format validation against a real Intune tenant
- `pnputil` + `$PSScriptRoot` path resolution under SYSTEM context on a real Intune-managed device
- Nyquist validation: all 7 phases have draft VALIDATION.md but none are Nyquist-compliant — separate track for v1.1
### Notable Fixes Late in Milestone (2026-04-13)
- **BLOCKER:** DriverStore saved files at `{sha256}` but `packages.py` looked up `{sha256}.zip` — upload→export flow was broken in production, masked by pre-staged test fixtures. Fixed by centralizing path in `DriverStore.get_path()`; added `tests/test_upload_export_roundtrip.py` regression test.
- Peewee `datetime.utcnow()` deprecation eliminated (`_utcnow()` helper in `db/models.py`)
- Stale `requirements-completed` frontmatter back-filled on 5 SUMMARY.md files
### Archives
- Roadmap: [`milestones/v1.0-ROADMAP.md`](milestones/v1.0-ROADMAP.md)
- Requirements: [`milestones/v1.0-REQUIREMENTS.md`](milestones/v1.0-REQUIREMENTS.md)
- Audit report: [`milestones/v1.0-MILESTONE-AUDIT.md`](milestones/v1.0-MILESTONE-AUDIT.md)