Skip to content

Commit 23b9854

Browse files
docs/state: closeout freshness — correct counts, refresh machine-readable, add doc index (#46)
Verified factual corrections (independently grepped/counted, not from memory): - Exported FFI symbols 38 -> 40; game profiles 17 -> 18; GUI panels 7 -> 8 (nexus-setup is the 8th) across CLAUDE.md, README.adoc, ROADMAP.adoc, STATE.a2ml. Machine-readable freshness: - STATE.a2ml: last-updated 2026-06-21 + a session-history entry for the #41-#45 CI/governance + Hypatia sweep, recording the outstanding items (branch prune, the stale estate-standardization branch, doc gaps). - NEUROSYM.a2ml: last-updated 2026-06-21 + records .hypatia-ignore as the active suppression mechanism (NOT .hypatia-baseline.json) and the 4ddc926 pins. - CLAUDE.md: Current State dated 2026-06-21 + a CI/Governance bullet. New: - docs/INDEX.adoc — audience-segmented documentation map (users / developers / maintainers) marking what exists and the known gaps, plus the wiki decision. The test-count line (124) is left unchanged pending a verified `zig build test` run (no Zig toolchain in this container); flagged for follow-up. Claude-Session: https://claude.ai/code/session_01LvsZgNxFbeqfRmrVFNhJ8G Co-authored-by: Claude <noreply@anthropic.com>
1 parent adaabd7 commit 23b9854

6 files changed

Lines changed: 102 additions & 13 deletions

File tree

.claude/CLAUDE.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,12 @@ VeriSimDB (8-modality octads) -- container/verisimdb/
7979
- **Backup** (port 8091, `GSA_BACKUP_VERISIMDB_URL`): game save metadata, snapshots, restore points
8080
- **Container images** use Chainguard Wolfi base, Podman, `Containerfile` (never Docker/Dockerfile)
8181

82-
## Current State (2026-06-20)
82+
## Current State (2026-06-21)
8383

8484
- **Completion**: 93% (15 phases built; v1.0.0 gates still open — see Remaining)
85+
- **CI/Governance (2026-06-21, PRs #41#45)**: workflows hardened (Scorecard wrapper job perms, presence-gated instant-sync, CodeQL `actions`, scoped `deno` perms); standards reusable pins at `4ddc926`; Hypatia false positives suppressed via `.hypatia-ignore` (the inert `.hypatia-baseline.json` was removed — `hypatia scan` never applied it); advisory scan at critical=0/high=0. Doc map + gaps: `docs/INDEX.adoc`.
8586
- **Zig version**: 0.15.2 (see `.tool-versions`)
86-
- **Exported FFI symbols**: 38 (comptime linker hints in main.zig)
87+
- **Exported FFI symbols**: 40 (comptime linker hints in main.zig)
8788
- **Tests**: 124 Zig tests across 3 suites (unit: 80, integration: 39, smoke: 5). All passing.
8889
- Security tests for command injection in server_actions
8990
- Config parser edge cases for all 8 formats
@@ -113,8 +114,8 @@ VeriSimDB (8-modality octads) -- container/verisimdb/
113114
|------|-------|
114115
| AI manifest | `0-AI-MANIFEST.a2ml` (read FIRST) |
115116
| State checkpoint | `.machine_readable/6a2/STATE.a2ml` |
116-
| Game profiles | `profiles/*.a2ml` (17 games) |
117-
| GUI panels | `src/gui/panels/` (7 panels) |
117+
| Game profiles | `profiles/*.a2ml` (18 games) |
118+
| GUI panels | `src/gui/panels/` (8 panels) |
118119
| Panel clades | `panel-clades/` (9 base + game children) |
119120
| Ephapax core | `src/core/` (Shell, Bridge, Types, Capabilities) |
120121
| VeriSimDB (main, port 8090) | `container/verisimdb/` |

.machine_readable/6a2/NEUROSYM.a2ml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,19 @@
66

77
[metadata]
88
version = "0.1.0"
9-
last-updated = "2026-03-22"
9+
last-updated = "2026-06-21"
1010

1111
[hypatia-config]
1212
scan-enabled = true
1313
scan-depth = "standard" # quick | standard | deep
1414
report-format = "logtalk"
15+
# Active suppression mechanism (PR #43-#44). NOTE: `.hypatia-baseline.json` is
16+
# NOT honoured by `hypatia scan` — it only excludes the file itself from being
17+
# scanned. The working mechanism is the repo-root `.hypatia-ignore`, consulted
18+
# by Hypatia.ScannerSuppression (code_safety + secret-detection paths).
19+
# Standards reusable pins: 4ddc926 (PR #45).
20+
suppression-file = ".hypatia-ignore"
21+
suppression-scope = "7 reviewed false positives: 2 test-fixture secrets (fuzz_config.zig, .envrc), 3 escaped-markup innerHTML sinks (src/gui/fli/*.js), 1 loopback HTTP URL (template-hunt.k9.ncl), 1 syscall bitCast (probe.zig); plus a self-exemption so the file's own docs are not re-flagged"
1522

1623
[symbolic-rules]
1724
# Custom symbolic rules for this project

.machine_readable/6a2/STATE.a2ml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
[metadata]
77
project = "game-server-admin"
88
version = "0.1.0"
9-
last-updated = "2026-06-20"
9+
last-updated = "2026-06-21"
1010
status = "active"
1111

1212
[project-context]
@@ -24,8 +24,8 @@ milestones = [
2424
{ name = "Phase 2: Idris2 ABI layer (Types, Foreign, Layout)", completion = 100 },
2525
{ name = "Phase 3: Zig FFI layer (probe, extract, emit, VeriSimDB, actions, profiles)", completion = 100 },
2626
{ name = "Phase 4: Ephapax core (Shell, Bridge, Types, Capabilities)", completion = 100 },
27-
{ name = "Phase 5: 17 game profiles (A2ML definitions)", completion = 100 },
28-
{ name = "Phase 6: Gossamer GUI (host + 7 panels)", completion = 100 },
27+
{ name = "Phase 5: 18 game profiles (A2ML definitions)", completion = 100 },
28+
{ name = "Phase 6: Gossamer GUI (host + 8 panels)", completion = 100 },
2929
{ name = "Phase 7: Panel clade definitions (9 clades + 17 game children)", completion = 100 },
3030
{ name = "Phase 8: PanLL integration (registry, engine, clade files)", completion = 100 },
3131
{ name = "Phase 9: VeriSimDB dedicated instance config", completion = 100 },
@@ -64,4 +64,5 @@ sessions = [
6464
{ date = "2026-04-03b", summary = "Security hardening: replaced 427 AGPL-3.0-or-later headers with MPL-2.0, replaced LICENSE with PMPL text. Fixed critical vuln (executeSSH shell injection — refactored to argv slice + -- separator). Fixed temp-file TOCTOU in gossamer-integration-test.sh (mktemp). Removed dangling-ref getWriter function. Replaced hardcoded test credentials. Added escapeXml to fli-gauge.js, escapeHtml+data-tip escaping to fli-tooltip.js, DOM node clone in fli-editable.js cancelEdit. Eliminated all 8 @ptrCast calls across FFI layer (string literals + [N:0]u8 sentinel buffers). Filled K9 template-hunt.k9.ncl TODO placeholders with GSA deployment content. All 111 Zig tests pass. panic-attack: 0 weak points (was 21)." },
6565
{ date = "2026-04-04b", summary = "Nexus Setup GUI panel: full 7-step graphical wizard added as nav item 2 in Gossamer GUI (between Server Browser and Config Editor). src/gui/panels/nexus-setup/panel.html — profile card grid, Steam vanity→Steam64 resolution inline, typed server config form (toggles/sliders/text), SSH deployment target, Steam credentials + live terminal for staging, provisioner live terminal, verify+report with connect string/watchdog CTA. src/gui/panels/nexus-setup/nexus-setup.eph — IPC contract docs. src/core/Bridge.eph — 5 new handlers: handleSteamResolveVanity, handleSteamPlayerInfo, handleNexusStageFiles, handleNexusProvision, handleNexusVerify. src/gui/host.html — wired at 4 locations (nav, container, panels array, switch case + FLI traits + status list). Operator slots pre-filled: pengie5 + hyperpolymath. Committed f26deda, pushed to GitHub." },
6666
{ date = "2026-06-20", summary = "Maintenance pass (axis-1 must>intend>like, axis-2 corrective>adaptive>perfective). CORRECTIVE: re-stamped 24 .zig/.idr source SPDX headers MPL-2.0 -> AGPL-3.0-or-later to match LICENSE + META.a2ml + steam_client.zig (machine-readable .a2ml/.contractile stay MPL by carve-out); filled INTENT.contractile (was raw template — purpose/anti-purpose/architectural-invariants/ask-before-touching/ecosystem). ADAPTIVE: exported-symbol count 24/22 -> 27 (Steam +3, Nexus run_script/write_server_config +2) in CLAUDE.md + ROADMAP; completion 100% -> honest 93% to match ROADMAP; struck stale critical-next-action (Nexus FFI exports already exist at server_actions.zig:573/:713), replaced with the real open item (Ephapax parser gaps); refreshed ROADMAP revdate + April additions. Test counts (111/112, integration 36/39) left for a verified 'zig build test' run — zig not installed in this container." },
67+
{ date = "2026-06-21", summary = "CI/governance + Hypatia advisory sweep (PRs #41-#45). #41: hardened workflows — explicit Scorecard wrapper job permissions (contents:read/security-events:write/id-token:write), presence-gated instant-sync repository-dispatch on FARM_DISPATCH_TOKEN, added CodeQL actions language, scoped run.js/Justfile deno perms (allow-read/run/env), fli-editable.js innerHTML to replaceChildren. #42: refreshed standards reusable pins; fixed a staleness-check grep bug (a reusable-pin token in a comment double-matched the single-pin SHA compare). #43: replaced the inert .hypatia-baseline.json (hypatia scan never applies it — only excludes the file itself) with a working .hypatia-ignore suppressing 7 reviewed false positives (2 test-fixture secrets, 3 escaped-markup innerHTML, loopback HTTP, syscall bitCast). #44: stopped .hypatia-ignore tripping its own secret scanner (self-exempt entry + reworded comments). #45: fixed 7 stale src/abi/ to src/interface/abi/ doc refs (SD022); bumped pins to 4ddc926. Result: advisory scan critical=0/high=0, governance staleness green, Validate-Baseline green-by-skip. Verified .hypatia-ignore matching + the staleness script locally (no Zig/Elixir/Hypatia in container). Outstanding: 10 merged branches need manual git push --delete (the git proxy 403s deletions here); estate-standardization-20260607 (2026-06-07, pre-#38) is stale/superseded (its AGPL migration already landed 2026-06-20) — reconcile before any merge; documentation gaps (user panel guides, dev extension guide, maintainer CI/release runbooks) tracked in docs/INDEX.adoc." },
6768
]

README.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ GSA can attach to _any_ game server, fingerprint it via protocol probing, extrac
2424
----
2525
┌─────────────────────────────────────────────────┐
2626
│ Gossamer GUI (Ephapax + HTML/JS) │
27-
7 panels, each a Clade citizen with inheritance │
27+
8 panels, each a Clade citizen with inheritance │
2828
└────────────────────┬────────────────────────────┘
2929
│ IPC (gossamer:// bridge)
3030
┌────────────────────┴────────────────────────────┐
@@ -69,7 +69,7 @@ just verisimdb-up
6969
# Build and run the CLI
7070
just run status # system status, VeriSimDB health, loaded profiles
7171
just run probe <host> [port] # fingerprint a game server (default port 27015)
72-
just run profiles # list all 17 supported game profiles
72+
just run profiles # list all 18 supported game profiles
7373
7474
# Or build and launch the GUI
7575
just build && just gui

ROADMAP.adoc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ Key capabilities delivered:
1414
* 10 FFI modules: lifecycle, probe, config_extract, a2ml_emit, verisimdb_client, server_actions, game_profiles, groove_client, steam_client, cli
1515
* Protocol fingerprinting (8 protocols, 20+ known ports)
1616
* Config parsing (8 formats: XML, INI, JSON, ENV, YAML, TOML, Lua, KV)
17-
* 17 game profiles (A2ML files in profiles/)
18-
* 7 Gossamer GUI panels + 9 panel clades
17+
* 18 game profiles (A2ML files in profiles/)
18+
* 8 Gossamer GUI panels + 9 panel clades
1919
* VeriSimDB on 2 ports (main 8090, backup 8091 for game saves)
2020
* A2ML serialisation, parsing, and config diff
2121
* Groove voice alerting via .well-known
@@ -44,7 +44,7 @@ Test suites:
4444
* [x] Server actions (start/stop/restart/logs)
4545
* [x] Game profile registry and parser
4646
* [x] Groove client for voice alerting
47-
* [x] Gossamer GUI panels (7 panels)
47+
* [x] Gossamer GUI panels (8 panels)
4848
* [x] Panel clade system (9 base + game children)
4949
* [x] Idris2 ABI definitions (Types, Foreign, Layout)
5050
* [x] VeriSimDB dual-instance deployment (main + backup)

docs/INDEX.adoc

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
= Game Server Admin — Documentation Index
2+
:revdate: 2026-06-21
3+
4+
Audience-segmented map of the GSA documentation. Start here, then pick your role.
5+
6+
[NOTE]
7+
====
8+
Status legend: *live* = written and current; *thin* = exists but covers only
9+
setup/basic-run; *planned* = a known gap, scoped below, tracked for the v1.0.0
10+
documentation pass. See `ROADMAP.adoc` for release gates and `.claude/CLAUDE.md`
11+
for the codebase quick-context.
12+
====
13+
14+
== End users
15+
_You run and administer game servers via the Gossamer GUI and the `gsa` CLI._
16+
17+
[cols="2,1,4"]
18+
|===
19+
| Document | Status | Covers
20+
21+
| `README.adoc` | live | Overview, quick-start, `gsa` CLI reference, supported games
22+
| `USER-CONFIG.md` | live | Nickel config: defaults, favourites, troubleshooting
23+
| `docs/QUICKSTART.adoc` | thin | One-liner pointer — not a real getting-started
24+
| GUI panel guide | *planned* | One section per panel (8: server-browser, config-editor, server-actions, live-logs, health-dashboard, config-history, cross-search, nexus-setup). **`nexus-setup`, the 7-step provisioning wizard, is entirely undocumented.**
25+
| Game-profile selection | *planned* | Which game → which of the 18 profiles; port/protocol table
26+
| Admin workflows | *planned* | Add a server; manage config across servers; roll back via config history
27+
|===
28+
29+
== Developers
30+
_You build GSA, extend it, or contribute code across the Gossamer GUI → Zig FFI → Idris2 ABI → VeriSimDB stack._
31+
32+
[cols="2,1,4"]
33+
|===
34+
| Document | Status | Covers
35+
36+
| `README.adoc` | live | Architecture diagram, module map, "Adding a Game Profile" snippet
37+
| `docs/developer/ABI-FFI-README.adoc` | live | Idris2 ABI + Zig FFI standard; C/Idris2/Rust/Julia examples (strong)
38+
| `TOPOLOGY.md` | live | System architecture + data flow
39+
| `docs/decisions/` | live | Architecture decision records (RSR adoption)
40+
| FFI module reference | *planned* | Per-module docs for the 11 FFI modules (signatures, the 13 result codes, examples)
41+
| Panel extension guide | *planned* | The PanLL clade system; registering a new panel; inheriting base clades
42+
| Game-profile authoring | *thin* | Expand the README snippet: field types, validation, port/protocol, debugging
43+
| Config-format guide | *planned* | How to add a parser to the 8-format `config_extract`
44+
| Architecture rationale | *planned* | Why Ephapax / Idris2 / Zig / VeriSimDB; when to touch each layer
45+
|===
46+
47+
== Maintainers
48+
_You release, run CI/CD, operate containers, and manage governance + security scanning._
49+
50+
[cols="2,1,4"]
51+
|===
52+
| Document | Status | Covers
53+
54+
| `docs/governance/MAINTENANCE-CHECKLIST.adoc` | live | Three-axis model, hygiene, ABI purity, panic-attack (strong)
55+
| `docs/architecture/THREAT-MODEL.adoc` | live | STRIDE, assets, trust boundaries, mitigations
56+
| `docs/DEPLOYMENT-RUNBOOK.adoc` | live | Build, container, VeriSimDB main+backup, health, backup/restore
57+
| `SECURITY.md` | live | Vulnerability reporting
58+
| Release checklist | *planned* | v1.0.0 must/should/could + sign-off criteria
59+
| CI/CD guide | *planned* | `.github/workflows/` structure, standards-estate reusables (pins `4ddc926`), staleness check, adding a check
60+
| Security-scanning runbook | *planned* | Running/interpreting Hypatia + panic-attack + Scorecard; the `.hypatia-ignore` suppression mechanism (NOT `.hypatia-baseline.json` — see `NEUROSYM.a2ml`)
61+
| Container/quadlet ops | *thin* | Expand the runbook: `.container` format, systemd user units, day-to-day ops
62+
|===
63+
64+
== Machine-readable layer
65+
_For AI agents and tooling. Read `0-AI-MANIFEST.a2ml` FIRST._
66+
67+
* `0-AI-MANIFEST.a2ml` — canonical entry point, invariants, startup checklist.
68+
* `.machine_readable/6a2/` — `STATE.a2ml` (status, blockers, session history), `META`, `ECOSYSTEM`, `AGENTIC`, `NEUROSYM` (Hypatia config + `.hypatia-ignore` scope), `PLAYBOOK`.
69+
* `.machine_readable/` contractiles — `INTENT`/`MUST`/`TRUST`/`DUST` (purpose, hard CI rules, trust boundaries, cleanup).
70+
* `.hypatia-ignore` — reviewed false-positive suppressions (the active mechanism).
71+
* `.claude/CLAUDE.md` — human-friendly codebase guide.
72+
73+
== Wiki status
74+
`docs/wikis/` is a stub that declares an intent to sync to a forge-hosted wiki but
75+
is **unpopulated**. The `docs/` tree also carries several empty placeholder
76+
subtrees (`theory/`, `reports/`, parts of `practice/`).
77+
78+
*Decision pending:* either populate `docs/wikis/` and sync it, **or** (recommended)
79+
consolidate all narrative under `docs/` using the three audience paths above and
80+
prune the empty scaffolding. Until then, this index is the single navigation point.

0 commit comments

Comments
 (0)