Commit Graph
168 Commits
Author SHA1 Message Date
kawa e8801ecd34 feat(12-02): add missing translation keys to base.html dictionary
- Add ~60 new keys to both fr and en translation objects (dashboard, printers_new, printer_list, clients, client_detail, drivers, packages, printer_detail, edit_modal)
- Fix test_dashboard_shows_recent_packages to use class-specific empty-state assertion (string now appears in i18n JS dictionary)
2026-04-15 15:47:25 +02:00
kawa 4e23acb586 docs(12-01): complete browser language auto-detection and port autofill test fix
- SUMMARY.md created with TDD execution details and test results
- STATE.md updated with decisions and session info
- ROADMAP.md updated: Phase 12 now shows 1/2 summaries (In Progress)
2026-04-15 15:45:09 +02:00
kawa 2ab53f6ed9 fix(12-01): update test_port_autofill to navigate to /printers/new
- Plan 11-01 moved the add-printer form from /printers to /printers/new
- Update page.goto URL to match the current route
- Comment updated to explain the route change context
2026-04-15 15:43:41 +02:00
kawa 5a02f4c05b feat(12-01): update i18n store lang init to use navigator.language fallback
- Replace hardcoded 'fr' default with IIFE that checks localStorage first
- Falls back to navigator.language: 'en' if starts with 'en', else 'fr'
- localStorage preference always wins over browser language setting
2026-04-15 15:43:15 +02:00
kawa 86637f838e test(12-01): add failing tests for navigator.language auto-detection
- test_navigator_language_en_sets_lang_en: expects lang='en' when locale=en-US and localStorage empty
- test_navigator_language_fr_sets_lang_fr: expects lang='fr' when locale=fr-FR and localStorage empty
- test_localstorage_wins_over_navigator_language: expects localStorage to override navigator.language
2026-04-15 15:42:53 +02:00
kawaandClaude Sonnet 4.6 ef8fbc9692 docs(12-i18n-bugfixes): create phase plan
2 plans: browser lang auto-detection + fix test_port_autofill (wave 1),
full template i18n coverage across 13 templates (wave 2).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 15:18:53 +02:00
kawaandClaude Sonnet 4.6 b0078a4fb2 docs(phase-11): complete phase execution
All 4 plans complete. UIE-01..05 verified (15/15 must-haves). Human-approved.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 15:08:53 +02:00
kawa 1bec899f87 docs(11-04): complete client name navigation plan
- Add 11-04-SUMMARY.md with task results, decision log, self-check passed
- Add deferred-items.md logging pre-existing port_autofill E2E failure
- STATE.md: advance plan, record decisions, update session
- ROADMAP.md: Phase 11 marked 4/4 Complete
2026-04-15 14:54:16 +02:00
kawa 5bf152bcce feat(11-04): add client name links in printer_list.html and client_list.html
- printer_list.html: extract group_client_id from first printer in group;
  wrap client name in <a href="/clients/{id}"> when id present; Unassigned
  group renders as plain text (no dead link)
