Commit Graph

111 Commits

Author SHA1 Message Date
benjamin.baker
d68c6db9ab fix endpoints plugin CI failures
Migration tests knew no endpoints head revision, so the parametrized guards raised KeyError. Register it in EXPECTED_HEAD_REVISION.

EndpointState declared lastreportedat both index=True and an explicit db.Index over the same column, and the baseline migration named single-column indexes differently from what create_all builds. On a pre-existing table the name-keyed guard could not see the create_all index and added a duplicate, tripping the idempotency guard. Drop the redundant declaration and rename migration indexes to ix_<table>_<column> to match.

endpoints was absent from the universal site profile, so the installer would not offer it and prune-schema would drop its tables at provisioning. Add it.

The agent design record lived under docs/, which is stripped to the public wiki and normally absent from the tree; a lone file there un-skipped the wiki-publish guards. Move it into the plugin.
2026-08-27 07:10:43 -04:00
benjamin.baker
3deff4f716 Merge remote-tracking branch 'origin/main' into wilm
# Conflicts:
#	frontend/src/views/settings/SiteSettings.vue
2026-08-27 05:45:52 -04:00
0738d71525 Guides image + draft gating, audit retention, ADR-015 gate, backup credential redaction 2026-08-26 15:08:53 -04:00
benjamin.baker
801dfd54ab Merge remote-tracking branch 'origin/main' into wilm
# Conflicts:
#	shopdb/data/catalog.json
2026-08-26 12:53:03 -04:00
f221fba540 Guides: procedures written and read inside ShopDB 2026-08-26 12:42:24 -04:00
271d558f8b An unmeasurable backup must not hide a working one 2026-08-26 10:07:51 -04:00
benjamin.baker
8fd0d725f7 pin computers migration head to azurefields after Entra field merge
The merge of the Entra device-identity work added computers 0002/0003 migrations, advancing the computers head past its anchor. Update the expected-head guard to match so upgrade-all stays green.
2026-08-25 16:53:51 -04:00
benjamin.baker
e2207f2e7c Merge remote-tracking branch 'origin/main' into wilm 2026-08-25 16:48:23 -04:00
benjamin.baker
bdef21da50 add Entra device identity to computers and Azure/Thor import sources
PC records now carry Entra/Azure device identity so imported machines keep a durable link back to their directory object instead of matching on hostname alone. Adds azuredeviceid, azureobjectid, and azuredevicecategory to the Computer model with matching migrations, surfaces them read-only in PCDetail as an Entra Device Info card, and lets PCForm edit the device id directly. The computers plugin registers a machineassetnumber import hook that reconciles PC-to-machine links during bulk import and warns on unresolved or conflicting relationships.

Adds importsources adapters that normalize Azure device-group and Thor PC inventory exports into canonical ShopDB CSVs via hostname alignment, exposes register_import_hook and RowWarning on the shopdb.api contract surface (contract 0.21.0), and refreshes the Import Site Assets page with clearer source instructions. Includes reconcile_locations maintenance script and coverage for the new import paths.
2026-08-25 16:46:00 -04:00
4a5d2122db Repair backup revisions that recorded a mapped drive 2026-08-25 15:00:57 -04:00
8e10584c4d Give the backups plugin a settings page, and show where a snapshot is 2026-08-25 14:53:13 -04:00
fa856c1f94 Judge a PC's backup by its stalest kind, not its newest 2026-08-25 13:56:53 -04:00
f1e265190e Let a share-backed backup say what is in it 2026-08-25 13:52:06 -04:00
1812def14f Catalog dedupe commands, and a seed catalog with no duplicate vendors or models 2026-08-24 14:49:54 -04:00
4fe4e91ae4 Maintenance scripts load .env, so they reach the site's real database 2026-08-24 14:32:38 -04:00
ead9fd6b56 Search results open the record they found; plugin scaffolder emits a prunable frontend 2026-08-24 14:06:14 -04:00
0398c55fb5 Warranty search finds a machine number; the collector can no longer set a printer assignment 2026-08-24 11:52:48 -04:00
f109dd1349 Plugin baselines skip tables that already exist 2026-08-24 09:28:52 -04:00
0b4a1db842 Secure send: guests by setting, and a custom view count 2026-08-21 15:53:42 -04:00
a01f5c1a83 Secure send moves into Tech Tools 2026-08-21 14:18:10 -04:00
4242028270 Secure send: hand somebody a password without leaving it in a chat window 2026-08-21 13:44:34 -04:00
74392ccad2 Only zero is empty, and the last day is worth reading 2026-08-21 11:57:17 -04:00
bbda5cbfe9 A supply nobody could read is unknown, not empty 2026-08-21 11:44:10 -04:00
04107ff8ab Search spelling suggestions across every list 2026-08-21 11:15:06 -04:00
980b2e8be3 Find a knowledge base article by words from different fields 2026-08-21 09:40:14 -04:00
5a58d33623 Fix what the last round of device fixes broke, and two dips it missed 2026-08-21 08:50:00 -04:00
4f0399b8ac A toner rate needs days behind it 2026-08-20 17:23:59 -04:00
ebb86ccf3b Blank asset numbers, contested device claims, and honest toner forecasting 2026-08-20 17:09:02 -04:00
fa88ef0afe Device identity, collector enrollment file, and network device fixes 2026-08-20 15:10:24 -04:00
d267813999 Printer assignment end to end, and a container that keeps a site's files
Assign printers to a MACHINE and let whichever PC controls it install them, with
the observed half kept strictly apart from the assigned half: a collector report
can never write an assignment row. Adoption is explicit. Adds a singular
relationship type so defaultprinter can mean exactly one, client scripts that
converge a bay's queues and correct a drifted one in place, and a wave gate so a
fleet-wide driver rollout cannot stampede its own share.

