@zerwiz/ymir 0.1.26 → 0.1.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/.agents/skills/groa-update/SKILL.md +30 -0
  2. package/CHANGELOG.md +44 -0
  3. package/README.md +47 -8
  4. package/bin/fixes-guard.sh +112 -0
  5. package/bin/fixes.sh +157 -0
  6. package/bin/ymir.js +35 -0
  7. package/docs/fixes/agents/unversioned-2026-09-11-chat-uses-the-root-pi-model-catalog.md +15 -0
  8. package/docs/fixes/agents/unversioned-2026-09-11-shared-well-for-every-harness-no-mock-clickable-memories.md +26 -0
  9. package/docs/fixes/agents/unversioned-2026-09-13-gleipnir-sees-when-an-agent-is-turned-off.md +26 -0
  10. package/docs/fixes/agents/unversioned-2026-09-14-the-eindri-brokk-wake-bridge-they-can-talk-back-now.md +23 -0
  11. package/docs/fixes/agents/unversioned-2026-09-16-a-sandboxed-worker-cannot-think-auto-stops-killing-agent.md +18 -0
  12. package/docs/fixes/agents/unversioned-2026-09-17-agents-md-states-the-one-law-no-private-data-in-the-publ.md +25 -0
  13. package/docs/fixes/agents/unversioned-2026-09-17-every-figure-loads-the-agent-directory-was-never-read.md +25 -0
  14. package/docs/fixes/agents/unversioned-2026-09-17-pi-gets-its-agents-and-a-dead-extension-comes-back.md +26 -0
  15. package/docs/fixes/agents/unversioned-2026-09-17-the-well-as-tools-ymir-s-first-custom-pi-extension.md +20 -0
  16. package/docs/fixes/gate/0.1.28-fixes-guard-replaces-the-changelog-gate.md +7 -0
  17. package/docs/fixes/gate/0.1.28-the-changelog-system-is-replaced-by-fix-notes.md +8 -0
  18. package/docs/fixes/gate/0.1.28-the-frozen-changelog-becomes-per-component-notes.md +9 -0
  19. package/docs/fixes/hlidskjalf/unversioned-2026-09-11-automate-the-install-consent-gate-self-healing-prereqs-v.md +21 -0
  20. package/docs/fixes/hlidskjalf/unversioned-2026-09-11-single-tenant-workspaces-shipped.md +15 -0
  21. package/docs/fixes/hlidskjalf/unversioned-2026-09-13-the-cloth-reaches-all-three-halls-hlidskjalf-sm-ja-the-s.md +25 -0
  22. package/docs/fixes/hlidskjalf/unversioned-2026-09-16-one-login-for-every-app-on-the-web-the-gate-fronts-them-.md +24 -0
  23. package/docs/fixes/hlidskjalf/unversioned-2026-09-16-the-credential-reaches-the-gate-and-the-hall-stops-leaki.md +23 -0
  24. package/docs/fixes/hlidskjalf/unversioned-2026-09-16-the-delivery-gates-install-themselves-rename-drift-mende.md +22 -0
  25. package/docs/fixes/hlidskjalf/unversioned-2026-09-16-the-panels-that-crashed-the-gate-that-lied-and-the-well-.md +25 -0
  26. package/docs/fixes/hlidskjalf/unversioned-2026-09-17-0-1-14-the-panels-reach-the-gate-and-the-fourth-window-s.md +9 -0
  27. package/docs/fixes/hlidskjalf/unversioned-2026-09-17-models-providers-and-paths-are-the-user-s-and-the-gate-s.md +26 -0
  28. package/docs/fixes/hlidskjalf/unversioned-2026-09-17-the-northstar-gate-runs-nightly-the-platform-door-it-cau.md +16 -0
  29. package/docs/fixes/hoard/unversioned-2026-09-16-every-app-wears-its-own-rune.md +27 -0
  30. package/docs/fixes/hoard/unversioned-2026-09-16-hodd-lives-outside-the-repo-and-the-installer-makes-it-s.md +24 -0
  31. package/docs/fixes/hoard/unversioned-2026-09-16-the-icons-are-real-runes-now-eight-of-them-were-drawings.md +33 -0
  32. package/docs/fixes/hoard/unversioned-2026-09-17-0-1-26-published-and-the-vault-door-named.md +8 -0
  33. package/docs/fixes/hoard/unversioned-2026-09-17-one-well-in-the-hoard-every-reader-of-kaia-s-memory-reso.md +23 -0
  34. package/docs/fixes/hoard/unversioned-2026-09-17-skrymir-opens-the-hoard-not-the-checkout.md +18 -0
  35. package/docs/fixes/hoard/unversioned-2026-09-17-the-hoard-encrypts-its-secrets-at-rest.md +20 -0
  36. package/docs/fixes/hoard/unversioned-2026-09-17-the-hoard-gets-a-guard-and-rule-04-stops-contradicting-t.md +19 -0
  37. package/docs/fixes/hoard/unversioned-2026-09-17-the-home-s-re-laid-layout-taught-to-the-system.md +17 -0
  38. package/docs/fixes/hoard/unversioned-2026-09-17-the-private-home-gets-the-ward-it-never-had.md +25 -0
  39. package/docs/fixes/hoard/unversioned-2026-09-17-the-schedule-is-the-user-s-cron-leaves-the-tree-lives-in.md +27 -0
  40. package/docs/fixes/install/0.1.28-a-stale-install-can-no-longer-hide.md +8 -0
  41. package/docs/fixes/install/unversioned-2026-09-11-desktop-shell-tunnel-and-temporary-auth.md +14 -0
  42. package/docs/fixes/install/unversioned-2026-09-11-smooth-install-provider-choice-no-forced-key-real-prereq.md +22 -0
  43. package/docs/fixes/install/unversioned-2026-09-16-apodex-joins-the-weave-research-planning-provider.md +27 -0
  44. package/docs/fixes/install/unversioned-2026-09-16-icons-the-operator-can-pin-and-one-pair-of-hands-for-the.md +29 -0
  45. package/docs/fixes/install/unversioned-2026-09-16-the-desktop-never-dials-out-cloudflare-stays-outside-ele.md +25 -0
  46. package/docs/fixes/install/unversioned-2026-09-17-0-1-12-the-icons-reach-the-live-tree-and-a-missing-surfa.md +10 -0
  47. package/docs/fixes/install/unversioned-2026-09-17-0-1-8-the-day-s-work-reaches-npm.md +25 -0
  48. package/docs/fixes/install/unversioned-2026-09-17-a-stale-install-cannot-hide-and-the-one-liner-cannot-be-.md +9 -0
  49. package/docs/fixes/install/unversioned-2026-09-17-both-shapes-a-clone-and-an-npm-install-and-the-patience-.md +26 -0
  50. package/docs/fixes/install/unversioned-2026-09-17-gr-a-knows-the-npm-half-how-to-renew-the-published-packa.md +9 -0
  51. package/docs/fixes/install/unversioned-2026-09-17-npm-only-the-hall-answers-on-its-own-port-and-the-marks-.md +27 -0
  52. package/docs/fixes/install/unversioned-2026-09-17-the-apps-leave-the-monorepo-installation-pulls-them-from.md +23 -0
  53. package/docs/fixes/install/unversioned-2026-09-17-the-doors-the-cloth-and-the-icons-that-were-not-there.md +27 -0
  54. package/docs/fixes/install/unversioned-2026-09-17-the-editor-stops-being-banished-to-its-own-desktop.md +18 -0
  55. package/docs/fixes/install/unversioned-2026-09-17-the-four-surfaces-arrive-by-npm-and-an-old-tree-gives-up.md +24 -0
  56. package/docs/fixes/install/unversioned-2026-09-17-the-house-gains-an-unpublish-door.md +19 -0
  57. package/docs/fixes/install/unversioned-2026-09-17-the-icons-reach-the-live-tree-and-a-missing-surface-is-a.md +26 -0
  58. package/docs/fixes/install/unversioned-2026-09-17-the-install-asks-with-a-plan-and-the-operator-s-things-l.md +24 -0
  59. package/docs/fixes/install/unversioned-2026-09-17-the-installer-actually-installs-the-whole-platform-then-.md +9 -0
  60. package/docs/fixes/install/unversioned-2026-09-17-the-installer-has-a-design-of-its-own.md +9 -0
  61. package/docs/fixes/install/unversioned-2026-09-17-the-npm-door-stands-the-surfaces.md +13 -0
  62. package/docs/fixes/install/unversioned-2026-09-17-the-one-liner-the-readme-promised-and-it-sets-the-path.md +9 -0
  63. package/docs/fixes/install/unversioned-2026-09-17-ymir-command-not-found-is-a-path-fault-and-here-is-the-c.md +8 -0
  64. package/docs/fixes/install/unversioned-2026-09-18-the-readme-leads-with-the-doors-that-work.md +13 -0
  65. package/docs/fixes/odrerir/unversioned-2026-09-14-rerir-forged-eindri-odrerir-pane-w3-p7.md +12 -0
  66. package/docs/fixes/odrerir/unversioned-2026-09-17-the-live-hall-s-board-becomes-true-the-snapshot-lands-on.md +18 -0
  67. package/docs/fixes/runtime/unversioned-2026-09-11-gleipnir-lock-pid-binding-fix.md +17 -0
  68. package/docs/fixes/runtime/unversioned-2026-09-11-hardcoded-per-page-feeds-header-stream.md +19 -0
  69. package/docs/fixes/runtime/unversioned-2026-09-11-per-page-rolling-40-message-feeds.md +13 -0
  70. package/docs/fixes/runtime/unversioned-2026-09-11-smi-ja-views-are-repo-local.md +17 -0
  71. package/docs/fixes/runtime/unversioned-2026-09-11-stats-1-1-kaia-chat-forge-prompts.md +23 -0
  72. package/docs/fixes/runtime/unversioned-2026-09-11-the-well-is-real-mimirsbrunn-engram.md +21 -0
  73. package/docs/fixes/runtime/unversioned-2026-09-12-fleet-preferences.md +11 -0
  74. package/docs/fixes/runtime/unversioned-2026-09-12-house-law-rules-and-the-grein-naming.md +11 -0
  75. package/docs/fixes/runtime/unversioned-2026-09-12-r-preference-moved-out-of-the-tracked-tree.md +10 -0
  76. package/docs/fixes/runtime/unversioned-2026-09-12-the-dashboards-stop-crash-looping-on-the-igpu.md +20 -0
  77. package/docs/fixes/runtime/unversioned-2026-09-12-the-well-actually-installs-it-never-did.md +23 -0
  78. package/docs/fixes/runtime/unversioned-2026-09-12-updater-forged-credential-moved-to-env.md +12 -0
  79. package/docs/fixes/runtime/unversioned-2026-09-14-a-vacant-helm-is-entered-not-punted-watcher-wake-repair.md +24 -0
  80. package/docs/fixes/runtime/unversioned-2026-09-14-the-echo-guard-no-wake-flood-through-gn-s-door.md +18 -0
  81. package/docs/fixes/runtime/unversioned-2026-09-16-app-packaging-prepared-under-the-ymir-scope-amendment-c-.md +23 -0
  82. package/docs/fixes/runtime/unversioned-2026-09-16-four-readers-that-still-pointed-at-the-pre-split-world.md +26 -0
  83. package/docs/fixes/runtime/unversioned-2026-09-16-no-blue-the-forge-language-replaces-the-old-blue.md +26 -0
  84. package/docs/fixes/runtime/unversioned-2026-09-16-omarchy-first-host-aware-windows-and-macos-get-a-door.md +25 -0
  85. package/docs/fixes/runtime/unversioned-2026-09-16-smi-ja-moves-into-the-app-tree.md +17 -0
  86. package/docs/fixes/runtime/unversioned-2026-09-16-the-changelog-guard-no-push-ships-untold.md +19 -0
  87. package/docs/fixes/runtime/unversioned-2026-09-16-the-core-senses-the-real-host-not-omarchy-s-shadow.md +23 -0
  88. package/docs/fixes/runtime/unversioned-2026-09-16-the-hearth-spreads-one-fire-three-more-surfaces.md +25 -0
  89. package/docs/fixes/runtime/unversioned-2026-09-16-the-loader-stops-deleting-merge-never-overwrite.md +27 -0
  90. package/docs/fixes/runtime/unversioned-2026-09-16-the-mesh-reaches-teams-and-anchor-and-show-stops-guessin.md +24 -0
  91. package/docs/fixes/runtime/unversioned-2026-09-17-0-1-10-the-hall-answers-on-its-port-and-the-marks-land.md +15 -0
  92. package/docs/fixes/runtime/unversioned-2026-09-17-0-1-11-four-surfaces-their-marks-and-a-door-that-mends.md +18 -0
  93. package/docs/fixes/runtime/unversioned-2026-09-17-glitnir-stops-hanging-and-one-process-is-one-row.md +15 -0
  94. package/docs/fixes/runtime/unversioned-2026-09-17-main-is-repaired-and-the-report-wears-the-cloth.md +25 -0
  95. package/docs/fixes/runtime/unversioned-2026-09-17-not-again-and-four-surfaces-in-one-raise.md +26 -0
  96. package/docs/fixes/runtime/unversioned-2026-09-17-smoke-test-all-ui-two-checks-that-lied-about-their-own-s.md +20 -0
  97. package/docs/fixes/runtime/unversioned-2026-09-17-the-changelog-stops-conflicting-fragments-folded-by-a-sc.md +25 -0
  98. package/docs/fixes/runtime/unversioned-2026-09-17-the-doors-written-down-where-a-user-will-find-them.md +20 -0
  99. package/docs/fixes/runtime/unversioned-2026-09-17-the-duplicate-extensions-removed-from-the-project-tree.md +17 -0
  100. package/docs/fixes/runtime/unversioned-2026-09-17-the-extensions-deployed-without-their-modules.md +23 -0
  101. package/docs/fixes/runtime/unversioned-2026-09-17-the-feed-follows-brokk-s-thinking-past-the-composer.md +17 -0
  102. package/docs/fixes/runtime/unversioned-2026-09-17-the-fleet-stops-colliding-a-grid-fan-and-each-smith-s-ow.md +21 -0
  103. package/docs/fixes/runtime/unversioned-2026-09-17-the-fork-stands-the-machine.md +12 -0
  104. package/docs/fixes/runtime/unversioned-2026-09-17-the-fragment-convention-is-enforced-where-github-runs-it.md +26 -0
  105. package/docs/fixes/runtime/unversioned-2026-09-17-the-layout-swept-every-reader-taught-the-new-doors.md +24 -0
  106. package/docs/fixes/runtime/unversioned-2026-09-17-the-model-that-raised-itself-and-the-workhorse-that-repl.md +26 -0
  107. package/docs/fixes/runtime/unversioned-2026-09-17-the-package-shipped-the-memory-well-one-version-now-excl.md +26 -0
  108. package/docs/fixes/runtime/unversioned-2026-09-17-the-phantom-optional-pins-cut.md +9 -0
  109. package/docs/fixes/runtime/unversioned-2026-09-17-the-sweep-and-the-door-that-mends-itself.md +26 -0
  110. package/docs/fixes/sessrumnir/unversioned-2026-09-12-the-editor-keeps-its-own-seat.md +16 -0
  111. package/docs/fixes/sessrumnir/unversioned-2026-09-13-sessr-mnir-the-seat-hall.md +28 -0
  112. package/docs/fixes/sessrumnir/unversioned-2026-09-13-the-carved-cloth-reaches-the-seat-hall-sessr-mnir.md +27 -0
  113. package/docs/fixes/sessrumnir/unversioned-2026-09-13-the-new-tree-the-mesh-the-seat-hall.md +25 -0
  114. package/docs/fixes/sessrumnir/unversioned-2026-09-13-the-realm-seat-carved-wayof.md +24 -0
  115. package/docs/fixes/sessrumnir/unversioned-2026-09-16-apodex-seat-verified-the-weave-mended.md +27 -0
  116. package/docs/fixes/sessrumnir/unversioned-2026-09-16-the-visualizer-finds-its-db-and-the-seat-hall-actually-b.md +22 -0
  117. package/docs/fixes/sessrumnir/unversioned-2026-09-17-0-1-13-the-re-voiced-seat-arrives-and-the-packages-are-l.md +8 -0
  118. package/docs/fixes/sessrumnir/unversioned-2026-09-17-sessr-mnir-stops-wearing-pi-s-clothes.md +23 -0
  119. package/docs/fixes/sessrumnir/unversioned-2026-09-17-the-hearth-re-seeds-on-its-container-sessr-mnir-s-chat-f.md +23 -0
  120. package/docs/fixes/sessrumnir/unversioned-2026-09-17-the-packaged-seat-carries-the-watch.md +11 -0
  121. package/docs/fixes/sessrumnir/unversioned-2026-09-17-the-readme-lists-the-packages-and-the-pin-moves-to-the-r.md +16 -0
  122. package/docs/fixes/sessrumnir/unversioned-2026-09-17-the-seat-s-name-and-the-visualizer-s-home.md +12 -0
  123. package/docs/fixes/skills/unversioned-2026-09-11-galdr-tyr-assets-symlink-not-copies.md +11 -0
  124. package/docs/fixes/skills/unversioned-2026-09-11-load-the-owning-asset-before-editing-a-governed-path-5-l.md +21 -0
  125. package/docs/fixes/skills/unversioned-2026-09-11-omarchy-first-host-skills-machine-learning-native-fixes.md +27 -0
  126. package/docs/fixes/skills/unversioned-2026-09-13-the-imported-names-leave-the-halls-norse-naming-purge.md +26 -0
  127. package/docs/fixes/skills/unversioned-2026-09-16-gunnl-joins-the-hall-skillopt-integration.md +17 -0
  128. package/docs/fixes/skills/unversioned-2026-09-16-one-skills-tree-every-harness-the-config-stomp-mended.md +25 -0
  129. package/docs/fixes/skills/unversioned-2026-09-16-the-skill-loading-audit-wrong-skills-unloaded-the-index-.md +26 -0
  130. package/docs/fixes/skills/unversioned-2026-09-17-0-1-9-both-shapes-reach-the-registry.md +17 -0
  131. package/docs/fixes/skills/unversioned-2026-09-17-midgard-holds-public-assets-only-the-company-wiki-is-gon.md +23 -0
  132. package/docs/fixes/skills/unversioned-2026-09-17-the-forge-speaks-each-skill-s-own-text-in-the-index.md +16 -0
  133. package/docs/fixes/skills/unversioned-2026-09-17-the-local-git-round-joins-the-loom-the-stack-s-doors-are.md +19 -0
  134. package/docs/fixes/skills/unversioned-2026-09-17-the-registry-says-where-a-repo-lives-and-what-it-is-for.md +20 -0
  135. package/docs/fixes/smidja/unversioned-2026-09-16-the-pane-bridge-keeps-its-quoting-phase-3-verified.md +22 -0
  136. package/docs/fixes/smidja/unversioned-2026-09-16-the-roster-can-finally-run-an-agent-on-pi.md +23 -0
  137. package/docs/fixes/smidja/unversioned-2026-09-16-the-roster-s-effect-lands-and-the-backend-pin-stops-bein.md +19 -0
  138. package/docs/fixes/smidja/unversioned-2026-09-16-the-validator-stops-calling-a-dead-visualizer-healthy.md +20 -0
  139. package/docs/fixes/smidja/unversioned-2026-09-17-the-fleet-was-a-rack-of-terminals-now-it-is-the-roster.md +18 -0
  140. package/docs/fixes/smidja/unversioned-2026-09-17-the-plan-learns-the-smithy-s-package-name-and-the-instal.md +25 -0
  141. package/docs/fixes/smidja/unversioned-2026-09-17-the-smithy-can-see-the-well.md +20 -0
  142. package/docs/fixes/smidja/unversioned-2026-09-17-the-smithy-s-dependency-names-the-package-npm-will-actua.md +20 -0
  143. package/package.json +1 -1