- client_list.html: wrap client name cell in <a href="/clients/{{ c.id }}">
2026-04-15 14:49:52 +02:00
kawa f3644790be feat(11-04): add GET /clients/{id} route and client_detail.html template
- Add client_detail route in pages.py with 404 on unknown client_id
- Build grouped dict {client.name: [printers]} for printer_list partial reuse
- Pass clients + driver_data for edit modal compatibility
- Create client_detail.html extending base.html, includes printer_list partial
2026-04-15 14:49:12 +02:00
kawa 7b948b68c3 feat(11-02): UIE-01 edit modal — Edit button per row, Pico dialog, E2E tests
- Create printer_edit_modal.html: native dialog with HTMX PATCH form, Alpine.js portEdited=true
- Update printer_list.html Actions td: include edit modal partial before Delete button
- Create tests/e2e/test_printer_edit.py: modal open/pre-fill and submit/list-update E2E tests
- Fix E2E row targeting to use locator(tr, has=a:has-text) for session-scoped server safety
2026-04-15 11:10:44 +02:00
kawa 4db15d6986 test(11-03): E2E tests for theme and language toggle (UIE-04, UIE-05)
- test_theme_cycles_on_click: verifies auto->light->dark cycling via aria-label selector
- test_theme_persists_across_reload: verifies localStorage persistence of chosen theme
- test_language_toggle_switches_nav_label: verifies FR->EN nav label switch (Imprimantes->Printers)
- test_language_persists_across_reload: verifies localStorage persistence of chosen language
2026-04-15 11:09:38 +02:00
kawa 3353f4546c feat(11-03): Alpine.js theme + i18n stores in base.html with top-right controls
- Add Alpine.store('theme') for Light/Dark/System cycling with localStorage persistence
- Add Alpine.store('i18n') with FR/EN translations for all static UI strings
- Add topbar with theme toggle button (:aria-label, @click cycle) and lang button
- Wrap main content in .main-wrapper + .topbar for layout structure
- Add .main-wrapper, .topbar, .topbar-controls styles to app.css
- Add test_theme_toggle_present integration test
- Fix test_dashboard_shows_recent_printers assertion (string now in i18n JS too)
2026-04-15 11:08:52 +02:00
kawa 4b212b6da9 feat(11-02): PATCH /printers/{id} route handler and updated _render_printer_list
- Add PATCH /{printer_id} route with validation and in-place update
- Optional ip_address/port_name fall back to existing values when not sent
- updated_at set explicitly on save (datetime.now(UTC))
- Update _render_printer_list to include clients and driver_data in context
- Import Driver at module level for use in both handler and helper
2026-04-15 11:08:02 +02:00
kawa c00ac80e6c docs(11-01): complete UIE-02 plan — Add Printer page separation
- Create 11-01-SUMMARY.md with full execution record
- Update STATE.md: advance plan to 3, add decisions, update session
- Update ROADMAP.md: phase 11 progress to 1/4 summaries (In Progress)
2026-04-15 11:05:23 +02:00
kawa 3d2cdc4e77 feat(11-01): UIE-02 — dedicated Add Printer page at GET /printers/new
- Create imptune/templates/printers_new.html: full page extending base.html
  with plain <form action="/printers" method="post"> (no HTMX, browser follows 303)
  and inline driver upload sub-form
- Update imptune/templates/printers.html: remove inline Add Printer form,
  add <a href="/printers/new" role="button">Add Printer</a> link
- Add GET /printers/new route in imptune/api/pages.py (placed before /{printer_id})
- Change POST /printers to always return RedirectResponse(url='/printers', status_code=303)
- Update existing POST /printers tests to assert 303 + follow_redirects=False
- Update test_printer_form.py to check /printers/new instead of /printers (UIE-02 arch)
- UIE-02 tests GREEN; UIE-01/03 scaffolds remain RED (expected — not yet implemented)
2026-04-15 11:03:41 +02:00
kawa a02df7d292 test(11-01): add Wave 0 RED scaffolds for UIE-01/02/03
- Add 8 new test functions: printers_new_returns_200, create_printer_redirects,
  printers_library_no_form, patch_printer, patch_printer_not_found,
  client_detail_returns_200, client_detail_not_found, client_links_in_printer_list
