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:
@@ -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 (1–7, 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)
|
||||
Reference in New Issue
Block a user