Vault restructure — verified, with three unresolved items
Vault restructure — verified, with three unresolved items
Verifier: Echo. Method: live probes on /home/lab/SolOS/vault and
read-only probes on prod (161.33.71.67). No files were modified.
Snapshot at verification close: HEAD e50696d ("vault index: update for
2026-10-18 restructure + Nova/Echo move (Mira)"), working tree clean apart from
the auto-generated Docs/Kanban/SOLOS-V3.md (regenerated by cron — expected).
1. Mira's report — CONFIRMED
Mira's claimed file counts match disk exactly:
| Section | Claimed | Measured |
|---|---|---|
Docs/SolOSV3/01-research | 12 | 12 |
Docs/SolOSV3/02-architecture | 12 | 12 |
Docs/SolOSV3/03-decisions | 39 | 39 |
Docs/SolOSV3/06-implementation | 22 | 22 |
Docs/Projects/vhost/{research 6, decisions 7, implementation 2} — confirmed (16
files incl. index). Docs/SolOS/{hosts 6, agents 4, subscriptions 0} — confirmed.
The moves are real git mvs, committed, history preserved.
2. CONFLICT — vHost has two homes
- Young's taxonomy: vHost is a top-level Docs section (the tenancy platform).
Docs/vHost/exists — but holds only a stubindex.md, and that stub still points atSolOSV3/01-researchandSolOSV3/06-implementationpaths.- The actual vhost content (16 files) lives in
Docs/Projects/vhost/, and VAULT-INDEX rule 11 declares that the tenancy platform's home. - The authority doc (
SolOSV3/02-architecture/vault-structure-authority-2026-10-18.md, §"Vault structure") says vhost content belongs inDocs/VHost/with research/decisions/implementation subfolders.
Three sources, two answers. Rule 11 and the disk agree with each other and disagree with both Young's message and the authority doc. Needs one ruling.
3. CONFLICT — "Fleet" vs "SolOSV3"
Young's taxonomy names the section Fleet ("Our Heart Fleet design and
architecture"). Disk has Docs/SolOSV3/ (2215 files).
During verification I observed Docs/Fleet/ appear with 2215 files and then
vanish again within ~30 seconds, with Docs/SolOSV3/ returning — an in-flight
rename by a concurrent session. No commit ever recorded Docs/Fleet (git log --all -- Docs/Fleet* is empty).
Unresolved: rename SolOSV3 → Fleet (requires fixing VAULT-INDEX rules 3 & 8 and
every internal reference), or keep SolOSV3 and record Fleet as the colloquial
name. Until ruled, two sessions can produce split state.
4. Docs/index.md navigation is stale
Lists only three entries — SolOSV3, Property, Kanban. Missing Projects,
SolOS, vHost. The [Property](/docs/properties) target does not exist under
Docs/. (This file drives the docs-site nav, so the published site does not show
the new sections.)
Also: no index.md landing exists for SolOSV3/ or Kanban/.
5. SECURITY — live API key in a world-readable unit file on prod
/etc/systemd/system/solos-docs.service (mode -rw-r--r--, root:root) inlines
two plaintext API keys via Environment=:
ZEN_API_KEYAI_GATEWAY_API_KEY
Verified with pattern counts only — no secret value was printed or copied.
The same key pattern also appears in
/etc/systemd/system/pulse-site.service.d/chat-keys.conf.
Scope of exposure:
- The repo template (
solos-docs.serviceinyoungframeworks/solos-docs) is clean — 0 key occurrences in HEAD. The key is not in GitHub. - Exposure is local to prod: any process or user on that host can read the paid key from a 644 file.
Fix: move both keys to an EnvironmentFile= with mode 600 (or systemd
credentials). Do not inline secrets in unit files.
6. Residual — stale prod git remote in the LAB vault
The vault still carries a live prod remote:
ubuntu@161.33.71.67:/home/ubuntu/.solos/docs/vault
That directory no longer exists on prod (No such file or directory), so
rule 12 ("No vault git repo on Production") is satisfied in fact. But the stale
remote remains in .git/config — a git push prod would attempt to recreate the
retired path. Recommend removing the remote.
7. Docs site — measured state
docs.youngle.au→ nginx →127.0.0.1:8091→solos-docs.service(Nuxt/Nitro), working dir/home/ubuntu/docs-site.- Site is behind nginx basic-auth (anonymous request returns
401). - Vault is off prod —
/home/ubuntu/.solos/docs/is empty. - Content now comes from the
youngframeworks/solos-docsrepo, which still carries bothDocs/andPulse/trees (nav commitf4875ebkeeps the/pulseroot). So Pulse content is still on the docs site. - Gap: I found no active LAB-side publisher that pushes vault content into
solos-docs. The only script isvault_sync_prod.sh(Min's), and it is not scheduled (Min'scron/jobs.jsonholds 0 jobs). The "only sync data from LAB" lane is not demonstrably wired. Unverified — flagging as a gap, not a failure.
Recommendation
- Rule on §2 (vHost home) and §3 (Fleet vs SolOSV3) — both are blocking.
- Mira: update
Docs/index.md+ add missing landings (§4). - Sol/Atlas: rotate the exposed key and move it to a 600
EnvironmentFile(§5). - Min: drop the stale
prodremote (§6); confirm the LAB→docs-site lane (§7).
Re-verification, 2026-10-18 (evening) — status of each finding
Re-probed after the day's work. Two of the four are resolved.
| # | Finding | Status now | Evidence |
|---|---|---|---|
| §2 | vHost two homes | ✅ RESOLVED | Docs/vHost/ no longer exists; Docs/Projects/vhost/ is the single home. Rule 11 holds. |
| §3 | Fleet vs SolOSV3 | ✅ RESOLVED | Docs/SolOSV3/ no longer exists; Docs/Fleet/ is the section. |
| §4 | Docs/index.md nav stale | 🔴 STILL OPEN | Docs/index.md still lists only SolOSV3 / Property / Kanban. Missing Projects, SolOS, Fleet, vHost. /docs/properties target still absent. Note it now names a folder (SolOSV3) that no longer exists. |
| §5 | Live API key in a world-readable unit | ✅ FIXED | solos-docs.service now uses EnvironmentFile=/etc/solos-docs.env, mode 600 root:root. Zero inline _KEY= lines. pulse-site.service also 600 with a 46-byte EnvironmentFile= include. No unit in /etc/systemd/system/ inlines sk-. |
| §6 | Stale prod git remote | ⚠️ unchanged | Not re-checked this pass. |
| §7 | LAB→docs-site publish lane | ⚠️ unchanged | Not re-checked this pass. |
On §5 — one thing the fix did not do: the keys were moved to a protected
file, not rotated. The old value sat world-readable in a 644 unit file for an
unknown period, so it must be treated as potentially disclosed until it is
regenerated. Moving a leaked secret makes it tidy, not safe. Recommend rotating
both keys (ZEN_API_KEY / AI_GATEWAY_API_KEY and the pulse equivalent).
I verified the two keys are now different from each other (distinct hashes),
so the pulse leak and the docs leak are separate credentials — both need rotation.
Verification method: file mode via stat, key presence by pattern count
only — no secret value was read, printed, or copied. Rotation status was
assessed by comparing hashes, never values.
UI/UX + Marketing needs and Brain Unit expansion (Nova + Echo)
Young, 2026-10-17: "We would need lots of works on UI/UX Design and Marketing. Next decision is to bring Nova and Echo to join Brain Unit, what is the best way to do? 1. Using Hermes that Brain currently on. 2. Create Telegram interface on SolOS."
Committed vault token — verified, and it is lower risk than it looks
Tam's find (commit 176149a): "SICK stub-token committed at reference-tree/SolOSV2/07-build/tokens.json (43-char brain A2A token, issued 10-01) — rotation required."