- Add FIXME comments on existing POST /printers tests noting upcoming 303 change
- All new tests FAIL against current code (proper RED TDD state)
- Existing 13 tests remain GREEN
2026-04-15 11:00:55 +02:00
kawaandClaude Sonnet 4.6 0badba20d1 docs(11): create phase plan
Plan 4 plans across 3 waves covering UIE-01..05: form separation
(Plan 01), printer edit modal (Plan 02), theme+i18n toggles (Plan 03),
and client detail page (Plan 04). Wave 0 test scaffolds included in Plan 01.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 10:47:19 +02:00
kawaandClaude Sonnet 4.6 5a2dd0c13c docs(phase-11): add validation strategy and research
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 10:40:41 +02:00
kawaandClaude Sonnet 4.6 df01919220 docs(11): research UI enhancements phase domain
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 10:39:48 +02:00
kawa e726cab548 docs(state): record phase 11 context session 2026-04-15 10:33:10 +02:00
kawa b0df0619b1 docs(11): capture phase context 2026-04-15 10:33:04 +02:00
kawaandClaude Sonnet 4.6 036b048705 docs(phase-09): complete phase execution and human sign-off
All 3 UX defects fixed, 11/11 must-haves verified, human-approved.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 09:52:43 +02:00
kawaandClaude Sonnet 4.6 70454c8e14 docs(09-02): complete playwright-port-autofill plan
- STATE.md: advance to plan 2, record UX-02 closure decisions
- ROADMAP.md: Phase 9 now 3/3 summaries (Complete)
- Task commits already in history: 4e9bd9b (scaffolding) + 322fc20 (test)
- 1 Playwright test green: test_port_autofill[chromium] PASSED in 5.49s
- 113 unit tests unaffected

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 17:46:38 +02:00
kawaandClaude Sonnet 4.6 fb7555e6b5 docs(09-01): complete driver-upload-fix-and-inline-oob plan
- STATE.md: advance to Phase 09-01 active, completed_plans=15
- ROADMAP.md: Phase 8 marked Complete 8/8, Phase 9 progress row fixed
- All 3 tasks complete: 500 regression fixed, OOB template created, printer form wired
- 113 tests passing (pytest tests/ -x -q --ignore=tests/e2e)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 17:42:47 +02:00
kawa f32c99dfbf docs(phase-08): complete Nyquist validation track (45/45 pass, human sign-off) 2026-04-13 16:39:27 +02:00
kawa ffcc3be3aa docs(08-08): complete v1.0 validation index rollup plan
- Create 08-08-SUMMARY.md (Phase 8 closure, NYQ track complete)
- Advance STATE.md (Phase 8 ready_for_verification, 27/30 plans complete)
- Update ROADMAP.md Phase 8 progress to 8/8 Complete
2026-04-13 16:36:14 +02:00
kawa 732582021a docs(08-08): human sign-off on v1.0-VALIDATION-INDEX.md (NYQ-02/03 complete)
- Flip v1.0-VALIDATION-INDEX.md frontmatter draft -> signed-off (Sébastien QUEROL, 2026-04-13)
- Tick index sign-off line (45/45 pass, 0 fail-fix-v1.1)
- Replicate dated sign-off line into all 7 per-phase VALIDATION.md Validation Sign-Off blocks
- Tick nyquist_compliant checkbox in phases 01/02/03/04/05/07 (06 already ticked)
- Upgrade Approval lines phases 01-05 from 'pending' to signed-off with index back-link
- Tick REQUIREMENTS.md NYQ-02/NYQ-03 and flip Traceability Pending -> Complete
- Phase 4 attestation-only runtime gap recorded in index Residual Risk block (not reopened per plan 10-03 sign-off)
2026-04-13 16:36:08 +02:00
kawa 192a64d574 docs(08-08): compile v1.0-VALIDATION-INDEX rollup (45/45 pass, draft)
- Flat table with one row per v1.0 success criterion across Phases 1-7
- Tally: 45/45 pass, 0 fail-fix, 0 deferred, 0 wont-do
- Gap validation block cross-checks all 5 historical-gap closures against REQUIREMENTS.md + fixing SUMMARY.md
- Attestation-gap residual risk (SCRPT-01..05 / RTVAL-02/03/04) documented explicitly for Phase 11 rollout
- Sign-off line unchecked (draft), frontmatter status=draft pending Task 2 human verification
2026-04-13 16:24:39 +02:00
kawa dc70acf5f2 docs(08-07): complete Phase 7 Nyquist audit plan
- 4/4 pass (3 in-scope + 1 UX-03 carry-over to Phase 9)
- per-phase NYQ-01 coverage complete (7/7 v1.0 phases, 45 rows, 0 roll-forward)
- STATE advanced to plan 8 (final 08-08 rollup remaining)
2026-04-13 16:20:34 +02:00
kawa 7e78b1714e docs(08-07): add Phase 7 Nyquist Record (4/4 pass)
- 3 in-scope rows for /packages 200, dashboard recent printers, dashboard recent packages
- 1 carry-over row for UX-03 (Phase 5 origin, closed in Phase 9 / 09-03)
- cites TDD commits 8cf47f5 + 91910ad (Phase 7) and d359001 + 68a2935 (Phase 9 UX-03)
- completes per-phase NYQ-01 coverage across all 7 v1.0 phases (45 total audit rows)
2026-04-13 16:18:15 +02:00
kawa 9c52cb45c2 docs(08-06): complete Phase 6 Nyquist audit plan
- SUMMARY.md documents 1-row Nyquist Record (PKG-04 icon embedding)
- Bidirectional gap-closure citation loop with 05-VALIDATION row 4
- RTVAL-01 cited as supporting transitive runtime evidence
- STATE advanced to plan 7, ROADMAP Phase 08 progress 6/8
2026-04-13 16:15:42 +02:00
kawa bb62174917 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
2026-04-13 16:14:09 +02:00
kawa 885b0ea8a3 docs(08-05): complete Phase 5 Nyquist audit plan
- SUMMARY.md: PKG-02 is only artifact-backed runtime row (RTVAL-01)
- PKG-04 icon-embedding historical gap closed via Phase 6 citation
- Fix commits 74535ea + 7716246 surfaced as audit-trail highlight
- STATE.md + ROADMAP.md advanced to plan 06 (5/8 complete)
2026-04-13 16:12:13 +02:00
kawa cecf9171b0 docs(08-05): add Phase 5 Nyquist Record to 05-VALIDATION.md
- 5 rows (PKG-01..05), all pass
- PKG-02 row cites RTVAL-01 artifact-backed tenant PASS on rubis.fr
  (commits 74535ea + 7716246 flipped initial FAIL to PASS)
