Commit Graph
69 Commits
Author SHA1 Message Date
spencermandClaude Fable 5.1 ae185f7913 Boards: column frame about three cards tall (700 px cap)
ci / frontend (push) Successful in 34s
ci / server (push) Successful in 19m49s
ci / e2e (push) Failing after 19s
ci / image (push) Successful in 32s
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-17 15:39:29 -06:00
spencermandClaude Fable 5.1 3a78dc8dd6 Boards: columns scroll inside a screen-high frame with a sticky heading
ci / frontend (push) Successful in 35s
ci / server (push) Successful in 7m22s
ci / e2e (push) Failing after 18s
ci / image (push) Successful in 32s
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-17 15:25:47 -06:00
spencermandClaude Fable 5.1 e9dd3f205b Referrer-Policy same-origin: Firefox sent Origin: null under no-referrer and sign-in was refused as cross-origin
ci / frontend (push) Successful in 34s
ci / server (push) Successful in 7m35s
ci / e2e (push) Failing after 16s
ci / image (push) Successful in 32s
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-17 12:32:44 -06:00
spencermandClaude Fable 5.1 b638f0c2f2 DEPLOY: run doctor with compose run, not exec; test stack first start notes
ci / frontend (push) Successful in 37s
ci / server (push) Successful in 7m32s
ci / image (push) Successful in 13s
ci / e2e (push) Failing after 6s
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-17 12:26:46 -06:00
spencermandClaude Fable 5.1 fea7cc8839 DEPLOY: SHA-1 certificate issue resolved; CA switched to SHA-256 and the DC and relay certificates reissued
ci / frontend (push) Successful in 34s
ci / server (push) Successful in 7m30s
ci / image (push) Successful in 13s
ci / e2e (push) Failing after 6s
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-17 12:21:15 -06:00
spencermandClaude Fable 5.1 94008ceed0 scripts: Export-PescoCaBundle.ps1 exports the PESCO CA chain from Windows and copies it to docker-1
ci / frontend (push) Successful in 35s
ci / server (push) Successful in 18m3s
ci / image (push) Successful in 13s
ci / e2e (push) Successful in 1m44s
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-17 12:04:10 -06:00
spencermandClaude Fable 5.1 c244a684b2 DEPLOY: the internal CA and the DC and relay certificates are SHA-1; test stack layout under the home folder
ci / frontend (push) Successful in 35s
ci / server (push) Successful in 16m49s
ci / image (push) Successful in 16s
ci / e2e (push) Successful in 1m50s
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-17 12:00:17 -06:00
spencermandClaude Fable 5.1 5a4174e0c2 Phase 5: Supervisor and Stall screens, weld map, heat table, clock and CO verification
ci / frontend (push) Successful in 34s
ci / server (push) Successful in 7m15s
ci / image (push) Successful in 39s
ci / e2e (push) Successful in 2m4s
The shop at parity with the old build. Supervisor screen (department chips, CO headline, numbers, Change orders
on hold, station grid with clocks and CO tags, boards) and Stall screen (station picker, hero, My packets,
Submitted). Shop steps on the packet page: assign with station, welder picker and stamp; pull back; Start, Pause,
Resume; Submit with a PIN signature and the missing steps as links; review with Send to Q.C., Return to station
and Skip Q.C. route; a lead's read-only review. Weld map (pdf.js viewer with pan, pinch, zoom, full screen; marks
with leader lines; weld sheet; weld record with field CAS; carried marks). Heat map (heat table placed, dragged,
sized, removed; legacy amber tags; borrowed heat map read-only). Checklist tab with templates from settings.
VOID stamps on voided pages. Change orders: CO-n labels, supervisor verify with signature, approval copies the
heat table to the new sheet and the BOM merge keeps the shop's values. Server clock of record with VISUAL ticket
hours beside it. Presence per packet over SSE. Migration 0006 (bfx, bfy, carried_from, checklist_templates).
New endpoints /api/shop/board, /api/shop/stations, /api/shop/stall, /api/departments/{code}/people.

Tests: policy oracle for every shop action, role and status; clock arithmetic; concurrent inserts; CO apply;
frontend geometry, heat table, clock, checklist, weld sheet, screens; seven Playwright scenarios. Docs updated.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-16 22:46:56 -06:00
spencermandClaude Fable 5.1 39a4eb5213 Phase 4: Warehouse screen, pull table, shorts, MTRs and the upload pipeline
ci / frontend (push) Successful in 30s
ci / server (push) Successful in 4m30s
ci / image (push) Successful in 35s
ci / e2e (push) Successful in 1m40s
The Warehouse home with the numbers, the Open shorts table, the find bar and the five-column task board
(waiting, being pulled, on hold, pulled, released in the last 3 days) with buttons, hold reasons and drag.
Every role sees the warehouse stage on a packet as the WH pill and the line under it. The pull table on the
Materials tab: Pulled with auto-start, issued, location, heat with Enter to the next line, shorts with
receipts, N/A, MTR per line with a viewer. Send back to Clerical with a reason. Release to supervisor stays
blocked until every line is pulled or short and every pulled line has a heat.

