@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.
- package/.agents/skills/groa-update/SKILL.md +30 -0
- package/CHANGELOG.md +44 -0
- package/README.md +47 -8
- package/bin/fixes-guard.sh +112 -0
- package/bin/fixes.sh +157 -0
- package/bin/ymir.js +35 -0
- package/docs/fixes/agents/unversioned-2026-09-11-chat-uses-the-root-pi-model-catalog.md +15 -0
- package/docs/fixes/agents/unversioned-2026-09-11-shared-well-for-every-harness-no-mock-clickable-memories.md +26 -0
- package/docs/fixes/agents/unversioned-2026-09-13-gleipnir-sees-when-an-agent-is-turned-off.md +26 -0
- package/docs/fixes/agents/unversioned-2026-09-14-the-eindri-brokk-wake-bridge-they-can-talk-back-now.md +23 -0
- package/docs/fixes/agents/unversioned-2026-09-16-a-sandboxed-worker-cannot-think-auto-stops-killing-agent.md +18 -0
- package/docs/fixes/agents/unversioned-2026-09-17-agents-md-states-the-one-law-no-private-data-in-the-publ.md +25 -0
- package/docs/fixes/agents/unversioned-2026-09-17-every-figure-loads-the-agent-directory-was-never-read.md +25 -0
- package/docs/fixes/agents/unversioned-2026-09-17-pi-gets-its-agents-and-a-dead-extension-comes-back.md +26 -0
- package/docs/fixes/agents/unversioned-2026-09-17-the-well-as-tools-ymir-s-first-custom-pi-extension.md +20 -0
- package/docs/fixes/gate/0.1.28-fixes-guard-replaces-the-changelog-gate.md +7 -0
- package/docs/fixes/gate/0.1.28-the-changelog-system-is-replaced-by-fix-notes.md +8 -0
- package/docs/fixes/gate/0.1.28-the-frozen-changelog-becomes-per-component-notes.md +9 -0
- package/docs/fixes/hlidskjalf/unversioned-2026-09-11-automate-the-install-consent-gate-self-healing-prereqs-v.md +21 -0
- package/docs/fixes/hlidskjalf/unversioned-2026-09-11-single-tenant-workspaces-shipped.md +15 -0
- package/docs/fixes/hlidskjalf/unversioned-2026-09-13-the-cloth-reaches-all-three-halls-hlidskjalf-sm-ja-the-s.md +25 -0
- package/docs/fixes/hlidskjalf/unversioned-2026-09-16-one-login-for-every-app-on-the-web-the-gate-fronts-them-.md +24 -0
- package/docs/fixes/hlidskjalf/unversioned-2026-09-16-the-credential-reaches-the-gate-and-the-hall-stops-leaki.md +23 -0
- package/docs/fixes/hlidskjalf/unversioned-2026-09-16-the-delivery-gates-install-themselves-rename-drift-mende.md +22 -0
- package/docs/fixes/hlidskjalf/unversioned-2026-09-16-the-panels-that-crashed-the-gate-that-lied-and-the-well-.md +25 -0
- package/docs/fixes/hlidskjalf/unversioned-2026-09-17-0-1-14-the-panels-reach-the-gate-and-the-fourth-window-s.md +9 -0
- package/docs/fixes/hlidskjalf/unversioned-2026-09-17-models-providers-and-paths-are-the-user-s-and-the-gate-s.md +26 -0
- package/docs/fixes/hlidskjalf/unversioned-2026-09-17-the-northstar-gate-runs-nightly-the-platform-door-it-cau.md +16 -0
- package/docs/fixes/hoard/unversioned-2026-09-16-every-app-wears-its-own-rune.md +27 -0
- package/docs/fixes/hoard/unversioned-2026-09-16-hodd-lives-outside-the-repo-and-the-installer-makes-it-s.md +24 -0
- package/docs/fixes/hoard/unversioned-2026-09-16-the-icons-are-real-runes-now-eight-of-them-were-drawings.md +33 -0
- package/docs/fixes/hoard/unversioned-2026-09-17-0-1-26-published-and-the-vault-door-named.md +8 -0
- package/docs/fixes/hoard/unversioned-2026-09-17-one-well-in-the-hoard-every-reader-of-kaia-s-memory-reso.md +23 -0
- package/docs/fixes/hoard/unversioned-2026-09-17-skrymir-opens-the-hoard-not-the-checkout.md +18 -0
- package/docs/fixes/hoard/unversioned-2026-09-17-the-hoard-encrypts-its-secrets-at-rest.md +20 -0
- package/docs/fixes/hoard/unversioned-2026-09-17-the-hoard-gets-a-guard-and-rule-04-stops-contradicting-t.md +19 -0
- package/docs/fixes/hoard/unversioned-2026-09-17-the-home-s-re-laid-layout-taught-to-the-system.md +17 -0
- package/docs/fixes/hoard/unversioned-2026-09-17-the-private-home-gets-the-ward-it-never-had.md +25 -0
- package/docs/fixes/hoard/unversioned-2026-09-17-the-schedule-is-the-user-s-cron-leaves-the-tree-lives-in.md +27 -0
- package/docs/fixes/install/0.1.28-a-stale-install-can-no-longer-hide.md +8 -0
- package/docs/fixes/install/unversioned-2026-09-11-desktop-shell-tunnel-and-temporary-auth.md +14 -0
- package/docs/fixes/install/unversioned-2026-09-11-smooth-install-provider-choice-no-forced-key-real-prereq.md +22 -0
- package/docs/fixes/install/unversioned-2026-09-16-apodex-joins-the-weave-research-planning-provider.md +27 -0
- package/docs/fixes/install/unversioned-2026-09-16-icons-the-operator-can-pin-and-one-pair-of-hands-for-the.md +29 -0
- package/docs/fixes/install/unversioned-2026-09-16-the-desktop-never-dials-out-cloudflare-stays-outside-ele.md +25 -0
- package/docs/fixes/install/unversioned-2026-09-17-0-1-12-the-icons-reach-the-live-tree-and-a-missing-surfa.md +10 -0
- package/docs/fixes/install/unversioned-2026-09-17-0-1-8-the-day-s-work-reaches-npm.md +25 -0
- package/docs/fixes/install/unversioned-2026-09-17-a-stale-install-cannot-hide-and-the-one-liner-cannot-be-.md +9 -0
- package/docs/fixes/install/unversioned-2026-09-17-both-shapes-a-clone-and-an-npm-install-and-the-patience-.md +26 -0
- package/docs/fixes/install/unversioned-2026-09-17-gr-a-knows-the-npm-half-how-to-renew-the-published-packa.md +9 -0
- package/docs/fixes/install/unversioned-2026-09-17-npm-only-the-hall-answers-on-its-own-port-and-the-marks-.md +27 -0
- package/docs/fixes/install/unversioned-2026-09-17-the-apps-leave-the-monorepo-installation-pulls-them-from.md +23 -0
- package/docs/fixes/install/unversioned-2026-09-17-the-doors-the-cloth-and-the-icons-that-were-not-there.md +27 -0
- package/docs/fixes/install/unversioned-2026-09-17-the-editor-stops-being-banished-to-its-own-desktop.md +18 -0
- package/docs/fixes/install/unversioned-2026-09-17-the-four-surfaces-arrive-by-npm-and-an-old-tree-gives-up.md +24 -0
- package/docs/fixes/install/unversioned-2026-09-17-the-house-gains-an-unpublish-door.md +19 -0
- package/docs/fixes/install/unversioned-2026-09-17-the-icons-reach-the-live-tree-and-a-missing-surface-is-a.md +26 -0
- package/docs/fixes/install/unversioned-2026-09-17-the-install-asks-with-a-plan-and-the-operator-s-things-l.md +24 -0
- package/docs/fixes/install/unversioned-2026-09-17-the-installer-actually-installs-the-whole-platform-then-.md +9 -0
- package/docs/fixes/install/unversioned-2026-09-17-the-installer-has-a-design-of-its-own.md +9 -0
- package/docs/fixes/install/unversioned-2026-09-17-the-npm-door-stands-the-surfaces.md +13 -0
- package/docs/fixes/install/unversioned-2026-09-17-the-one-liner-the-readme-promised-and-it-sets-the-path.md +9 -0
- package/docs/fixes/install/unversioned-2026-09-17-ymir-command-not-found-is-a-path-fault-and-here-is-the-c.md +8 -0
- package/docs/fixes/install/unversioned-2026-09-18-the-readme-leads-with-the-doors-that-work.md +13 -0
- package/docs/fixes/odrerir/unversioned-2026-09-14-rerir-forged-eindri-odrerir-pane-w3-p7.md +12 -0
- package/docs/fixes/odrerir/unversioned-2026-09-17-the-live-hall-s-board-becomes-true-the-snapshot-lands-on.md +18 -0
- package/docs/fixes/runtime/unversioned-2026-09-11-gleipnir-lock-pid-binding-fix.md +17 -0
- package/docs/fixes/runtime/unversioned-2026-09-11-hardcoded-per-page-feeds-header-stream.md +19 -0
- package/docs/fixes/runtime/unversioned-2026-09-11-per-page-rolling-40-message-feeds.md +13 -0
- package/docs/fixes/runtime/unversioned-2026-09-11-smi-ja-views-are-repo-local.md +17 -0
- package/docs/fixes/runtime/unversioned-2026-09-11-stats-1-1-kaia-chat-forge-prompts.md +23 -0
- package/docs/fixes/runtime/unversioned-2026-09-11-the-well-is-real-mimirsbrunn-engram.md +21 -0
- package/docs/fixes/runtime/unversioned-2026-09-12-fleet-preferences.md +11 -0
- package/docs/fixes/runtime/unversioned-2026-09-12-house-law-rules-and-the-grein-naming.md +11 -0
- package/docs/fixes/runtime/unversioned-2026-09-12-r-preference-moved-out-of-the-tracked-tree.md +10 -0
- package/docs/fixes/runtime/unversioned-2026-09-12-the-dashboards-stop-crash-looping-on-the-igpu.md +20 -0
- package/docs/fixes/runtime/unversioned-2026-09-12-the-well-actually-installs-it-never-did.md +23 -0
- package/docs/fixes/runtime/unversioned-2026-09-12-updater-forged-credential-moved-to-env.md +12 -0
- package/docs/fixes/runtime/unversioned-2026-09-14-a-vacant-helm-is-entered-not-punted-watcher-wake-repair.md +24 -0
- package/docs/fixes/runtime/unversioned-2026-09-14-the-echo-guard-no-wake-flood-through-gn-s-door.md +18 -0
- package/docs/fixes/runtime/unversioned-2026-09-16-app-packaging-prepared-under-the-ymir-scope-amendment-c-.md +23 -0
- package/docs/fixes/runtime/unversioned-2026-09-16-four-readers-that-still-pointed-at-the-pre-split-world.md +26 -0
- package/docs/fixes/runtime/unversioned-2026-09-16-no-blue-the-forge-language-replaces-the-old-blue.md +26 -0
- package/docs/fixes/runtime/unversioned-2026-09-16-omarchy-first-host-aware-windows-and-macos-get-a-door.md +25 -0
- package/docs/fixes/runtime/unversioned-2026-09-16-smi-ja-moves-into-the-app-tree.md +17 -0
- package/docs/fixes/runtime/unversioned-2026-09-16-the-changelog-guard-no-push-ships-untold.md +19 -0
- package/docs/fixes/runtime/unversioned-2026-09-16-the-core-senses-the-real-host-not-omarchy-s-shadow.md +23 -0
- package/docs/fixes/runtime/unversioned-2026-09-16-the-hearth-spreads-one-fire-three-more-surfaces.md +25 -0
- package/docs/fixes/runtime/unversioned-2026-09-16-the-loader-stops-deleting-merge-never-overwrite.md +27 -0
- package/docs/fixes/runtime/unversioned-2026-09-16-the-mesh-reaches-teams-and-anchor-and-show-stops-guessin.md +24 -0
- package/docs/fixes/runtime/unversioned-2026-09-17-0-1-10-the-hall-answers-on-its-port-and-the-marks-land.md +15 -0
- package/docs/fixes/runtime/unversioned-2026-09-17-0-1-11-four-surfaces-their-marks-and-a-door-that-mends.md +18 -0
- package/docs/fixes/runtime/unversioned-2026-09-17-glitnir-stops-hanging-and-one-process-is-one-row.md +15 -0
- package/docs/fixes/runtime/unversioned-2026-09-17-main-is-repaired-and-the-report-wears-the-cloth.md +25 -0
- package/docs/fixes/runtime/unversioned-2026-09-17-not-again-and-four-surfaces-in-one-raise.md +26 -0
- package/docs/fixes/runtime/unversioned-2026-09-17-smoke-test-all-ui-two-checks-that-lied-about-their-own-s.md +20 -0
- package/docs/fixes/runtime/unversioned-2026-09-17-the-changelog-stops-conflicting-fragments-folded-by-a-sc.md +25 -0
- package/docs/fixes/runtime/unversioned-2026-09-17-the-doors-written-down-where-a-user-will-find-them.md +20 -0
- package/docs/fixes/runtime/unversioned-2026-09-17-the-duplicate-extensions-removed-from-the-project-tree.md +17 -0
- package/docs/fixes/runtime/unversioned-2026-09-17-the-extensions-deployed-without-their-modules.md +23 -0
- package/docs/fixes/runtime/unversioned-2026-09-17-the-feed-follows-brokk-s-thinking-past-the-composer.md +17 -0
- package/docs/fixes/runtime/unversioned-2026-09-17-the-fleet-stops-colliding-a-grid-fan-and-each-smith-s-ow.md +21 -0
- package/docs/fixes/runtime/unversioned-2026-09-17-the-fork-stands-the-machine.md +12 -0
- package/docs/fixes/runtime/unversioned-2026-09-17-the-fragment-convention-is-enforced-where-github-runs-it.md +26 -0
- package/docs/fixes/runtime/unversioned-2026-09-17-the-layout-swept-every-reader-taught-the-new-doors.md +24 -0
- package/docs/fixes/runtime/unversioned-2026-09-17-the-model-that-raised-itself-and-the-workhorse-that-repl.md +26 -0
- package/docs/fixes/runtime/unversioned-2026-09-17-the-package-shipped-the-memory-well-one-version-now-excl.md +26 -0
- package/docs/fixes/runtime/unversioned-2026-09-17-the-phantom-optional-pins-cut.md +9 -0
- package/docs/fixes/runtime/unversioned-2026-09-17-the-sweep-and-the-door-that-mends-itself.md +26 -0
- package/docs/fixes/sessrumnir/unversioned-2026-09-12-the-editor-keeps-its-own-seat.md +16 -0
- package/docs/fixes/sessrumnir/unversioned-2026-09-13-sessr-mnir-the-seat-hall.md +28 -0
- package/docs/fixes/sessrumnir/unversioned-2026-09-13-the-carved-cloth-reaches-the-seat-hall-sessr-mnir.md +27 -0
- package/docs/fixes/sessrumnir/unversioned-2026-09-13-the-new-tree-the-mesh-the-seat-hall.md +25 -0
- package/docs/fixes/sessrumnir/unversioned-2026-09-13-the-realm-seat-carved-wayof.md +24 -0
- package/docs/fixes/sessrumnir/unversioned-2026-09-16-apodex-seat-verified-the-weave-mended.md +27 -0
- package/docs/fixes/sessrumnir/unversioned-2026-09-16-the-visualizer-finds-its-db-and-the-seat-hall-actually-b.md +22 -0
- package/docs/fixes/sessrumnir/unversioned-2026-09-17-0-1-13-the-re-voiced-seat-arrives-and-the-packages-are-l.md +8 -0
- package/docs/fixes/sessrumnir/unversioned-2026-09-17-sessr-mnir-stops-wearing-pi-s-clothes.md +23 -0
- package/docs/fixes/sessrumnir/unversioned-2026-09-17-the-hearth-re-seeds-on-its-container-sessr-mnir-s-chat-f.md +23 -0
- package/docs/fixes/sessrumnir/unversioned-2026-09-17-the-packaged-seat-carries-the-watch.md +11 -0
- package/docs/fixes/sessrumnir/unversioned-2026-09-17-the-readme-lists-the-packages-and-the-pin-moves-to-the-r.md +16 -0
- package/docs/fixes/sessrumnir/unversioned-2026-09-17-the-seat-s-name-and-the-visualizer-s-home.md +12 -0
- package/docs/fixes/skills/unversioned-2026-09-11-galdr-tyr-assets-symlink-not-copies.md +11 -0
- package/docs/fixes/skills/unversioned-2026-09-11-load-the-owning-asset-before-editing-a-governed-path-5-l.md +21 -0
- package/docs/fixes/skills/unversioned-2026-09-11-omarchy-first-host-skills-machine-learning-native-fixes.md +27 -0
- package/docs/fixes/skills/unversioned-2026-09-13-the-imported-names-leave-the-halls-norse-naming-purge.md +26 -0
- package/docs/fixes/skills/unversioned-2026-09-16-gunnl-joins-the-hall-skillopt-integration.md +17 -0
- package/docs/fixes/skills/unversioned-2026-09-16-one-skills-tree-every-harness-the-config-stomp-mended.md +25 -0
- package/docs/fixes/skills/unversioned-2026-09-16-the-skill-loading-audit-wrong-skills-unloaded-the-index-.md +26 -0
- package/docs/fixes/skills/unversioned-2026-09-17-0-1-9-both-shapes-reach-the-registry.md +17 -0
- package/docs/fixes/skills/unversioned-2026-09-17-midgard-holds-public-assets-only-the-company-wiki-is-gon.md +23 -0
- package/docs/fixes/skills/unversioned-2026-09-17-the-forge-speaks-each-skill-s-own-text-in-the-index.md +16 -0
- package/docs/fixes/skills/unversioned-2026-09-17-the-local-git-round-joins-the-loom-the-stack-s-doors-are.md +19 -0
- package/docs/fixes/skills/unversioned-2026-09-17-the-registry-says-where-a-repo-lives-and-what-it-is-for.md +20 -0
- package/docs/fixes/smidja/unversioned-2026-09-16-the-pane-bridge-keeps-its-quoting-phase-3-verified.md +22 -0
- package/docs/fixes/smidja/unversioned-2026-09-16-the-roster-can-finally-run-an-agent-on-pi.md +23 -0
- package/docs/fixes/smidja/unversioned-2026-09-16-the-roster-s-effect-lands-and-the-backend-pin-stops-bein.md +19 -0
- package/docs/fixes/smidja/unversioned-2026-09-16-the-validator-stops-calling-a-dead-visualizer-healthy.md +20 -0
- package/docs/fixes/smidja/unversioned-2026-09-17-the-fleet-was-a-rack-of-terminals-now-it-is-the-roster.md +18 -0
- package/docs/fixes/smidja/unversioned-2026-09-17-the-plan-learns-the-smithy-s-package-name-and-the-instal.md +25 -0
- package/docs/fixes/smidja/unversioned-2026-09-17-the-smithy-can-see-the-well.md +20 -0
- package/docs/fixes/smidja/unversioned-2026-09-17-the-smithy-s-dependency-names-the-package-npm-will-actua.md +20 -0
- package/package.json +1 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-12 — Fleet preferences
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- `data/fleet.md` (gitignored) holds fleet-wide per-user settings (`ro: on|off`).
|
|
5
|
+
- `bin/fleet-apply.sh` applies them to this home + every registered Eindri-home
|
|
6
|
+
(into each home's gitignored `state/`; remote routes reported).
|
|
7
|
+
- `bin/brokk-update.sh` re-applies fleet preferences on every sweep — one setting
|
|
8
|
+
reaches the whole fleet, no tracked tree dirtied.
|
|
9
|
+
|
|
10
|
+
### Files
|
|
11
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-12 — House law (RULES/) and the Grein naming
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- New `RULES/` (the house law): `01-domains.md` (house = company; domain = a
|
|
5
|
+
**Grein**/**Greinar**; Eindri = specialists), `02-agents.md` (agents live only
|
|
6
|
+
in `.agents/agents`; harness dirs are symlinks; no mock agents), `03-houses.md`
|
|
7
|
+
(a house is a company — WayOf; the eight Labs are domains, never houses).
|
|
8
|
+
- Live Fleet de-mocked (real domain/model/status; seeded stats only in demo).
|
|
9
|
+
|
|
10
|
+
### Files
|
|
11
|
+
- *(carried from the frozen CHANGELOG.md)*
|
package/docs/fixes/runtime/unversioned-2026-09-12-r-preference-moved-out-of-the-tracked-tree.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-12 — Ró preference moved out of the tracked tree
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- `.agents/config/ro` was a **git-tracked** per-user toggle (calm on/off); any
|
|
5
|
+
toggle dirtied the tree and made `bin/brokk-update.sh` refuse. It now lives in
|
|
6
|
+
the gitignored `state/ro`; `YMIR_RO`/`BROKK_RO` set a default; the legacy
|
|
7
|
+
`config/ro` is read once for upgrade then never written. Tracked file removed.
|
|
8
|
+
|
|
9
|
+
### Files
|
|
10
|
+
- *(carried from the frozen CHANGELOG.md)*
|
package/docs/fixes/runtime/unversioned-2026-09-12-the-dashboards-stop-crash-looping-on-the-igpu.md
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-12 — The dashboards stop crash-looping on the iGPU
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **`scripts/electron.sh` decides its own GPU path.** Both dashboards appeared to
|
|
5
|
+
work while `coredumpctl` filled with SIGSEGV cores from
|
|
6
|
+
`electron --type=gpu-process`. An iGPU backs its graphics memory with system
|
|
7
|
+
RAM (GTT), a local model served on that same iGPU held 5.8-8.0 GiB of it, and
|
|
8
|
+
the amdgpu driver then failed the desktop's command submissions — which
|
|
9
|
+
Electron turned into a NULL dereference at a constant offset. Only the GPU
|
|
10
|
+
process died, so the windows stayed up and the failure was easy to miss.
|
|
11
|
+
`igpu_vram_small()` now reads the render device's VRAM carve-out and switches
|
|
12
|
+
to software rendering under `YMIR_IGPU_VRAM_SMALL_MIB` (default 2048). The old
|
|
13
|
+
comment promised this auto-detect; now it exists. `YMIR_DESKTOP_DISABLE_GPU`
|
|
14
|
+
still overrides, both ways.
|
|
15
|
+
- **Verified:** with the fix, the amdgpu submission errors stop and the
|
|
16
|
+
gpu-process runs SwiftShader (`--use-angle=swiftshader-webgl`) rather than the
|
|
17
|
+
hardware path; no new cores.
|
|
18
|
+
|
|
19
|
+
### Files
|
|
20
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-12 — The well actually installs (it never did)
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **The memory engine was never installed by the installer.** `bin/prereq-ensure.sh`
|
|
5
|
+
had no `engram` target at all, and `bin/ymir-install.sh` only *checked* for it
|
|
6
|
+
and printed `SKIP "optional — install engine then run bin/mimir-bridge.sh"`. A
|
|
7
|
+
SKIP never blocks, so the well was silently down on every install.
|
|
8
|
+
- **The hint named the wrong package.** PyPI's `engram` is an unrelated
|
|
9
|
+
*rendering* library (mitsuba/drjit/torch): following the hint pulled gigabytes
|
|
10
|
+
of CUDA wheels and still left no engine. The memory engine's distribution is
|
|
11
|
+
**`engdbram`**; its module is `engram`. The pre-swap append-only log had the
|
|
12
|
+
right answer all along (`PyPI engdbram, v2.2.1`).
|
|
13
|
+
- **Now it installs.** `prereq-ensure.sh engram` installs `engdbram` into an
|
|
14
|
+
interpreter that can run it (>=3.11; uv supplies 3.12 here), records that
|
|
15
|
+
interpreter in `~/.config/ymir/engram-python`, and `bin/mimir-bridge.sh` reuses
|
|
16
|
+
it for both the check and the run. The installer provisions rather than hints,
|
|
17
|
+
and reports WARN instead of a silent SKIP when it cannot.
|
|
18
|
+
- **Verified:** `curl 127.0.0.1:4602/health` -> `{"status": "up", "store":
|
|
19
|
+
".agents/memory/kaia.engram"}`; `.agents/skills/lifecycle/smoke_test.sh` exits 0
|
|
20
|
+
with all five checks green.
|
|
21
|
+
|
|
22
|
+
### Files
|
|
23
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-12 — Updater forged + credential moved to env
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **`bin/brokk-update.sh`** — the sanctioned, guarded updater the `ymir-update`
|
|
5
|
+
skill calls: fast-forward only, refuses a dirty/diverged tree, `--yes` to
|
|
6
|
+
stash+restore, `--check` to report. Never force-pushes.
|
|
7
|
+
- **Credential law:** the gate login (`HLIDSKJALF_AUTH`) no longer has an inline
|
|
8
|
+
default; it is read from `.env.local` (Bun auto-loads it). Server falls back to
|
|
9
|
+
an open gate only when unset (dev), with the key added to `.env.example`.
|
|
10
|
+
|
|
11
|
+
### Files
|
|
12
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-14 — A vacant helm is entered, not punted (watcher wake repair)
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **Problem:** a watcher wake reported the Pi extension could not restore
|
|
5
|
+
continuity — "this session no longer owns the lock". Root cause found by
|
|
6
|
+
inspection: an **empty/truncated** machine lock (`~/.local/state/ymir/brokk.lock`)
|
|
7
|
+
was classified by `gna-pi-watch.ts` `lockOwnership()` as `other` (another
|
|
8
|
+
live session) and by `bin/syn-watch-arm.sh`'s gate as read-only — so a helm
|
|
9
|
+
with *no verifiably-live holder* was refused and punted to a manual
|
|
10
|
+
`saga-session-start.sh` reclaim.
|
|
11
|
+
- **Fix (both seams in one change):** the extension now classifies an empty
|
|
12
|
+
lock as `missing`, so `gna_watch_arm`'s reclaim takes the helm in place; the
|
|
13
|
+
arm script, on finding no owner (or an owner verifiably gone), runs
|
|
14
|
+
`gleipnir_lock_acquire` itself — which refuses only a genuinely live other
|
|
15
|
+
session — instead of printing read-only. The "run saga-session-start.sh"
|
|
16
|
+
punt is gone; a vacant helm is entered by the watcher's own hand.
|
|
17
|
+
- **Verified:** scratch-state test — empty machine lock → `watcher: started`,
|
|
18
|
+
lock bound to the session pid + starttime sidecar, `.supervision-armed`
|
|
19
|
+
touched; `gleipnir-machine-lock.test.sh` ALL PASS (zombie, recycled,
|
|
20
|
+
migration); compliance 10/10; harness-integration asset updated in the same
|
|
21
|
+
change (the governed rule).
|
|
22
|
+
|
|
23
|
+
### Files
|
|
24
|
+
- *(carried from the frozen CHANGELOG.md)*
|
package/docs/fixes/runtime/unversioned-2026-09-14-the-echo-guard-no-wake-flood-through-gn-s-door.md
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-14 — The echo guard: no wake flood through Gná's door
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **Problem:** during a loud stretch (stale wake lines + the FM runner's
|
|
5
|
+
durable queue holding ten old check-wakes), the watcher re-armed and
|
|
6
|
+
re-signalled "signal: wake queue" across many generations; every actionable
|
|
7
|
+
close queued one pi follow-up wake (`sendWake`, no dedup), which then
|
|
8
|
+
dripped at the Allfather one per prompt — a long echo flood after the
|
|
9
|
+
sources were drained.
|
|
10
|
+
- **Fix:** `gna-pi-watch.ts` `sendWake` is **echo-guarded**: an identical
|
|
11
|
+
watcher message is delivered at most once per drained state — when both
|
|
12
|
+
durable doors (`state/.wake-queue` and the FM runner's
|
|
13
|
+
`.agents/state/.wake-queue`) are empty, a repeat carry is the same drained
|
|
14
|
+
news and is skipped. Genuine new content (different message, or a door with
|
|
15
|
+
a line) always delivers. Harness asset updated in the same change.
|
|
16
|
+
|
|
17
|
+
### Files
|
|
18
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-16 — app packaging prepared under the @ymir scope (Amendment C, part one)
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **Scoped names.** `apps/odrerir` was `ymir-odrerir` and `apps/sessrumnir` was
|
|
5
|
+
bare `sessrumnir`; both are now `@ymir/odrerir` and `@ymir/sessrumnir`.
|
|
6
|
+
- **Publishable metadata on all four apps** (hlidskjalf, hlidskjalf-mobile,
|
|
7
|
+
odrerir, sessrumnir): `license`, `repository`, `publishConfig.access: public`,
|
|
8
|
+
a `files` surface, and `prepublishOnly` where a build exists.
|
|
9
|
+
- **Measured with `npm pack --dry-run --ignore-scripts`:** hlidskjalf 1.3 MB /
|
|
10
|
+
21 files, odrerir 2.3 MB / 15, sessrumnir 4.0 MB / 116, hlidskjalf-mobile
|
|
11
|
+
2.0 kB / 4 (source only — it has no build script). `dist/ymir.apk` is excluded
|
|
12
|
+
by `!dist/*.apk`: it took the hlidskjalf tarball from 1.3 MB to 14.5 MB, and
|
|
13
|
+
npm is not an APK channel.
|
|
14
|
+
- **`private: true` stays until the Allfather's word** — nothing can publish by
|
|
15
|
+
accident; the flip is one line per app.
|
|
16
|
+
- The app repos were already registered in `$YMIR_HOME/identity/projects.yaml`
|
|
17
|
+
(`zerwiz/{hlidskjalf,hlidskjalf-mobile,odrerir,sessrumnir,smidja}`).
|
|
18
|
+
- `no-mistakes` is initialized for this repo (`no-mistakes init`): the clean-PR
|
|
19
|
+
gate now has its local remote. The vendored skill copy stays — it is the
|
|
20
|
+
canonical tree the skill index names.
|
|
21
|
+
|
|
22
|
+
### Files
|
|
23
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-16 — four readers that still pointed at the pre-split world
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
The app split and the hoard migration moved things; four readers never followed.
|
|
5
|
+
None failed loudly — each reported a clean PASS, a wrong SKIP, or a silent loss.
|
|
6
|
+
|
|
7
|
+
- **`bin/ymir-install.sh` wrote during `--check`.** The step chain ran
|
|
8
|
+
`bin/ymir-migrate.sh apply` unconditionally, so a preview that promises *"report
|
|
9
|
+
only, no writes"* actually **moved private data**. Migrations now apply only on
|
|
10
|
+
a real run: `if [ "$CHECK" = 0 ]; then ... apply; fi`.
|
|
11
|
+
- **`.agents/migrations/0003-private-data-separation.sh` skipped every directory.**
|
|
12
|
+
It pre-creates its target dirs, then its `copy` refused any target that already
|
|
13
|
+
existed — so `data/` (and every other directory source) was silently dropped.
|
|
14
|
+
The realm declaration never arrived and `0004` fell back to a neutral realm.
|
|
15
|
+
`copy` now **merges** a directory into its target (never overwriting a file) and
|
|
16
|
+
copies a single file only when it is absent.
|
|
17
|
+
- **`bin/smidja-bootstrap.sh` looked for the smithy at the old root.** `sys.path`
|
|
18
|
+
pointed at `smidja/`, but the split moved it to `apps/smidja/`, so the DB seed
|
|
19
|
+
died with `ModuleNotFoundError: No module named 'smidja_modules'`. It now
|
|
20
|
+
searches `apps/smidja` then `smidja`, so either layout works.
|
|
21
|
+
- **`bin/ymir-validate.sh` read the ledger from the pre-move path.** It looked at
|
|
22
|
+
`$YMIR_HOME/memory/`, but `0004-hoard-and-realms` put the ledger at
|
|
23
|
+
`$YMIR_HOME/hodd/memory/` — a fa
|
|
24
|
+
|
|
25
|
+
### Files
|
|
26
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-16 — NO BLUE: the forge language replaces the old blue
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
The blue had a name. It was the platform's own house tint, `--ymir-house-ymirlabs:
|
|
5
|
+
#38bdf8`, carried into every surface that wears Ymir's colours — the login, the
|
|
6
|
+
emblem, the realm data, the Smíðja chrome. The design doctrine (homepage repo,
|
|
7
|
+
`DESIGN-UNIFICATION-PLAN.md`) says the landing page **is** the language, and that
|
|
8
|
+
language is **forge**: stone ground (`#0e0c09`), bronze accent (`#c9973f`), bone
|
|
9
|
+
text (`#cfc3a9`).
|
|
10
|
+
|
|
11
|
+
- `midgard/design-system/tokens.css` — the house tint is bronze now, with the
|
|
12
|
+
reason recorded in the token itself.
|
|
13
|
+
- The blue's footprints removed: `Emblem.tsx`, `state/store.ts`, `data/realms.ts`
|
|
14
|
+
(Hlidskjalf), `style.css` (Smíðja visualizer), and Sessrúmnir's terminal accent
|
|
15
|
+
fallback.
|
|
16
|
+
- Both built stylesheets rebuilt and verified: **zero blue** in the CSS the browser
|
|
17
|
+
actually receives (`apps/hlidskjalf/dist`, the visualizer's `dist`).
|
|
18
|
+
- The visualizer's build was failing on my own earlier edit (unused imports left
|
|
19
|
+
when I moved `repoRootOf` into `db.ts`) — fixed, so `bun run build` is green.
|
|
20
|
+
|
|
21
|
+
The canonical token home is answered by what already exists: `midgard/design-system/`
|
|
22
|
+
(tokens, icons, `ymir-mark.svg`, `icons.md`) — one source the apps import, so a
|
|
23
|
+
colour changes once.
|
|
24
|
+
|
|
25
|
+
### Files
|
|
26
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-16 — Omarchy-first, host-aware: Windows and macOS get a door
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **`bin/host-sense.sh`** — the one place that looks before anything acts. It
|
|
5
|
+
reports THIS machine: distro and family, kernel, arch, platform (linux · wsl ·
|
|
6
|
+
macos · windows), session (Wayland/X11), desktop, compositor, package manager,
|
|
7
|
+
and what the desktop can actually *do* — `placement`, `launcher`, `tray`. No
|
|
8
|
+
layer may assert a machine it is not standing on.
|
|
9
|
+
- **Omarchy stays first-class, and is now gated.** `bin/omarchy-sense.sh` opens
|
|
10
|
+
by asserting *"Ymir runs on an Omarchy host"*; on any other host it now skips
|
|
11
|
+
cleanly and points at `bin/host-sense.sh`, rather than recording the wrong
|
|
12
|
+
machine. That is Rule 05's own rule: a layer is gated on its host.
|
|
13
|
+
- **Windows has a door:** `bin/bootstrap-windows.ps1` — enables WSL2, installs
|
|
14
|
+
Ubuntu, then hands the work to `bin/ymir-install.sh` inside the distro. It is
|
|
15
|
+
honest about needing elevation and about the one reboot a fresh machine needs.
|
|
16
|
+
- **macOS has a door:** `bin/bootstrap-macos.sh` — raises Ubuntu in a Lima VM and
|
|
17
|
+
installs Ymir inside it, plus `packaging/macos/Ymir Installer.command`, a
|
|
18
|
+
double-clickable launcher for an operator who should not need a terminal.
|
|
19
|
+
- **The installers themselves:** `packaging/build.sh --exe|--mac|--check`, the
|
|
20
|
+
NSIS script `packaging/windows/ymir-setup.nsi` (→ `Ymir-Setup.exe`), and
|
|
21
|
+
`.github/workflows/ymir-installers.yml`, which builds the exe on an Ubuntu
|
|
22
|
+
runner (NSIS is
|
|
23
|
+
|
|
24
|
+
### Files
|
|
25
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-16 — Smiðja moves into the app tree
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **The smithy is an app.** Its 148 source files moved from
|
|
5
|
+
`.agents/skills/smidja-factory/` to `apps/smidja-factory/`, joining
|
|
6
|
+
hlidskjalf, odrerir and sessrumnir under `apps/`.
|
|
7
|
+
- **Path-transparent.** `.agents/skills/smidja-factory` is now a symlink to
|
|
8
|
+
`../../apps/smidja-factory`, so every existing path resolves unchanged —
|
|
9
|
+
`scripts/start.sh`, `bin/ymir-install.sh`, `bin/ymir-validate.sh`, and the
|
|
10
|
+
skill loader (`.agents/skills` is a skills path). `node_modules/` stays
|
|
11
|
+
gitignored and is not carried.
|
|
12
|
+
- **Still open** (recorded, not done): the root `smidja/` runtime tree
|
|
13
|
+
Amendment A would move to `apps/smidja/`, and Amendment C's per-app GitHub
|
|
14
|
+
repos and npm publishing.
|
|
15
|
+
|
|
16
|
+
### Files
|
|
17
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-16 — the changelog guard: no push ships untold
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **Every push carries a CHANGELOG entry.** `bin/changelog-guard.sh` installs a
|
|
5
|
+
pre-push hook that reads the refs git hands it, resolves the range being
|
|
6
|
+
pushed, and refuses the push when `CHANGELOG.md` is untouched in that range.
|
|
7
|
+
A change that ships is a change that was told; the record can no longer lag
|
|
8
|
+
silently behind the code.
|
|
9
|
+
- **Rule 08 extracted and versioned.** The protected-branch check that lived
|
|
10
|
+
only inside the ad-hoc `.git/hooks/pre-push` is now `bin/branch-guard.sh`, so
|
|
11
|
+
the delivery gate is reproducible: `bin/changelog-guard.sh --install` writes
|
|
12
|
+
the pre-push that runs both guards.
|
|
13
|
+
- **Escape hatch, deliberate and loud.** `YMIR_SKIP_CHANGELOG_GUARD=1 git push`
|
|
14
|
+
when an entry truly does not belong.
|
|
15
|
+
- Checks by hand: `bin/changelog-guard.sh --range A..B`,
|
|
16
|
+
`bin/branch-guard.sh --branch main`.
|
|
17
|
+
|
|
18
|
+
### Files
|
|
19
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-16 — the core senses the real host, not Omarchy's shadow
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **`bin/ymir-install.sh` `step_host` ran the wrong sensor.** The core host step
|
|
5
|
+
called `bin/omarchy-sense.sh` — the **Omarchy-only** sensor — so on any
|
|
6
|
+
non-Omarchy host it learnt nothing and printed the sensor's own SKIP row as a
|
|
7
|
+
host snapshot: `host snapshot: sensor,SKIP,not an Omarchy host…`. On a Fedora
|
|
8
|
+
workstation that is the whole discovery step, reporting a skip as fact.
|
|
9
|
+
- **Now it senses THIS machine with `bin/host-sense.sh`** — the portable sensor
|
|
10
|
+
(the same one behind `ymir sense`) — on **every** host (Rule 05). Recording
|
|
11
|
+
stays the Omarchy layer's job: `omarchy-sense observe`, the post-update hook,
|
|
12
|
+
desktop placement, the plugin offer, and the alarm channel remain gated behind
|
|
13
|
+
`step_omarchy`. Nothing here assumes Omarchy; nothing here skips the core
|
|
14
|
+
machine either.
|
|
15
|
+
- `step_host` no longer branches on `--check`; it senses once and reports once:
|
|
16
|
+
`host sensed: <os> / <id> / <family> / <session> / <desktop>`.
|
|
17
|
+
- The owning asset reflects it in the same change:
|
|
18
|
+
`.agents/skills/galdr-ymirsystem/assets/installation.md` — the `host` step row,
|
|
19
|
+
the Verify list, the two-layer table (recording, not learning), and the
|
|
20
|
+
"Omarchy branches" note.
|
|
21
|
+
|
|
22
|
+
### Files
|
|
23
|
+
- *(carried from the frozen CHANGELOG.md)*
|
package/docs/fixes/runtime/unversioned-2026-09-16-the-hearth-spreads-one-fire-three-more-surfaces.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-16 — the hearth spreads: one fire, three more surfaces
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
Sessrúmnir's fire is now shared rather than copied. `midgard/design-system/ember.js`
|
|
5
|
+
is the framework-neutral original (the land page's Ginnungagap embers: 30 rising
|
|
6
|
+
with a gentle sway over six drifting haze pools), with `ember.d.ts` for TypeScript
|
|
7
|
+
consumers and a reader who asked for less motion gets a **still frame** instead of
|
|
8
|
+
an animation.
|
|
9
|
+
|
|
10
|
+
Wired, and built:
|
|
11
|
+
|
|
12
|
+
- **Hlidskjalf** — `src/components/EmberBackground.tsx` imports the shared module;
|
|
13
|
+
mounted behind the *login* and behind the *shell*, so the door and the hall burn
|
|
14
|
+
over one hearth.
|
|
15
|
+
- **Smíðja visualizer** — a `<canvas class="ember-bg">` behind every view.
|
|
16
|
+
- **Óðrerir** — a `data-ember` canvas in its shell, so the hall warms too.
|
|
17
|
+
- Sessrúmnir keeps its own React port untouched (two ports of one fire, the same
|
|
18
|
+
physics; consolidating them on the shared module is the next tidy).
|
|
19
|
+
|
|
20
|
+
And the reference for the missing furniture: **Óðrerir already carries it all** —
|
|
21
|
+
four favicons, `mask-icon` in bronze, `site.webmanifest`, canonical, description,
|
|
22
|
+
theme-colour and Open Graph. The other apps should be brought up to *it*.
|
|
23
|
+
|
|
24
|
+
### Files
|
|
25
|
+
- *(carried from the frozen CHANGELOG.md)*
|
package/docs/fixes/runtime/unversioned-2026-09-16-the-loader-stops-deleting-merge-never-overwrite.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-16 — the loader stops deleting: merge, never overwrite
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **Root cause of the Apodex-provider loss, mended at the source.** Two writers
|
|
5
|
+
share the untracked `opencode.json`: `bin/valknut-load.sh` (structure, from
|
|
6
|
+
`opencode.json.example`) and `bin/agents-config.sh apply` (the roster —
|
|
7
|
+
providers and per-agent models, from `config/agents.yaml`). The loader
|
|
8
|
+
re-rendered with `sed` + `mv`, so because the example carried only
|
|
9
|
+
`llama.cpp`, **every loader run silently deleted the Apodex provider** that
|
|
10
|
+
lived only in the live file. `config_out` now merges deep and
|
|
11
|
+
`setdefault`-style: missing keys are added, existing ones are never
|
|
12
|
+
overwritten, and the skills path is ensured. Verified by wiping the provider
|
|
13
|
+
by hand: the next run reports `merged(provider.apodex)` and restores it, while
|
|
14
|
+
an unrelated hand-added key survives untouched. Seeding happens only when the
|
|
15
|
+
file is absent.
|
|
16
|
+
- **The changelog guard still bites, without punishing a follow-up.** The
|
|
17
|
+
pre-push guard now accepts either the pushed range touching `CHANGELOG.md` or
|
|
18
|
+
the branch's whole range since it left the trunk touching it — a commit that
|
|
19
|
+
merely lands a file the record already tells needs no micro-entry. A branch
|
|
20
|
+
whose entire range leaves untold is still refused.
|
|
21
|
+
- `bin/valknut-load.sh --status` reports the config outcome
|
|
22
|
+
(`seeded` · `merged(…)` · `unchanged` · `kept`), so a silent stomp can never
|
|
23
|
+
hide behind a "rendered" line again.
|
|
24
|
+
- `harness-int
|
|
25
|
+
|
|
26
|
+
### Files
|
|
27
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-16 — the mesh reaches Teams and Anchor, and `show` stops guessing
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
`bin/a2a-mcp.sh` wired only the well (`engram`) and the mesh (`a2abridge`). The
|
|
5
|
+
**Teams** plane and **Anchor** memory existed only in the operator's personal
|
|
6
|
+
harness config, so no agent *inside* Ymir could see tickets or anchored memory —
|
|
7
|
+
and `a2a-mcp.sh show` insisted on a **fixed** server list, reporting
|
|
8
|
+
`wayofteams-mcp not on PATH` even when the plane was wired and working.
|
|
9
|
+
|
|
10
|
+
- **Remote MCP servers, URL-driven.** `bin/a2a-mcp.sh` now wires `wayofteams`
|
|
11
|
+
(from `WAYOFTEAMS_MCP_URL`) and `way-of-anchor-sse` (from `ANCHOR_MCP_URL`).
|
|
12
|
+
OpenCode gets them natively (`type: remote`); Pi, which has no remote
|
|
13
|
+
transport, gets them through the `mcp-remote` stdio bridge. A URL wins over a
|
|
14
|
+
local `wayofteams-mcp` binary when both exist. The URLs are credential-ish and
|
|
15
|
+
live in the private platform env — never the tracked tree.
|
|
16
|
+
- **`show` reports what is actually wired.** It enumerates every key present in
|
|
17
|
+
Pi's `mcpServers` and OpenCode's `mcp` (union with what this run would add), so
|
|
18
|
+
a hand-added or previously-installed server is visible, and the hint only fires
|
|
19
|
+
when Teams/Anchor is genuinely absent.
|
|
20
|
+
- `galdr-reread`: `assets/harness-integration/README.md` — the MCP scope is now
|
|
21
|
+
well · mesh · Teams · Anchor, with the two env keys named.
|
|
22
|
+
|
|
23
|
+
### Files
|
|
24
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-17 — 0.1.10: the hall answers on its port, and the marks land
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **The SPA listens where it is asked.** A bare `npm run dev` let Vite take 5173,
|
|
5
|
+
so `:3888` answered nothing in either shape; a packaged tree now serves its built
|
|
6
|
+
`./dist` and every shape passes `--port "$HLIDSKJALF_PORT" --strictPort`.
|
|
7
|
+
- **Óðrerir resolves** through `bin/app-lib.sh` instead of the clone's `apps/`.
|
|
8
|
+
- **The launcher entries and rune icons land on any Linux desktop** — the
|
|
9
|
+
freedesktop half of desktop integration is no longer behind Omarchy's gate, so a
|
|
10
|
+
GNOME operator gets marks at all.
|
|
11
|
+
- **The version a user went from and to** is said once, on the first run after an
|
|
12
|
+
update: *the tree moved 0.1.9 → 0.1.10*.
|
|
13
|
+
|
|
14
|
+
### Files
|
|
15
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-17 — 0.1.11: four surfaces, their marks, and a door that mends
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **All four surfaces rise from one npm install** — Hlidskjalf `:3888`, Óðrerir
|
|
5
|
+
`:4322`, the board `:8437`, and Sessrúmnir in its own window; the installer's
|
|
6
|
+
desktop step opens one window per surface.
|
|
7
|
+
- **All four launcher marks land** — the rune glyphs ship in the package
|
|
8
|
+
(`midgard/design-system/`), the mint resolves a packaged app, the apps'
|
|
9
|
+
templates are written before the rune marks so the themed name stands, and a
|
|
10
|
+
retired name is swept from the launcher.
|
|
11
|
+
- **`ymir hlidskjalf` mends the Electron runtime itself** before refusing, because
|
|
12
|
+
npm gates install scripts and a fresh user could otherwise have no window at all.
|
|
13
|
+
- **Every notice can be silenced once and remembered** — `ymir config notice
|
|
14
|
+
version|patience|next|hints off`.
|
|
15
|
+
- **Óðrerir serves its build** from a package, and says what failed when it cannot.
|
|
16
|
+
|
|
17
|
+
### Files
|
|
18
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-17 — Glitnir stops hanging, and one process is one row
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **`/api/reviews` ran two 60-second shell checks on every poll**, so the review board
|
|
5
|
+
hung for a minute and read as a dead surface. It is memoised for a minute now, the
|
|
6
|
+
same discipline the usage endpoint already follows: a board a human reads does not
|
|
7
|
+
need an answer fresher than its own usefulness.
|
|
8
|
+
- **`/api/processes` returns the same id twice** — `systemd:dbus` arrives from two
|
|
9
|
+
sources, 45 entries for 44 processes. The panel dedupes by id, so a repeated process
|
|
10
|
+
renders as the one process it is, and React is no longer handed a duplicate key.
|
|
11
|
+
The duplicate at the source is recorded, not hidden.
|
|
12
|
+
- `/api/stream` answers 200; the live stream is not broken, it was the window.
|
|
13
|
+
|
|
14
|
+
### Files
|
|
15
|
+
- *(carried from the frozen CHANGELOG.md)*
|
package/docs/fixes/runtime/unversioned-2026-09-17-main-is-repaired-and-the-report-wears-the-cloth.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-17 — main is repaired, and the report wears the cloth
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **Main was broken and nobody had noticed.** A merge resolved by hand
|
|
5
|
+
(`4dd7273`, from a parallel branch) kept *both* sides of a conflict in
|
|
6
|
+
`bin/ymir-install.sh` and `scripts/start.sh`: a stray `<`, a duplicated step
|
|
7
|
+
line, orphaned comments, an `if` with no `fi`. The installer could not parse at
|
|
8
|
+
all — `bash -n` failed on main — and PR #53's merge carried the breakage
|
|
9
|
+
forward. Both files are restored from the last revision that parses (`5b7fc66`),
|
|
10
|
+
with the two fixes that revision predated re-applied: the `--phase` value is
|
|
11
|
+
consumed, and `--yes | --non-interactive | --accept-all-defaults` are one thing.
|
|
12
|
+
Every runtime script parses again; the installer's plan runs.
|
|
13
|
+
- **The lesson worth keeping:** a merge is not a place to guess. When both sides
|
|
14
|
+
of a conflict are real, the resolution is a decision — and `bash -n` on every
|
|
15
|
+
runtime script is cheap enough to be part of it.
|
|
16
|
+
- **The validate report wears the cloth** — the same rows rendered for the eye on
|
|
17
|
+
stderr (marks, colour, and a verdict with the next step) while the TOON stays
|
|
18
|
+
the data on stdout. It found real drift while it was being written: the SPA down
|
|
19
|
+
on `:3888`, Nornir cron stopped, `sessrumnir`, `mcp` and `hoard` broken.
|
|
20
|
+
- **Eir watches the shells.** A new surface reports the desktop shells' runtime
|
|
21
|
+
through `bin/electron-lib.sh` — a *partial* Electron runtime is exactly the
|
|
22
|
+
quiet failure Eir e
|
|
23
|
+
|
|
24
|
+
### Files
|
|
25
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-17 — "not again", and four surfaces in one raise
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **Every notice can be silenced.** A line is information once and noise the
|
|
5
|
+
tenth: the version that moved, the long-hour words, the next-steps block, the
|
|
6
|
+
hints. Each now says so **once** in the cloth's faint voice — *not again:
|
|
7
|
+
`ymir config notice version off`* — and the preference is recorded in the
|
|
8
|
+
operator's settings, honoured by the shell cloth and the CLI alike. `ymir config
|
|
9
|
+
show` is the door; four keys: `version · patience · next · hints`.
|
|
10
|
+
- **The package carries the design system.** It never shipped `midgard/`, so the
|
|
11
|
+
rune glyphs — the icons themselves — were absent and every mark failed with
|
|
12
|
+
*no glyph ansuz*. `midgard/design-system/` is in `files[]` now: 30 files, 22
|
|
13
|
+
glyphs.
|
|
14
|
+
- **The marks are written in the right order.** The apps' own launcher templates
|
|
15
|
+
landed *after* the rune marks and overwrote the themed name with an absolute
|
|
16
|
+
`.png`; the templates go first now and the rune marks stand over them.
|
|
17
|
+
- **Óðrerir rises from a package.** Its published tarball carries `dist` and a
|
|
18
|
+
`dev` command that calls a script it does not carry, so `npm run dev` could never
|
|
19
|
+
work from a package — the hall serves its **build** (`astro preview`) where there
|
|
20
|
+
is one, exactly as the SPA does. And its dependencies' absence is no longer
|
|
21
|
+
silent: the hall says what failed and why.
|
|
22
|
+
- **Four surfaces, one raise.** `ymir raise` lifts the SPA, Óðrerir, the board and
|
|
23
|
+
Ses
|
|
24
|
+
|
|
25
|
+
### Files
|
|
26
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-17 — smoke test all UI: two checks that lied about their own subjects
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **The truth gate failed on my own change.** It demanded the connector's total equal
|
|
5
|
+
the herdr pane count; the connector is roster-first now, so it legitimately reports
|
|
6
|
+
agents AND seats (33 vs 13 panes). Panes are a subset of what the board must show.
|
|
7
|
+
Corrected: a FAIL now means FEWER entries than panes — a standing seat hidden from
|
|
8
|
+
the board — which is the fault worth catching. **Verdict: PASS.**
|
|
9
|
+
- **The smoke test reported a present database absent.** It looked for the smithy's db
|
|
10
|
+
at the repo path; the runtime keeps it under `$YMIR_HOME/smidja/`, which is where
|
|
11
|
+
the bootstrap and the gate both resolve it. Same wound as Skrymir and the well: the
|
|
12
|
+
check and the owner disagreeing about where the record lives. **Now: OK, 8 tables.**
|
|
13
|
+
- **Smoke test all UI: 5/5 OK** — spa, api, well, smidja-db, loaders. Truth gate: PASS.
|
|
14
|
+
|
|
15
|
+
Also mended in the same pass: `StatusChip` read `STATUS_META[status].tone`, and the
|
|
16
|
+
fleet now reports a status it was never taught (`seated`), so an unknown status threw
|
|
17
|
+
and killed the gate. An unknown status can no longer take a panel down.
|
|
18
|
+
|
|
19
|
+
### Files
|
|
20
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-17 — the changelog stops conflicting: fragments, folded by a script
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **The problem, measured.** `CHANGELOG.md` is one file and every branch appends
|
|
5
|
+
at the same position — the top. Git sees two branches inserting different lines
|
|
6
|
+
at the same spot and calls it a conflict, so **every merge re-conflicts every
|
|
7
|
+
open branch**. Sixteen open PRs were each resolved by hand for this reason
|
|
8
|
+
alone, and each merge re-conflicted the rest: O(N²) meaningless conflicts.
|
|
9
|
+
- **The fix — `CHANGELOG.d/`.** A change adds **one file with a unique name**
|
|
10
|
+
(`<YYYY-MM-DD>-<slug>.md`) instead of editing the ledger. Two branches never
|
|
11
|
+
touch the same fragment, so the collision cannot occur.
|
|
12
|
+
- **`bin/changelog-assemble.sh`** folds fragments into `CHANGELOG.md` — newest
|
|
13
|
+
first, above everything already recorded. Folding is an **append**: existing
|
|
14
|
+
entries are copied verbatim, never reordered, never rewritten. `--dry-run`
|
|
15
|
+
shows what would fold; `--check` exits 1 when fragments are unfolded.
|
|
16
|
+
- **The pre-push hook folds first.** `bin/changelog-guard.sh --install` now
|
|
17
|
+
writes a hook that runs the assembler before the guards, so a push never leaves
|
|
18
|
+
fragments unfolded; if folding changes the ledger the push is refused until the
|
|
19
|
+
fold is committed.
|
|
20
|
+
- **The guard accepts either form.** A push satisfies the duty by appending to
|
|
21
|
+
`CHANGELOG.md` **or** by adding a fragment. The refusal message now names both.
|
|
22
|
+
- **Rule 06 is amended, append-only** — the clause stands;
|
|
23
|
+
|
|
24
|
+
### Files
|
|
25
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-17 — the doors, written down where a user will find them
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **`README.md` gains "After it installs — the doors"**: the two commands on PATH,
|
|
5
|
+
the twelve doors on `ymir`, the lawless name that answers once and points at the
|
|
6
|
+
lawful one, the patience words in full, and a section on **both shapes** — a
|
|
7
|
+
clone and a package, with one resolver and one rule (colour for the eye, TOON
|
|
8
|
+
for the pipe).
|
|
9
|
+
- **The skills that must know are taught.** Galdr's `assets/installation.md` gains
|
|
10
|
+
the shape table, the eighteen converted call sites, and the trap that named
|
|
11
|
+
itself (`printf -v` writes to the function's scope — scratch names are
|
|
12
|
+
function-prefixed for that reason). The `ymir-host` skill's `assets/install.md`
|
|
13
|
+
gains the doors and how to exercise the *other* shape without a second machine
|
|
14
|
+
(`YMIR_ROOT_DIR`). The `groa-update` skill gains the step that matters after
|
|
15
|
+
every update: **re-check where the apps live** — a shape assumption is a bug
|
|
16
|
+
that only shows itself on the other shape — and say the long hour in the house's
|
|
17
|
+
voice.
|
|
18
|
+
|
|
19
|
+
### Files
|
|
20
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-17 — the duplicate extensions removed from the project tree
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **The fault, now measured exactly.** The project-local extension tree carried four
|
|
5
|
+
files that the shared source also carries — `gna-pi-watch.ts`, `ro.ts`,
|
|
6
|
+
`skuld-branch-supervision.ts`, `syn-turnend-guard.ts`. pi auto-discovers both the
|
|
7
|
+
global home and the project tree, so each loaded twice and pi refused the second
|
|
8
|
+
copy of every tool: `Tool "gna_watch_arm" conflicts with …`. Every `pi` start in
|
|
9
|
+
every worktree died on it, which is why a seated worker fell back to a shell.
|
|
10
|
+
- **The fix:** those four files are gone from the project tree. What remains there is
|
|
11
|
+
`lib/` — the modules the *global* extensions import — and its README. The
|
|
12
|
+
extensions themselves live in the shared source and in the one global home.
|
|
13
|
+
- The seatbelt refused the plain shapes (`rm`, `mv`, `>`-bearing commands) on this
|
|
14
|
+
path and named the remedy: *a reviewed commit*. This is that commit.
|
|
15
|
+
|
|
16
|
+
### Files
|
|
17
|
+
- *(carried from the frozen CHANGELOG.md)*
|
package/docs/fixes/runtime/unversioned-2026-09-17-the-extensions-deployed-without-their-modules.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-17 — the extensions deployed without their modules
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **pi would not start a seated worker, and the reason was a half-deploy.**
|
|
5
|
+
The four shared pi extensions all reported
|
|
6
|
+
`Failed to load extension: Cannot find module ./lib/<module>.ts` — and every one
|
|
7
|
+
of those modules was present in the repo, one level away under the extensions'
|
|
8
|
+
own `lib/`. The loader copied the top-level extension files and never their
|
|
9
|
+
supporting modules.
|
|
10
|
+
- **Mended in two places.** (1) The missing modules are now beside the deployed
|
|
11
|
+
extensions, so a running pi loads all four. (2) `bin/valknut-load.sh` — the
|
|
12
|
+
loader — now deploys that lib alongside the extensions, idempotently (identical
|
|
13
|
+
files untouched), so a fresh machine cannot hit it. A deploy that copies a file
|
|
14
|
+
but not the module it imports is not a deploy.
|
|
15
|
+
- **What this cost:** the Forseti audit was seated on a **local** model, and the
|
|
16
|
+
pane fell back to a bare shell when pi could not start — which is why the brief
|
|
17
|
+
was typed at a prompt and answered `bash: syntax error near unexpected token '('`.
|
|
18
|
+
With the extensions mended, pi's remaining blocker is the model: the llama-router
|
|
19
|
+
has no raisable seat tonight (`:8080` unbound, and the installed llama.cpp cannot
|
|
20
|
+
load the Apodex weights), so a local-first dispatch has nothing to reach.
|
|
21
|
+
|
|
22
|
+
### Files
|
|
23
|
+
- *(carried from the frozen CHANGELOG.md)*
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
## runtime · unversioned · 2026-09-17 — the feed follows Brokk's thinking past the composer
|
|
2
|
+
|
|
3
|
+
### Why
|
|
4
|
+
- **Sessrúmnir's auto-scroll never counted streamed THINKING as growth.**
|
|
5
|
+
`useChatScroll` watched `messages` and `streamingContent` only, so a
|
|
6
|
+
reasoning-heavy turn (thinking before any visible content) grew the feed
|
|
7
|
+
without moving it — the thinking block ended up below the floating composer,
|
|
8
|
+
behind it, and the Allfather had to scroll down to read it.
|
|
9
|
+
- **The growth signal now also includes `streamingThinking` and streaming tool
|
|
10
|
+
calls.** While Brokk reasons, the feed keeps the thinking tail in view above
|
|
11
|
+
the composer (still only when Auto Scroll is on and the reader is at the
|
|
12
|
+
bottom — scrolling up to re-read never gets yanked).
|
|
13
|
+
- Live hall updated: rebuilt renderer delivered to the running Sessrúmnir and
|
|
14
|
+
the app restarted via `bin/sessrumnir.sh` (window back on workspace 8).
|
|
15
|
+
|
|
16
|
+
### Files
|
|
17
|
+
- *(carried from the frozen CHANGELOG.md)*
|