- PKG-04 row records Phase 6 icon-embedding gap closure in place
- Frontmatter: nyquist_compliant true, nyquist_audited 2026-04-13
2026-04-13 16:10:08 +02:00
kawa 800fa76a6d docs(08-04): complete Phase 4 Nyquist audit plan
- Add 08-04-SUMMARY.md with 5/5 pass outcome
- Faithfully records Phase 10 RTVAL-02/03/04 attestation-only gap in Notes
- Update STATE.md (advance plan, add decision, record session)
- Update ROADMAP.md Phase 08 progress (4/8 summaries)
2026-04-13 16:07:15 +02:00
kawa 60654afc8e docs(08-04): add Phase 4 Nyquist Record to 04-VALIDATION.md
- 5 rows: one per SCRPT-01..05 success criterion
- All rows pass at template level (pytest-backed)
- SYSTEM-context rows (SCRPT-01/02/03/04/05) cite Phase 10 RTVAL-02/03/04
  with explicit attestation-only caveat per STATE.md 2026-04-13
- Frontmatter: nyquist_compliant true, nyquist_audited 2026-04-13
2026-04-13 16:05:40 +02:00
kawa e9e95e74c5 docs(08-03): complete Phase 3 Nyquist audit plan 2026-04-13 16:03:32 +02:00
kawa 3f03b35bf2 docs(08-03): add Phase 3 Nyquist Record to 03-VALIDATION.md
- 10 rows (one per PRNT-01..10 success criterion), all pass
- Row 3 (PRNT-03 Alpine.js IP->port) closed as pass citing Phase 9 UX-02
  Playwright fixing commits 322fc20 (test) + 37a06da (docs)
- Frontmatter: nyquist_compliant true, nyquist_audited 2026-04-13,
  nyquist_auditor Claude (gsd-executor, plan 08-03)
- Preserves Test Infrastructure, Sampling Rate, Per-Task Verification Map,
  Wave 0, Manual-Only Verifications, Validation Sign-Off verbatim