Server: the heats_recorded precondition on WH_RELEASE, receive by custody, server-validated hold and short
reasons, the old packet history texts, GET /api/warehouse/board, cards with the warehouse stage and pull
counts. Uploads typed by content per kind (drawing, mtr, document, bom with XLSX and CSV), limits per kind,
optional ClamAV behind the clamav compose profile, a storage quota alert on the new notification_events
table (migration 0005) shown on the Admin Storage tab.

Tests: every warehouse action as every role, the release gate, the short-receive exception, the heat
pattern, upload sniffing and limits, the ClamAV path with a fake scanner, the quota alert; frontend board
and pull table tests; Playwright scenarios for the board and the pull flow. Verified on docker-1 in the CI
stack: 3557 server tests, 106 frontend tests, 17 Playwright scenarios. Docs updated; D5 closed.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-16 17:13:31 -06:00
spencermandClaude Fable 5.1 591fe90076 Phase 3: VISUAL feed and M-Files drawings in the worker
ci / frontend (push) Successful in 30s
ci / server (push) Successful in 4m12s
ci / image (push) Successful in 46s
ci / e2e (push) Successful in 1m24s
Migration 0004 (VISUAL and drawing caches, go-live ignored list, resource
map, job tables, order-derived columns with provenance; work order key
includes the operation sequence). The real worker on APScheduler with
settings re-read each fire, pause, run now, advisory locks, job_runs and a
heartbeat. The visual-feed job (five VisualKit reads, COPY and MERGE cache,
suspect-batch guard, the apply in one transaction: drafts, change orders,
retire-moved, work order gone, closed and cancelled observed, projects and
units from order links, auto-release) and the fingerprint. The drawing-lookup
job (queue, budget, download on version change, sha256 into assets, decision
table, staging for rev approval, drawing-origin change orders). Clerical From
VISUAL panel, flags, rev approval, hand uploads, change-order review; Admin
Feed settings and resource map. Synthetic fixture generator and a
fixture-driven worker in CI with a Playwright scenario. Docs updated.

Verified: 3249 server tests and 13 Playwright scenarios on the docker-1 CI
stack, 76 frontend tests, doctor at 0004; one feed and one drawing run
against VISUAL DEV and the vault from the developer machine (counts in the
changelog).

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-16 14:45:38 -06:00
spencermandClaude Fable 5.1 16950055e3 CI: run the image job after the registry secrets were saved
ci / image (push) Canceled after 0s
ci / e2e (push) Canceled after 0s
ci / server (push) Canceled after 1m56s
ci / frontend (push) Canceled after 17s
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-16 11:02:13 -06:00
spencermandClaude Fable 5.1 0b4b5dab80 CI: run the image job with the registry secrets in place
ci / frontend (push) Successful in 24s
ci / server (push) Successful in 2m38s
ci / image (push) Successful in 56s
ci / e2e (push) Successful in 1m12s
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-16 11:00:43 -06:00
spencermandClaude Fable 5.1 6ac62c0bd0 Docs: the Gitea runner runs the full workflow, e2e included; open question 15 resolved
ci / frontend (push) Successful in 25s
ci / server (push) Successful in 2m41s
ci / image (push) Failing after 8s
ci / e2e (push) Successful in 1m12s
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-16 10:56:09 -06:00
spencermandClaude Fable 5.1 0dfe856f17 Runner: reachable actions cache on docker0:8088, allow the workspace bind in valid_volumes
ci / frontend (push) Successful in 1m6s
ci / server (push) Successful in 3m46s
ci / e2e (push) Successful in 1m48s
ci / image (push) Failing after 2m34s
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-16 10:48:02 -06:00
spencermandClaude Fable 5.1 c5b0c11c0c Runner: host-directory job workspace (bind_workdir) so the e2e compose stack can bind-mount the checkout
ci / frontend (push) Successful in 10m10s
ci / server (push) Successful in 12m54s
ci / e2e (push) Failing after 43s
ci / image (push) Failing after 2m57s
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-16 10:29:47 -06:00
spencermandClaude Fable 5.1 0df0ea62e9 Gitea Actions runner for docker-1 (deploy/runner), DEPLOY.md and PLAN.md notes
ci / frontend (push) Successful in 10m18s
ci / server (push) Successful in 13m14s
ci / e2e (push) Failing after 39s
ci / image (push) Failing after 3m5s
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-16 10:05:40 -06:00
spencermandClaude Fable 5.1 37d9a0cb50 Phase 2: core domain, policy engine, packet API, Clerical screen
Migration 0003: projects, aliases, renumbers, units, packets and every child table,
change orders, assets, documents, ITPs, station limits, department weld flag.
Policy package: Principal, PacketState, Action rules, custody, preconditions,
CO hold, order of checks, can/blocked/holder on reads. docs/POLICY.md with the
tightenings table for Seth. Write pipeline: FOR UPDATE, CAS on status and dept,
If-Match row versions, server-assigned numbers, field CAS, version bump, packet
log, audit, NOTIFY, signatures, IT reasons, filed lock and HMAC seal.
API: /api/packets (header, transitions, work orders, pages, docs, move, remove,
BOM, shorts, welds, heat tags, heat table, stage, checklist, clock, warehouse
stage, Q.C., change orders, log, seal), /api/projects, /api/units, /api/assets,
/_blob. Frontend: Clerical home, projects and units, packet page with pdf.js
and QR codes, hand draft, heat map, send to warehouse, department or Q.C.
Tests: policy matrix, API, concurrency, schema, projects; Playwright Clerical
draft scenario. Verified on docker-1 with the CI stack and the Samba DC.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-16 09:31:45 -06:00
spencermandClaude Fable 5.1 97b0973130 Phase 1: identity, sessions, audit, frontend shell
AD sign-in over LDAPS (search with the service account, bind as the user,
nested groups through LDAP_MATCHING_RULE_IN_CHAIN, disabled accounts refused),
roles as the union of PS-* groups mapped by a table derived from the seeded
departments. Server-side sessions with idle, lock and absolute timeouts, Origin
and X-Requested-With check, step-up unlock. Optional Argon2id PIN set with the
domain password; PIN sign-in by employee ID on registered devices only; five
wrong attempts disable the PIN, three wrong at unlock or signature end the
session. Rate limits per account and per address before any bind. Devices,
signatures table and sign helper, audit rows for every identity event, SSE over
LISTEN/NOTIFY with presence. Account settings and Admin APIs and screens
(AD view, devices, PIN clearing, group map with missing-group flags, refresh
from AD now). CLI ad-groups --list and ad-refresh. Migration 0002.

