Import the wilm endpoint-monitor and channel-distribution work

Everything on origin/wilm that is not on the published main, applied as one
change because the published history has rewritten hashes: per-commit
cherry-pick conflicts against our main even though the squashed diff applies
clean.

Contents: endpoint monitor catalog + policy attachment + warn-only drift
reconciler, operator issue reports from the tray, agent launch-path allowlist,
and the GHCR channel-image distribution path for dev workstations.

NOT READY FOR main. Open items:
  - 10 new routes are absent from docs/api-inventory.json, so
    test_api_inventory_parity fails. That gate SKIPS on the published mirror
    (the test ships, its data file is scrubbed), which is why wilm never saw it.
  - dev-bootstrap.ps1 and Start-ShopDBDev.ps1 hardcode the ge-aero GitHub org.
  - plugins/endpoints/plugin.py carries a whitespace-only re-indent.

Scope: product
This commit is contained in:
cproudlock
2026-09-02 10:05:44 -04:00
parent 1480b30e8c
commit 27b2817fd7
76 changed files with 5930 additions and 173 deletions

View File

@@ -1068,17 +1068,28 @@ td.actions .btn + .btn {
}
/* Content Grid */
/* Balanced two-column card flow. Uses CSS multicol (not a hand-assigned
grid) so cards distribute by height and the columns stay even no matter
how many cards land on either side. display:contents flattens the two
.content-column wrappers so their cards flow directly into the columns,
which keeps the existing markup unchanged. */
/* Two-column card layout on an explicit CSS grid rather than multicol.
Multicol was abandoned because a child using column-span: all (the full
width Network Interfaces panel) overlaps the shorter column above it when
the two columns have unequal heights - a known multicol spanning bug. Grid
has no such flaw: short fact cards sit two-up and a full-width panel spans
both tracks cleanly via .pap-span. display:contents flattens the two
.content-column wrappers so their cards become direct grid items, which
keeps the existing markup unchanged. */
.content-grid {
column-count: 2;
column-gap: 25px;
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 25px;
align-items: start;
margin-bottom: 25px;
}
/* Grid supplies the gap; the per-card margin was a multicol-only crutch and
would otherwise double the vertical spacing. */
.content-grid > .section-card {
margin-bottom: 0;
}
.content-column {
display: contents;
}
@@ -1522,7 +1533,7 @@ td.actions .btn + .btn {
}
.content-grid {
column-count: 1;
grid-template-columns: 1fr;
}
.audit-footer {