2026-04-13 16:02:13 +02:00
kawa 0cbc757874 docs(08-02): complete Phase 2 Nyquist audit plan
- 08-02-SUMMARY.md (6/6 pass rows, historical-gap closure pattern)
- STATE.md advanced to plan 3/8; decision logged
- ROADMAP.md Phase 8 progress 2/8 summaries
2026-04-13 16:00:08 +02:00
kawa dff5a9c4a5 docs(08-02): add Phase 2 Nyquist Record (6 rows, all pass)
- Append Nyquist Record table to 02-VALIDATION.md (DRV-01..05 + upload-500 historical gap)
- Flip frontmatter nyquist_compliant=true; add nyquist_audited + nyquist_auditor
- Row 6 records the Phase 8 kickoff POST /drivers/upload 500 as pass via Phase 9 / UX-01 fixing commits (d1de839, 10ee09a, 72c6a98)
- Follows the 08-01 precedent (Phase 1 row 14 closed via Phase 10 RTVAL-01)
2026-04-13 15:58:52 +02:00
kawa 42ec015a16 docs(08-01): complete Phase 1 Nyquist audit plan
- Add 08-01-SUMMARY.md (14/14 pass, NYQ-01 ticked)
- STATE.md advanced to Phase 08 plan 02/8
- ROADMAP.md phase 08 progress updated via gsd-tools
- REQUIREMENTS.md NYQ-01 marked complete
2026-04-13 15:56:42 +02:00
kawa d37a196ee7 docs(08-01): add Phase 1 Nyquist Record to 01-VALIDATION.md
- Append ## Nyquist Record table above Validation Sign-Off
- 14 rows: one observable check per Phase 1 success criterion (derived from v1.0-ROADMAP.md goal + plan outcomes)
- Evidence cites committed tests (test_health, test_static, test_db, test_intunewin), source file:lines, commit SHAs, or 01-VERIFICATION.md rows
- Row 14 closes former 'Upload to real Intune tenant' spike: fail-fix-v1.1 -> resolved PASS citing Phase 10 RTVAL-01 sign-off (2026-04-13)
- Frontmatter: nyquist_compliant true, nyquist_audited 2026-04-13, nyquist_auditor set
- All historical sections preserved verbatim
2026-04-13 15:55:13 +02:00
kawa 7b37bdbb4a docs(phase-08): create Nyquist validation track phase plan (8 plans, sequential) 2026-04-13 15:45:52 +02:00
kawaandClaude Opus 4.6 442b7d680a docs(phase-11): close rollout phase on operator attestation
Technician confirmed real-world rollout: ImpTune ran in its local Docker
container, generated printer packages were delivered end-to-end via BOTH
Intune and NinjaRMM to real endpoints, and all tested installs succeeded
with no blocking items to triage.

Closes RWR-01..04. Attestation-only (mirrors Phase 10 accepted gap) -
no artifact evidence captured.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 14:50:05 +02:00
kawa 43081c6828 docs(phase-11): create rollout phase plan (deploy, push, feedback triage) 2026-04-13 14:42:20 +02:00
kawa cd2df1e163 docs(10-03): complete report-signoff plan and close Phase 10
- Mark Phase 10 complete in ROADMAP.md (3/3 plans, 2026-04-13)
- Create 10-03-report-signoff-SUMMARY.md with attestation-gap closure note
- Update STATE.md: plan 10-03 complete, Phase 10 closed, next is phase 8 or 11
- REQUIREMENTS.md RTVAL-01..05 ticks already landed in 10-02 completion commit (idempotent)
2026-04-13 14:32:24 +02:00
kawa 5685fd97dc docs(phase-10): human sign-off on RUNTIME-VALIDATION.md (attestation gap acknowledged)
- Status flipped from READY FOR SIGN-OFF to SIGNED OFF
- Signed off by Sébastien QUEROL on 2026-04-13
- All three sign-off checkboxes ticked
- Reviewer explicitly acknowledged attestation-only audit-trail gap for RTVAL-02/03/04
- Only RTVAL-01 is artifact-backed; RTVAL-02/03/04 accepted on technician attestation
2026-04-13 14:30:45 +02:00
kawa d05b87aafa docs(10-03): finalize RUNTIME-VALIDATION.md report body for sign-off
- Status moved from IN PROGRESS to READY FOR SIGN-OFF
- RTVAL-01 evidence converted to markdown relative links (tenant-upload, app-assigned, .intunewin package)
- Sign-off section rewritten to surface attestation-only audit trail damage prominently
- Three sign-off checkboxes restructured to force explicit reviewer acknowledgement of RTVAL-02/03/04 attestation-only nature
- Compensating controls block added (known device, known tenant, single session, known-good generator)
- Duplicate Signed off by header removed from top; consolidated in Sign-off section
2026-04-13 14:27:18 +02:00
kawa 206648c360 docs(10-02): complete live-intune-runtime-validation plan
- SUMMARY.md documents all 4 RTVAL runtime checks recorded on rubis.fr / ARES-5CG5220YTM
- RTVAL-01 artifact-backed PASS (after fixing HMAC scope + Detection.xml defects)
- RTVAL-02/03/04 attestation-only PASSes — three consecutive; user warned twice, approved
- SUMMARY.md flags attestation-only audit-trail damage prominently for wave-3 + phase verifiers
- STATE.md advanced; next plan is 10-03 (sign-off and phase closure)
- ROADMAP.md plan progress updated for phase 10
- REQUIREMENTS.md: RTVAL-01..04 marked complete
2026-04-13 14:25:19 +02:00