Frontend: real sign-in (password tab, PIN keypad on registered devices), lock
screen, role switcher, Account settings, Admin shell, screen placeholders.

CI: Samba AD DC container (PSTEST.LOCAL) with a generated CA, 49 of the 50
groups plus one extra, 17 test users; wired into the CI compose overlay and
the Gitea workflow; Playwright sign-in scenario.

Verified on docker-1: 171 server tests green inside the CI stack against
PostgreSQL and the Samba DC, 48 frontend tests, 8 Playwright scenarios against
the live stack (password and PIN sign-in, lock and unlock, Admin group map).
Findings recorded in the docs: the DC needs CAP_SYS_ADMIN, a hidden tab locks
only after a minute as the old build did,
and the app uses the alias ps-app for Playwright because "app" is on
Chromium's HSTS preload list.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-16 07:40:29 -06:00
spencermandClaude Fable 5.1 0b663bb2b2 Phase 0: repo skeleton, image, compose stacks, doctor, migration runner, frontend shell
New repo for the Packet Station rebuild (Python 3.12, FastAPI, PostgreSQL 16,
React, VisualKit, MFilesKit, Docker Compose on docker-1). Nothing is migrated
from the M: install.

- CLAUDE.md with the safety rules, README, CHANGELOG, docs (BRIEF, PLAN,
  SECURITY rewritten for the server with the requirement ID table, DEPLOY,
  stubs for FEED, POLICY, SCHEMA, GO-LIVE, PAPER-FALLBACK).
- packetstation CLI: app, worker (heartbeat stub), migrate, doctor, version,
  healthcheck. Settings from the environment with secret files. Stack guard
  (test never points at VISUAL production). Security headers and CSP.
  Trusted proxy resolved by name. JSON logs with redaction.
- Migration runner and 0001_base: settings, append-only audit_events with
  hash chain, ps_notify, grants for ps_app.
- Multi-stage Dockerfile (ODBC Driver 18, PESCO libraries from the Gitea
  index only), compose base, proxy overlay for npm_default, CI overlay,
  postgres initdb roles, env examples, NPM proxy host notes, Gitea Actions.
- Frontend: Vite, React, TypeScript, the PESCO dark theme ported with
  self-hosted fonts, placeholder sign-in and home.
- Verified on docker-1: image builds, CI stack comes up healthy, doctor
  database checks pass, 77 server tests pass against PostgreSQL.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-15 23:08:47 -06:00