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

3.5 KiB
Raw Permalink Blame History

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