@@ -0,0 +1,21 @@
1
+ ## runtime · unversioned · 2026-09-17 — the fleet stops colliding: a grid fan, and each smith's own house
2
+
3
+ ### Why
4
+ - **The Fleet graph collided above ~8 agents.** `Fleet.tsx` fanned every
5
+ non-hub agent into a single two-row line at ~4.4% pitch on 46px rings — with
6
+ 20 roster cards the rings and labels overlapped into an unreadable pile.
7
+ `layout()` now fans a square-ish grid (`cols = ceil(sqrt(n))`, hub at top,
8
+ rows pitched past ring+label), so 20 agents render separated.
9
+ - **Every ring showed the same rune.** `bin/hlidskjalf-agents.sh` hardcoded
10
+ `domain: ymirlabs` for every card and its roster parser never read the
11
+ `domain:` frontmatter each figure carries — so all twenty cards wore the
12
+ anonymous ᛦ. The roster now parses `domain:` and passes it through;
13
+ `galdr.md` names its house (`brokkforge`); the graph falls back to
14
+ `DOMAINS.ymirlabs` only when a domain is genuinely unknown (was a crash)
15
+ — and the `AgentCard` already fell back safely.
16
+
17
+ galdr-reread: `.agents/skills/galdr-ymirsystem/assets/hlidskjalf-ui.md` — the
18
+ Fleet graph paragraph (grid fan, roster domains, fallback).
19
+
20
+ ### Files
21
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,12 @@
1
+ ## runtime · unversioned · 2026-09-17 — the fork stands the machine
2
+
3
+ ### Why
4
+ - **`config/app-repos.yaml` (public)** — the five app repos, the fork's road:
5
+ a fresh clone with no hoard registry falls back to this map in the installer's
6
+ `apps` step, so `git clone` + `bin/ymir-install.sh` pull the four surfaces as
7
+ they would on the author's seat. Verified on a clean clone (`ymir-plan.sh`:
8
+ hlidskjalf/odrerir/sessrumnir/smidja all `DO`). The hoard registry stays
9
+ authoritative when present.
10
+
11
+ ### Files
12
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,26 @@
1
+ ## runtime · unversioned · 2026-09-17 — the fragment convention is enforced where GitHub runs it
2
+
3
+ ### Why
4
+ - **The gap, found by doing it.** The pre-push hook folds fragments before a
5
+ push — but a **GitHub merge bypasses the local hook entirely**. PR #43 merged
6
+ and left its own fragment unfolded on `main`, so the ledger silently fell
7
+ behind what the fragments already told. `bin/changelog-assemble.sh --check`
8
+ catches exactly that state; nothing was calling it.
9
+ - **The gate, at the layer that runs.** `.github/workflows/ymir-changelog-fragments.yml`:
10
+ - **on `push` to main** — `bin/changelog-assemble.sh --check` fails when any
11
+ fragment is unfolded, so the ledger can never fall behind a merge.
12
+ - **on a PR** — a change touching code or docs must add a fragment, edit
13
+ `CHANGELOG.md`, or carry the `no-changelog` label. The label records the
14
+ deliberate decision that no entry belongs, rather than letting it be
15
+ forgotten.
16
+ - **The pattern is the standard one.** This is the well-trodden "news fragments"
17
+ design (towncrier — Twisted, pytest, pip, attrs; changesets; CPython). The
18
+ zeroc-ice proposal states the root cause exactly: *"PRs edit one shared file.
19
+ Better merge discipline doesn't fix it; not editing the shared file does."*
20
+ - **`merge=union` was considered and rejected on evidence.** The Rigor ADR-105
21
+ tried it and measured it: *"GitHub's PR-mergeability and merge computation
22
+ ignore `.gitattributes` merge drivers, union included."* It works against local
23
+
24
+
25
+ ### Files
26
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,24 @@
1
+ ## runtime · unversioned · 2026-09-17 — the layout swept: every reader taught the new doors
2
+
3
+ ### Why
4
+ - **bin/nornir-job-observer.sh** — masterplan, runes ledger, and the well now
5
+ resolve to the hoard homes (`hodd/docs/masterplan.md`,
6
+ `hodd/memory/runes_audit.md`, `hodd/memory/well`), overridable via
7
+ `BROKK_MASTERPLAN`/`BROKK_WELL_DIR`.
8
+ - **bin/saga-session-start.sh** — the Sága digest's open-orders read follows
9
+ the home (`hodd/docs/masterplan.md`).
10
+ - **bin/nornir-job-daily-briefing.sh** — message/comment paths updated to the
11
+ same doors.
12
+ - **bin/docs-guard.sh** — block message names both new homes (hodd/docs,
13
+ memory/plans).
14
+ - **.agents/agents/{brokk,forseti-reviewer,mimir-planner}.md** — the plan
15
+ shelf, masterplan, and append-only log pointers moved to their hoard
16
+ homes (`memory/plans/<domain>/`, `hodd/docs/*`).
17
+ - **.agents/skills/{tyr-check,ymir-host,ratatoskr-a2a}/SKILL.md** — the same
18
+ pointers, plus the Ratatoskr spec → `memory/plans/mesh/25-ratatoskr-a2a.md`
19
+ and `hodd/docs/a2a-runs.md`.
20
+ - **docs/workspaces.md** — status note: workspaces settled under
21
+ `hodd/workspaces/` (2026-09-17).
22
+
23
+ ### Files
24
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,26 @@
1
+ ## runtime · unversioned · 2026-09-17 — the model that raised itself, and the workhorse that replaced it
2
+
3
+ ### Why
4
+ - **A model raised itself at login and killed the session.** `qwen3-6-35b-a3b`
5
+ carried `[Install] WantedBy=default.target`, so systemd started it at
6
+ 12:36:33; with `--no-mmap` on a unified-memory APU the weights were
7
+ unreclaimable, memory and swap drained, and the kernel's global OOM killer took
8
+ `gnome-shell` — and the Ymir stack with it. `local-models.md` §4 gains
9
+ **three traps** from this (anonymous load on unified memory; backend chosen by
10
+ reputation rather than measurement; reasoning configured through the chat
11
+ template), and a new **§12** states the rule: a model service unit must never
12
+ raise itself.
13
+ - **`§11 — Reasoning is a resource you must configure`** is new. Unbounded
14
+ reasoning fails *totally* — no answer at all — not merely worse. The same model
15
+ on the same request produced clean, degenerate (repetition), or unterminated
16
+ output depending only on how reasoning was configured. Prefer the engine's
17
+ native budget flag; the chat-template keyword is a different mechanism.
18
+ - **Seated a new local workhorse** (a 176B-parameter MoE, Vulkan backend, MTP
19
+ speculative decoding, file-backed load). Measured before seating: prefill and
20
+ decode both at parity with the reference stack for this silicon. The per-host
21
+ record belongs in the hoard, not here — §6.
22
+ - **Ran a 32-run A/B on guidance during reasoning** (counsel at the moment of
23
+ failure vs counsel u
24
+
25
+ ### Files
26
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,26 @@
1
+ ## runtime · unversioned · 2026-09-17 — the package shipped the memory well (one version, now excluded)
2
+
3
+ ### Why
4
+ - **The exposure.** `@zerwiz/ymir@0.1.5` carries five files that are nobody's but
5
+ the operator's: `.agents/memory/kaia.engram`, its `-shm` and `-wal` sidecars, and
6
+ `.agents/memory/well/{episodes,workspace}.jsonl`. A public npm tarball contained
7
+ the live memory well — the store and the episodes. Verified by fetching the
8
+ published artefact and listing it; `0.1.0`–`0.1.4` are clean, and this branch's
9
+ build is clean.
10
+ - **The cause, and it is a trap worth naming.** `.gitignore` excludes
11
+ `.agents/memory/kaia.engram*` and `.agents/memory/well/*.jsonl`, and the repo is
12
+ clean — but **npm does not consult `.gitignore` when `files[]` names a whole
13
+ directory.** `files: [".agents/"]` packs that subtree *including* the ignored
14
+ files. Nothing warned: the leak travelled in the artefact, not the repo.
15
+ - **The fix.** The manifest excludes them explicitly, because a `files[]` list
16
+ cannot rely on the ignore file it overrides:
17
+ `!.agents/memory/kaia.engram*`, `!.agents/memory/well/*.jsonl`,
18
+ `!.agents/memory/*.db`, plus `!**/__pycache__/` and `!**/*.pyc` for the compiled
19
+ junk that was travelling the same way. Verified: `npm pack --dry-run` carries
20
+ 864 files and **no** memory store — the memory README and the ledger's scaffold
21
+ header are all that remain, as they should be.
22
+ - **The rule for every future package:** a `files[]` entry that names a directory
23
+ overrides `.giti
24
+
25
+ ### Files
26
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,9 @@
1
+ ## runtime · unversioned · 2026-09-17 — the phantom optional pins, cut
2
+
3
+ ### Why
4
+ - The platform's stale \`optionalDependencies\` (sessrumnir pinned at the broken
5
+ 0.1.9) shadowed the required \`^0.1.10\` — npm never fetched the good seat.
6
+ Removed; the required deps now resolve to latest (0.1.18).
7
+
8
+ ### Files
9
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,26 @@
1
+ ## runtime · unversioned · 2026-09-17 — the sweep, and the door that mends itself
2
+
3
+ ### Why
4
+ - **A retired name is swept from the launcher.** `ymir-visualizer.desktop` and its
5
+ icon pointed at a glyph nobody ships — a blank square for anyone who knew the old
6
+ name. `design-icon.sh install` removes retired entries now (`ymir-visualizer`,
7
+ and `ymir-hlidskjalf-mobile` where that app is not installed).
8
+ - **`ymir hlidskjalf` mends the Electron runtime itself.** npm gates install
9
+ scripts by default, so a fresh install can build the web app perfectly and have
10
+ no window. The door now runs the repair it used to *describe*
11
+ (`npm install-scripts approve electron` + `npm rebuild electron`), and only then
12
+ refuses — with both the manual command and the honest alternative
13
+ (`ymir install --no-desktop`).
14
+ - **Two faults are provably in the app repos, not here** (recorded so nobody hunts
15
+ them in Ymir again):
16
+ - **the fourth hall** — the landing's list is a hardcoded SPA component
17
+ (`HallsSwitcher`; the bundle says *"three halls of Ymir — one seat, three
18
+ roofs"*), not data from the gate API. Óðrerir must be added in
19
+ `zerwiz/hlidskjalf` and the SPA rebuilt.
20
+ - **the ember glow** — the seat ships `emberBootTheme` in its built renderer but
21
+ no themed cloth beside it; the house's framework-neutral
22
+ `midgard/design-system/ember.js` exists precisely so every surface can share
23
+ one fire, and the seat must be told to light it (`zerwiz/sessrumnir`).
24
+
25
+ ### Files
26
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,16 @@
1
+ ## sessrumnir · unversioned · 2026-09-12 — The editor keeps its own seat
2
+
3
+ ### Why
4
+ - **`open-editor.ts` seats the editor in Þjazi:** inside herdr, `/edit` and
5
+ `ctrl+shift+e` now open the Allfather's editor in its **own tab** of the home
6
+ workspace (`herdr tab create --focus` + `herdr pane run`, label
7
+ `ymir:edit[:<base>]`, recorded in `state/herdr-seats` for `close-all`) instead
8
+ of suspending the pi session — the agent no longer dies when the editor
9
+ opens. Outside herdr the old roads remain: GUI editors launch detached,
10
+ terminal editors suspend the TUI and resume on exit.
11
+ - **`open-editor.ts` shows hidden files:** the picker and `/edit`
12
+ tab-completion now merge the git listing with a bounded walk, so gitignored
13
+ dotfiles (`.env.local`, `.env.realm`, …) are openable too.
14
+
15
+ ### Files
16
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,28 @@
1
+ ## sessrumnir · unversioned · 2026-09-13 — Sessrúmnir, the seat-hall
2
+
3
+ ### Why
4
+ - **Sessrúmnir adopted:** the Apache-2.0 **pi-desktop** GUI
5
+ (`FaqFirebase/pi-desktop`, v0.1.7-alpha) is vendored at `apps/sessrumnir/`
6
+ and rebranded **Sessrúmnir** — the seat-hall where the Allfather converses
7
+ with the machine. The external engine keeps its product name; the GUI the
8
+ user sees is Sessrúmnir, themed with the way-of palette (sky `#38bdf8` on
9
+ deep navy) as the new default built-in theme. Window titles, launcher,
10
+ package identity, tray/autostart strings, data-dir name, and the Pi logo
11
+ (now a Sowilo rune bolt) are rebranded; upstream `LICENSE` is preserved and
12
+ `NOTICE` records the adoption.
13
+ - **Forge scripts:** `bin/sessrumnir-ensure.sh` (status/ensure/install — deps
14
+ are never committed, installed on first run with the electron-binary heal
15
+ `scripts/electron.sh` already uses) and `bin/sessrumnir.sh`
16
+ (start/status/stop with a workspace argument).
17
+ - **Install wiring:** `bin/ymir-install.sh` gains a `sessrumnir` step (after
18
+ `hermes`) and lists Sessrúmnir in `workspace/INSTALL.md`; the
19
+ `installation.md` asset's step table, adopted-engines table, and Hermes-style
20
+ section are updated in the same change.
21
+ - **Registry & audit:** the Hoard registry (`hodd/identity/projects.yaml`)
22
+ gains the `sessrumnir` project (upstream remote); the adoption is inscribed
23
+ in Runes.
24
+ - **Not yet installed:** `apps/sessrumnir/node_modules` is absent — run
25
+ `bin/ses
26
+
27
+ ### Files
28
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,27 @@
1
+ ## sessrumnir · unversioned · 2026-09-13 — the carved cloth reaches the seat-hall (Sessrúmnir)
2
+
3
+ ### Why
4
+ - **The landing's cloth is now the seat's own look.** Every semantic token in
5
+ `apps/sessrumnir/src/renderer/src/index.css` `@theme` was mapped to its carved
6
+ twin from the landing page's `:root` (`CodeP/ymir-homepage/src/lore.html`):
7
+ stone `#0e0c09` (app) with panels `#151209`/`#1a1610`/`#14100b`, bone text
8
+ `#cfc3a9`/`#9a8f75`/`#6b6250` (faint/ghost as bone washes), bronze
9
+ `#c9973f` accent and `#7d5f2a` brass rule for `border-strong`, blood
10
+ `#c2584a`/`#7c3a30` for error, steel `#96a0a8` for success. Semantic names are
11
+ unchanged — only the values moved.
12
+ - **Fensalir** (the weaving halls) is registered as a built-in theme
13
+ (`themes/fensalir.json`, id `fensalir`, appended to `BUILTIN_THEME_IDS` — an
14
+ additive change that keeps every persisted id resolving). The seat's own
15
+ built-in `sessrumnir` theme was carved to the same cloth, so the default look
16
+ of an existing profile is the cloth on restart. A new test holds the two
17
+ together (`the cloth is one`) and another holds the CSS `@theme` base to the
18
+ theme file (`never drift`).
19
+ - **Cloth is the default, not a cage:** the ThemeEngine's ordering is untouched —
20
+ every other built-in theme, any user theme, and `high-contrast` still win when
21
+ chosen.
22
+ - **Type:** Cormorant (display), Newsreader (body), IBM Plex Mono (mono) bundled
23
+ from `@fontsource*` (offline, `font-src 'self'`), with Inter/JetBrains Mono
24
+ kept as
25
+
26
+ ### Files
27
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,25 @@
1
+ ## sessrumnir · unversioned · 2026-09-13 — the new tree, the mesh, the seat-hall
2
+
3
+ ### Why
4
+ - **Everything in the new tree:** the Sessrúmnir work plus the orphaned fixes
5
+ were migrated from the `ymir-old` working tree into this canonical tree —
6
+ `apps/sessrumnir/` (deps vendored locally, never committed), the two
7
+ `bin/sessrumnir-*.sh` scripts, `step_sessrumnir` in `bin/ymir-install.sh`,
8
+ the Hoard registry entry, the `installation.md` asset, and the
9
+ `syn-watch-arm.js` continuity fix (re-arm when `.supervision-armed` exists
10
+ even with no task metadata). The superseded self-service register-gate work
11
+ was **not** ported — this tree's committed invite-gate is canonical.
12
+ - **Full install ran green** in the new tree: every step OK, invite minted
13
+ (`YMIR-DBN4-FXEX`), all five services up, `bin/ymir-validate.sh` 11/11 PASS.
14
+ - **Ratatoskr mesh healed:** the `a2abridge` engine (MIT,
15
+ `vbcherepanov/a2abridge` v3.0.0) is installed at `~/.a2abridge/bin/`, its
16
+ directory daemon runs on `127.0.0.1:7777`, and `bin/ratatoskr.sh
17
+ status|doctor` pass. Forged `bin/a2abridge-ensure.sh` (installs the engine,
18
+ patches the systemd unit's unwritable `/var/log` log paths to journal,
19
+ keeps the directory up) and wired it into migration `0002-a2a-mcp.sh`, so
20
+ every install/update heals the mesh instead of leaving a dangling MCP path.
21
+ - **MCP bridges fixed:** `engram-mcp` failed at startup (its Python env
22
+ lacked the `mcp` SDK; mcp 2.x renamed FastMCP, so it is pinned to `mcp<2`
23
+
24
+ ### Files
25
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,24 @@
1
+ ## sessrumnir · unversioned · 2026-09-13 — The realm seat, carved (wayof)
2
+
3
+ ### Why
4
+ - **Problem:** the realm tree was bare (only the shipped example), no tenant
5
+ was seated, and the session digest resolved the Allfather's realm to
6
+ `default` — his company and private holdings unreachable by the map.
7
+ - **Seat:** `svartalfaheim/wayof/` carved from the example — `.env.realm`,
8
+ `SECRETS.md`, `AGENTS.md` (persona), `domains/`, `projects/`, the five
9
+ workspace branches, and the 9 company cards seeded from the identity hoard
10
+ (askr · brokkforge · dvalin · mannheim · muninn · runestone · utgard · wayof ·
11
+ ymirlabs), realm field unified to `wayof`, repo paths corrected to this
12
+ machine. `data/realm.md` now pins `wayof` (was drifting between `way-of`,
13
+ `wayof`, and `default`; hoard cards + persona updated to match).
14
+ - **Hood:** `svartalfaheim/wayof/HOOD.md` is the map of the hoard and the
15
+ seat; `bin/saga-session-start.sh` stage 6 (context digest) now prints
16
+ `--- hood ---` whole from the realm seat, so a session opens knowing the
17
+ operator's holdings. Living overviews: `workspace/company/wayof-overview.md`
18
+ and `workspace/company/aigf.md` (hodd stays the private store; the realm
19
+ points at it).
20
+ - **Verified:** `bash -n` green; realm-lib resolves `wayof`; `realm env:
21
+ present`.
22
+
23
+ ### Files
24
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,27 @@
1
+ ## sessrumnir · unversioned · 2026-09-16 — Apodex seat verified; the Weave mended
2
+
3
+ ### Why
4
+ - **Correction (cites the entry below, never rewrites it).** The earlier
5
+ entry said *"LM Studio is retired; its :1234 port belongs to Apodex now."*
6
+ That was false as carved. LM Studio still holds `:1234` and is what serves
7
+ the Apodex GGUF; Apodex took the **model seat**, not the server.
8
+ - **Live verification.** `bin/apodex-smoke-test.sh` → PASS (valid tool-capable
9
+ response, exit 0). `bin/huginn-research-worker.sh` with **bare defaults** →
10
+ `status: completed`, verdict written, observed into Mimirsbrunn. The Apodex
11
+ seat (`http://127.0.0.1:1234/v1`) is live.
12
+ - **One model id, everywhere.** The seat serves **`apodex-1.0-mini`**; the
13
+ worker, smoke test, `.env.example`, `opencode.json`, `config/agents.yaml.example`
14
+ and Huginn's profile now all say so. Previously three names drifted
15
+ (`apodex/Apodex-1.0-mini-Q4_K_M`, `apodex/apodex-mini-q4`, the served id) and
16
+ the default worker call failed with `No models loaded`.
17
+ - **Four defects mended.** `bin/huginn-research-worker.sh` made executable
18
+ (was 644 — bare invocation died with `Permission denied`); the smoke test's
19
+ `--serve` GGUF path corrected to
20
+ `~/Models/FlameF0X/Apodex-1.0-mini-Q4_K_M-GGUF/apodex-1.0-mini-q4_k_m.gguf`;
21
+ `bin/models-detect.sh` env var renamed from the typo `APEDEX_URL` to
22
+ `APODEX_URL`.
23
+ - **Weight truth.** The Apodex Q4_K_M weights are **21.7 GB**, not the ~4–6 GB
24
+ the plan assumed — it ca
25
+
26
+ ### Files
27
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,22 @@
1
+ ## sessrumnir · unversioned · 2026-09-16 — the visualizer finds its DB, and the seat-hall actually builds
2
+
3
+ ### Why
4
+ Two more readers left behind — both discovered by *starting the apps*, not by any
5
+ gate. Each failed silently in its own way.
6
+
7
+ - **`scripts/start.sh` pointed the smithy at a repo path that no longer holds the
8
+ DB.** `0003-private-data-separation` moved it to `$YMIR_HOME/smidja/smidja.db`,
9
+ but the starter still passed `CMD_DB=<repo>/apps/smidja/smidja_data/smidja.db`
10
+ — so the visualizer API died on boot with `smidja.db not found` and `:8437`
11
+ answered nothing. It now resolves the same pair `bin/smidja-bootstrap.sh` does
12
+ (home first, in-repo fallback, `SMIDJA_DB` override). The asset already
13
+ *described* this resolution; the code now implements it.
14
+ - **`bin/sessrumnir-ensure.sh` never built the app.** `[ "$built_present" ]` tests
15
+ a **literal, non-empty string** — always true — so `ensure --install` skipped
16
+ `build_app` and reported `built: no` with exit 0. Sessrúmnir only built when the
17
+ build was run by hand. Now `built_present` (the function) is called.
18
+ - `galdr-reread`: `.agents/skills/galdr-ymirsystem/assets/smidja.md` — the DB
19
+ path, the `scripts/start.sh` DB resolution, and the observer's read list.
20
+
21
+ ### Files
22
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,8 @@
1
+ ## sessrumnir · unversioned · 2026-09-17 — 0.1.13: the re-voiced seat arrives, and the packages are listed
2
+
3
+ ### Why
4
+ - **`@zerwiz/sessrumnir` 0.1.9** — the seat that says Sessrúmnir and "Brokk is working", with the fork`s name gone from its source, its bundles, its installer and its package identity. Pinned so a fresh install receives it.
5
+ - **The README lists every package** on npm, and why the smithy is `@zerwiz/smidja-factory`.
6
+
7
+ ### Files
8
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,23 @@
1
+ ## sessrumnir · unversioned · 2026-09-17 — Sessrúmnir stops wearing Pi's clothes
2
+
3
+ ### Why
4
+ - **The naming law, broken at the root.** Clicking the Sessrúmnir icon opened a
5
+ window titled **Pi Desktop**: `apps/sessrumnir` is the Pi Desktop shell adopted
6
+ whole, and its product name was still Pi's —
7
+ `export const PI_DESKTOP_PRODUCT_NAME = 'Pi Desktop'` — rendered as the heading on
8
+ the home screen, the sidebar and the chat panel. That is the title the Allfather
9
+ saw, twice, on every launch.
10
+ - **Mended at the name:** `SESSRUMNIR_PRODUCT_NAME = 'Sessrúmnir'` (Odin's hall of
11
+ many seats), the three rendering components walked, and the old constant kept as an
12
+ alias so no unwalked import breaks. `tsc --noEmit` exit 0.
13
+ - **Still owed:** 1,255 English strings, **86 of them naming Pi** ("Pi is working",
14
+ "Quit Pi Desktop", "Pi Desktop v{{latestVersion}} is available", "Start Pi/OMP
15
+ before planning with Council"), and Pi's logo on the home screen. The locale is the
16
+ one place they live — that pass is the order, not a patch.
17
+ - Also in the launcher this session: an icon click now raises THE SYSTEM (converge
18
+ the service, reborn a windowless app, focus a live window), and `stop --view X`
19
+ stops only X — the loop that killed every view is gone. The Hall's own outage had
20
+ a cause: an Astro dev server on :4323 while the app waited on :4322.
21
+
22
+ ### Files
23
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,23 @@
1
+ ## sessrumnir · unversioned · 2026-09-17 — the hearth re-seeds on its container: Sessrúmnir's chat fire returns
2
+
3
+ ### Why
4
+ - **The ember glow was gone from the chat because the canvas sized itself once
5
+ at mount and only re-seeded on `window.resize`.** Sessrúmnir's split panes
6
+ (file tree · editor · image) resize the chat column without any window resize,
7
+ so the hearth kept a stale or zero-sized canvas — invisible. Both the shared
8
+ hearth (`midgard/design-system/ember.js`) and Sessrúmnir's React port
9
+ (`ember-background.tsx`) now watch their container with a ResizeObserver and
10
+ re-seed only when the measured size actually changes (never per-frame).
11
+ Hlidskjalf inherits the same mend through the shared module.
12
+ - **Verified live**: Sessrúmnir restarted on the fresh build; a screen capture
13
+ of the running window shows the fire drawing (ember + warm-glow pixels across
14
+ the hearth area). The running app had been serving a stale bundle (missing
15
+ `react-i18next` — deps installed, rebuilt).
16
+
17
+ galdr-reread: `.agents/skills/galdr-ymirsystem/assets/hlidskjalf-ui.md` — the
18
+ EmberBackground hearth section (shared module + ResizeObserver mend).
19
+
20
+ # CHANGELOG
21
+
22
+ ### Files
23
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,11 @@
1
+ ## sessrumnir · unversioned · 2026-09-17 — the packaged seat carries the watch
2
+
3
+ ### Why
4
+ - **The @zerwiz/ymir tarball now ships every surface the runtime reads**: the
5
+ harness surfaces (`.pi/`, `.opencode/`, `.claude/`, `.codex/`, `.cursor/`),
6
+ `assets/`, `data/`, `deploy/` — so an npm-installed seat has the watchers,
7
+ the session-start hooks and the extensions, not only the repo clone (0.1.16
8
+ → 0.1.17).
9
+
10
+ ### Files
11
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,16 @@
1
+ ## sessrumnir · unversioned · 2026-09-17 — the README lists the packages, and the pin moves to the re-voiced seat
2
+
3
+ ### Why
4
+ - **The README says what is on npm.** Five packages serve — `@zerwiz/ymir` (the
5
+ distro) and the four surfaces it depends on — and the section says so with a
6
+ table, plus the one line that matters to a reader: *why the smithy is not
7
+ `@zerwiz/smiddja`*. That name was accepted twice and served never (package
8
+ document 404, website 403, republish refused as already published); it was
9
+ renamed to `@zerwiz/smidja-factory`, which resolves.
10
+ - **The distro's pin moves to `@zerwiz/sessrumnir@0.1.9`** — the seat that speaks
11
+ its own name rather than the fork's. A fresh install was still receiving the
12
+ old voice through the `0.1.8-alpha` pin.
13
+ - **`@zerwiz/ymir@0.1.13`** is the packet that carries them.
14
+
15
+ ### Files
16
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,12 @@
1
+ ## sessrumnir · unversioned · 2026-09-17 — the seat's name and the visualizer's home
2
+
3
+ ### Why
4
+ - **omarchy, not omarchy-1** — the machine is `omarchy`; the fleet config docs
5
+ and the tailscale-sync map say so.
6
+ - **The Smíðja visualizer's home is the smidja repo clone** —
7
+ `apps/smidja-factory/apps/visualizer`; the skill tree carries no copy (the
8
+ stale build was moved aside). `smidja.md` (the governed asset), the smithy
9
+ SKILL, and the install asset all point at the clone.
10
+
11
+ ### Files
12
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,11 @@
1
+ ## skills · unversioned · 2026-09-11 — Galdr/Tyr assets: symlink, not copies
2
+
3
+ ### Why
4
+ - **Fix:** `tyr-check/assets` is now a **symlink** to the canonical
5
+ `galdr/assets`, so the two can never drift. A background process had been
6
+ rewriting the registry, flipping the sync gate red; a symlink makes drift
7
+ structurally impossible. Compliance back to 8/8 stable.
8
+ - **Verified:** compliance 8/8, smoke 8/8, lint 4/4.
9
+
10
+ ### Files
11
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,21 @@
1
+ ## skills · unversioned · 2026-09-11 — Load the owning asset before editing a governed path (5 layers)
2
+
3
+ ### Why
4
+ The runtime drifted from its documentation because the asset that governs a
5
+ subsystem was never loaded before the code changed. Five layers now prevent it:
6
+
7
+ - **1. `AGENTS.md`:** a new `governed[6]` table maps each governed path to the
8
+ asset to load first, and `manual[]` gained `installation`, `ui`, `runtime-spec`.
9
+ - **2. Session digest:** `saga-session-start.sh` prints an `ASSET ROUTING` block
10
+ every session, so the mapping is always in context.
11
+ - **3. Router loadable:** `galdr`'s `disable-model-invocation` is removed (it hid
12
+ the one router that owns the assets); `tyr-check` keeps it (deliberate).
13
+ - **4. Enforced seatbelt:** new `bin/syn-asset-pretool-check.sh` denies an
14
+ `edit`/`write` of a governed path until its asset was read (`state/asset-reads`);
15
+ the Pi extension relays it and records asset reads.
16
+ - **5. Compliance gate:** `compliance-check.sh` gains an `assets` check that
17
+ FAILS when a governed path changed without its asset (it caught this very
18
+ change), and `runtime-compliance.md` documents G12 + the routing map.
19
+
20
+ ### Files
21
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,27 @@
1
+ ## skills · unversioned · 2026-09-11 — Omarchy-first: host skills, machine learning, native fixes
2
+
3
+ ### Why
4
+ - **New skill `ymir-omarchy`:** Omarchy-native operation — the two laws (never
5
+ edit `/usr/share/omarchy/`; Hyprland owns placement), host detection, the
6
+ monitor/scale coordinate trap, the amdgpu GPU crash and mitigation, desktop-app
7
+ placement, and a safe-customisation table.
8
+ - **New skill `ymir-thjazi`:** Þjazi (herdr-first) — protocol floors (14+ panes,
9
+ 0.8.0 presentation spaces), verification, installation.
10
+ - **Ymir learns the host:** `bin/omarchy-sense.sh` snapshots and *diffs* the
11
+ machine (Omarchy version, explicit packages, config files, monitors, scale) into
12
+ `state/omarchy-setup.json`; `bin/omarchy-hook-install.sh` adds an Omarchy
13
+ `post-update` hook so it re-learns after every `omarchy update`.
14
+ - **Þjazi in the installer:** `bin/herdr-ensure.sh` + new `step_backend`
15
+ (herdr, else tmux — never a silent fallback).
16
+ - **New `step_omarchy`** (SKIP on a non-Omarchy host).
17
+ - **Desktop fixes:** window placement is now LOGICAL and work-area clamped, and
18
+ prefers a non-primary display (the old math used physical pixels on a scale-1.5
19
+ panel and filled the screen). Apps are identified by their command line, not the
20
+ `.bin/electron` shim pid — which fixes the **double-launch** bug. `stop` kills
21
+ every matching pid.
22
+ - **GPU mitigation:** `YMIR_DESKTOP_DISABLE_GPU=1` adds
23
+ `--disable-gpu --disable-gpu-compositing` for small-VRAM iGPUs (the crash was
24
+ `amdgpu: Not e
25
+
26
+ ### Files
27
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,26 @@
1
+ ## skills · unversioned · 2026-09-13 — the imported names leave the halls (Norse naming purge)
2
+
3
+ ### Why
4
+ - **"firstmate" retargeted to Ymir's own names across every Ymir-owned surface.**
5
+ The upstream distro's nautical vocabulary is gone from the docs, skills, `bin/`,
6
+ config, and the Hlidskjalf review copy: `firstmate` → **Brokk**, `secondmate` →
7
+ **Eindri-home**, `crew`/`crewmate` → **Eindri**, `captain` → **Allfather**
8
+ (`docs/lore.md`, `docs/Architecture.md`, `.agents/agents/brokk.md`,
9
+ `.agents/skills/herdr-panes/assets/{herdr,tmux}-backend.md`,
10
+ `.agents/skills/eindri-homes/assets/control-plane.md`,
11
+ `.agents/skills/saga-bearings/assets/board-template.html`,
12
+ `.agents/skills/ymir-host/assets/thjazi.md`, `bin/README.md`,
13
+ `apps/hlidskjalf/**`).
14
+ - **Engine literals kept.** Every real upstream identifier stays verbatim — the
15
+ Herdr labels (`firstmate`, `2ndmate-<id>`, `firstmate-<id>`), the home marker
16
+ `.fm-secondmate-home`, the envelope `FIRSTMATE_OP: ` and `[fm-from-firstmate]`,
17
+ and all `FM_*`/`fm-*` names — because `.agents/backend/` (the vendored engine)
18
+ and `assets/reference/` (provenance) are untouched.
19
+ - **Licensing.** `NOTICE` now records the upstream **firstmate** distro
20
+ (`github.com/kunchenguid/firstmate`, MIT, © kunchenguid) and a README "Built on"
21
+ section points to it; the MIT copyright/permission notice is retained.
22
+ - **Governed asset:** `galdr-ymirsystem/assets/hlidskjalf-ui.md` records the Allfather
23
+ review copy in the same change. `complianc
24
+
25
+ ### Files
26
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,17 @@
1
+ ## skills · unversioned · 2026-09-16 — Gunnlöð joins the hall (SkillOpt integration)
2
+
3
+ ### Why
4
+ - **SkillOpt integration.** `pip install skillopt` into `.venv/`; training
5
+ loop (`skillopt-train`), eval (`skillopt-eval`), and nightly
6
+ self-evolution (`skillopt-sleep`) available for Smíðja prompts and
7
+ Ymir skills. Nightly Nornir job at 00:30 (bin/nornir-job-skillopt-sleep.sh),
8
+ staged artifacts only — Allfather approves before adopt. One-time setup:
9
+ `bin/skillopt-setup.sh`.
10
+ - **Naming.** SkillOpt adopted the name **Gunnlöð** (keeper of the mead of
11
+ poetry — distills trajectories into refined skill artifacts). Added to
12
+ `.agents/assets/agents/naming.md` (platform map, 28 subsystems),
13
+ `.agents/skills/galdr-ymirsystem/assets/registry.md` (skills + external tools),
14
+ `README.md` (System Map + Skills + gratitude), `NOTICE` (MIT attribution).
15
+
16
+ ### Files
17
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,25 @@
1
+ ## skills · unversioned · 2026-09-16 — one skills tree, every harness; the config stomp mended
2
+
3
+ ### Why
4
+ - **Every harness now reaches `.agents/skills`.** Pi was already right — its own
5
+ code walks up from the cwd to `.agents/skills` (and `~/.agents/skills`), so it
6
+ discovers Ymir's skills natively with no link and no config; a second root
7
+ under `.pi/` would only double-load. Claude Code, Codex and Cursor read project
8
+ skills from their own directory, so `bin/valknut-load.sh` now binds
9
+ `.claude/skills`, `.codex/skills` and `.cursor/skills` to `../.agents/skills`.
10
+ opencode reaches the tree through `skills.paths`. The install step `loaders`
11
+ runs the loader, so a fresh install gets all of it.
12
+ - **The `harnesses` gate (G14) now asserts the skills surfaces too** — opencode's
13
+ config, Pi's native root, and the three links — so a harness silently loading
14
+ nothing can no longer pass.
15
+ - **Defect mended: the loader was stomping `opencode.json`.** `bin/valknut-load.sh`
16
+ renders `opencode.json` from `opencode.json.example`, and that example carried
17
+ only `llama.cpp` — so a loader run silently **deleted the Apodex provider**,
18
+ which had only ever lived in the generated file. The example now carries Apodex
19
+ as well, with the served id `apodex-1.0-mini`, so a re-render cannot drop it.
20
+ - `bin/valknut-load.sh --status` now reports every surface (agents *and* skills)
21
+ with a true row count instead of a hardcoded header.
22
+ - Assets: `harness-integration/README.md` gains the skill-loc
23
+
24
+ ### Files
25
+ - *(carried from the frozen CHANGELOG.md)*
@@ -0,0 +1,26 @@
1
+ ## skills · unversioned · 2026-09-16 — the skill-loading audit: wrong skills unloaded, the index made true
2
+
3
+ ### Why
4
+ - **Three phantom skills stopped loading.** opencode was loading `galdr-compliance`
5
+ and `galdr-crafter` — both superseded, their work long since moved to
6
+ `tyr-check` — and `NSR`, the NSR scaffolding spec, which sat at
7
+ `assets/nsr/SKILL.md` carrying frontmatter. A recursive scanner walks
8
+ `skills.paths` to *any* depth, so all three were announced to every agent as
9
+ live skills. The two galdr crafters are removed; the NSR spec is renamed
10
+ `assets/nsr/scaffold-spec.md` and stays a document (its sibling templates
11
+ carry no frontmatter and were already inert).
12
+ - **Two gates added, one per failure class** (`compliance-check.sh`):
13
+ - **`harnesses` (G14)** — every link in `.claude/agents`, `.codex/agents`,
14
+ `.cursor/agents`, `.pi/agents`, `.opencode/agent` must land, one hop, in the
15
+ canonical `.agents/agents/` tree (Rule 02), and no nested `SKILL.md` may
16
+ carry frontmatter. One hop deliberately: Galdr's agent file *is* the skill,
17
+ by the dual-surface rule.
18
+ - **`skillindex` (G15)** — every real skill dir must be named in
19
+ `.agents/skills/README.md`, and every `.agents/skills/<name>` path the assets
20
+ cite must exist. Lines marked planned/legacy/superseded/removed/abandoned/
21
+ retired are exempt by intent.
22
+ - **The drift they exposed, mended:** the canonical index listed 23 skills while
23
+ 26 existed (`groa-update`, `lifecycle`, `rules-check-drift` were mis
24
+
25
+ ### Files
26
+ - *(carried from the frozen CHANGELOG.md)*