On the container side: the compose stack never persisted the instance directory,
so a rebuild discarded plugins.json and every upload. It is a volume now, the
image ships instance/ owned by the app user so the mountpoint is writable, and
the database moves to MySQL 8.4 LTS, which the Windows runbook has recommended
since 8.0 went end of life. The image also could not build at all: the frontend
stage never copied the plugin staging script it runs.

Adds a topology migration guide covering IIS to Docker and back.
2026-08-20 07:46:35 -04:00
49f68081c3 Match the optional identifiers in every list's search box 2026-08-17 13:18:26 -04:00
fbd99041b0 Buildings and levels for the floor map, and make every identifier searchable 2026-08-17 13:03:54 -04:00
47fb65fdd2 Release 0.10.0 2026-08-17 08:37:57 -04:00
265ca2eb01 Security hardening, multi-site portability, and a documentation and API-surface sweep 2026-08-14 16:28:34 -04:00
7517146238 Backup hover names the check and the capture separately 2026-08-13 13:35:17 -04:00
376b8df0fb Shadow task fixes, asset link ids, backup verdict 2026-08-13 13:20:24 -04:00
6e0d8aec4e Relationship inverse guard, audit command, widened direction fixer 2026-08-13 12:25:35 -04:00
70c5bced37 Shadow-mode client script and cutover doc correction 2026-08-13 11:23:27 -04:00
3abf724ae6 Stale enforcement reports judge both clocks 2026-08-13 09:54:05 -04:00
5dcc7e30af Display role vocabulary, migration commit fix, stale enforcement reports 2026-08-13 09:30:40 -04:00
d327ea1a5c Self-updating GE-Enforce client module on displays 2026-08-12 17:21:29 -04:00
d6b433e5f4 Kiosks report their display type; whole-chain DDL parity 2026-08-12 17:07:21 -04:00
50578f33bd Full-width GE-Enforce pages; asset column no longer echoes the host 2026-08-12 17:01:10 -04:00
2c822e462d Fix reports 500 on MySQL; enforcement report asset context 2026-08-12 16:49:58 -04:00
ee7f8640d1 Publish gate: refuse a manifest the fleet's enforcer lib cannot read 2026-08-12 15:26:27 -04:00
c0c2982810 One-shot Edge force-update for the shopfloor displays 2026-08-12 12:26:35 -04:00
d32513727b Tech Tools section with a code generator, toner report that names the part, toner forecasting, warranty proof of cover, application uploads 2026-08-12 11:51:38 -04:00
2d19bcdf60 Employee resolve diagnostic 2026-08-11 16:10:21 -04:00
34cb9a5e3e Dashboard polish 2026-08-11 15:28:29 -04:00
f1d46e7ab8 Backup verified column 2026-08-11 15:00:26 -04:00