@zerwiz/ymir 0.1.4 → 0.1.7
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/README.md +291 -0
- package/.agents/agents/bragi-marketer.md +111 -0
- package/.agents/agents/brokk.md +352 -0
- package/.agents/agents/forseti-reviewer.md +93 -0
- package/.agents/agents/frigg-consent.md +77 -0
- package/.agents/agents/groa-update.md +77 -0
- package/.agents/agents/hnoss-designer.md +69 -0
- package/.agents/agents/huginn-researcher.md +99 -0
- package/.agents/agents/jord-projects.md +78 -0
- package/.agents/agents/kvasir-scout.md +91 -0
- package/.agents/agents/mimir-planner.md +92 -0
- package/.agents/agents/muninn-stow.md +77 -0
- package/.agents/agents/saga-bearings.md +78 -0
- package/.agents/agents/sindri-developer.md +114 -0
- package/.agents/agents/snotra-documenter.md +105 -0
- package/.agents/agents/syn-recovery.md +78 -0
- package/.agents/agents/tyr-check.md +78 -0
- package/.agents/agents/urdh-hold.md +77 -0
- package/.agents/agents/volundr-smith.md +80 -0
- package/.agents/agents/vor-diagnostics.md +77 -0
- package/.agents/assets/agents/naming.md +50 -0
- package/.agents/assets/agents/registry.md +93 -0
- package/.agents/assets/agents/runtime.md +36 -0
- package/.agents/assets/agents/toon-tasks-cli.md +42 -0
- package/.agents/assets/templates/company_entity.template.md +37 -0
- package/.agents/backend/README.md +74 -0
- package/.agents/backend/backends/cmux.sh +649 -0
- package/.agents/backend/backends/herdr-eventwait.py +157 -0
- package/.agents/backend/backends/herdr-workspace-move.py +114 -0
- package/.agents/backend/backends/herdr.sh +3386 -0
- package/.agents/backend/backends/orca.sh +290 -0
- package/.agents/backend/backends/tmux.sh +357 -0
- package/.agents/backend/backends/zellij.sh +700 -0
- package/.agents/backend/fm-afk-launch.sh +654 -0
- package/.agents/backend/fm-afk-return.sh +241 -0
- package/.agents/backend/fm-afk-start.sh +172 -0
- package/.agents/backend/fm-arm-command-policy.mjs +960 -0
- package/.agents/backend/fm-arm-pretool-check.sh +200 -0
- package/.agents/backend/fm-backend-hometag-lib.sh +52 -0
- package/.agents/backend/fm-backend.sh +981 -0
- package/.agents/backend/fm-backlog-handoff.sh +909 -0
- package/.agents/backend/fm-backlog-receive.sh +187 -0
- package/.agents/backend/fm-backlog-transition-lib.sh +779 -0
- package/.agents/backend/fm-bearings-board.sh +204 -0
- package/.agents/backend/fm-bearings-snapshot.sh +546 -0
- package/.agents/backend/fm-bootstrap.sh +1568 -0
- package/.agents/backend/fm-branch-outcome.sh +203 -0
- package/.agents/backend/fm-branch-prompt.sh +101 -0
- package/.agents/backend/fm-brief.sh +452 -0
- package/.agents/backend/fm-busy-event.sh +234 -0
- package/.agents/backend/fm-busy-lib.sh +986 -0
- package/.agents/backend/fm-captain-hold.sh +1001 -0
- package/.agents/backend/fm-cd-command-policy.mjs +153 -0
- package/.agents/backend/fm-cd-pretool-check.sh +190 -0
- package/.agents/backend/fm-check-lib.sh +74 -0
- package/.agents/backend/fm-check-register.sh +42 -0
- package/.agents/backend/fm-check-unregister.sh +52 -0
- package/.agents/backend/fm-classify-lib.sh +1770 -0
- package/.agents/backend/fm-claude-stop-autoarm.sh +334 -0
- package/.agents/backend/fm-composer-lib.sh +1416 -0
- package/.agents/backend/fm-config-inherit-lib.sh +1202 -0
- package/.agents/backend/fm-config-push.sh +254 -0
- package/.agents/backend/fm-control-lib.sh +251 -0
- package/.agents/backend/fm-control.sh +878 -0
- package/.agents/backend/fm-crew-state.sh +625 -0
- package/.agents/backend/fm-cursor-lib.sh +243 -0
- package/.agents/backend/fm-decision-hold.sh +232 -0
- package/.agents/backend/fm-doc-audience-check.sh +269 -0
- package/.agents/backend/fm-dod-lib.sh +67 -0
- package/.agents/backend/fm-ensure-agents-md.sh +253 -0
- package/.agents/backend/fm-extension-launch-barrier.mjs +129 -0
- package/.agents/backend/fm-extension.mjs +2577 -0
- package/.agents/backend/fm-extension.sh +16 -0
- package/.agents/backend/fm-ff-lib.sh +420 -0
- package/.agents/backend/fm-fleet-snapshot.sh +1463 -0
- package/.agents/backend/fm-fleet-sync.sh +458 -0
- package/.agents/backend/fm-fleet-view.sh +96 -0
- package/.agents/backend/fm-gate-refuse-lib.sh +102 -0
- package/.agents/backend/fm-guard.sh +242 -0
- package/.agents/backend/fm-harness.sh +195 -0
- package/.agents/backend/fm-herdr-ci-cleanup.sh +115 -0
- package/.agents/backend/fm-herdr-lab.sh +346 -0
- package/.agents/backend/fm-herdr-session-cleanup.sh +337 -0
- package/.agents/backend/fm-home-seed.sh +984 -0
- package/.agents/backend/fm-home-summary-refresh.sh +255 -0
- package/.agents/backend/fm-hook-host-lib.sh +36 -0
- package/.agents/backend/fm-inactive-reconcile.sh +531 -0
- package/.agents/backend/fm-inbox.sh +399 -0
- package/.agents/backend/fm-install-actionlint.sh +84 -0
- package/.agents/backend/fm-install-herdr.sh +96 -0
- package/.agents/backend/fm-install-shellcheck.sh +84 -0
- package/.agents/backend/fm-install-treehouse.sh +95 -0
- package/.agents/backend/fm-kimi-turnend-hook.sh +276 -0
- package/.agents/backend/fm-lease-lib.sh +218 -0
- package/.agents/backend/fm-lease.sh +189 -0
- package/.agents/backend/fm-line-cap-lib.sh +51 -0
- package/.agents/backend/fm-lint-workflows.sh +137 -0
- package/.agents/backend/fm-lint.sh +591 -0
- package/.agents/backend/fm-lock-lib.sh +104 -0
- package/.agents/backend/fm-lock.sh +107 -0
- package/.agents/backend/fm-marker-lib.sh +12 -0
- package/.agents/backend/fm-merge-local.sh +74 -0
- package/.agents/backend/fm-merge-outcome-lib.sh +138 -0
- package/.agents/backend/fm-nm-run-lib.sh +124 -0
- package/.agents/backend/fm-on.sh +125 -0
- package/.agents/backend/fm-operational-input.sh +253 -0
- package/.agents/backend/fm-peek.sh +46 -0
- package/.agents/backend/fm-pending-reply-lib.sh +1409 -0
- package/.agents/backend/fm-pr-check.sh +135 -0
- package/.agents/backend/fm-pr-lib.sh +1016 -0
- package/.agents/backend/fm-pr-merge.sh +707 -0
- package/.agents/backend/fm-pr-poll.sh +110 -0
- package/.agents/backend/fm-primary-scope-lib.sh +33 -0
- package/.agents/backend/fm-procevent-extension-capture.pl +259 -0
- package/.agents/backend/fm-procevent-lavish.sh +628 -0
- package/.agents/backend/fm-procevent-lib.sh +892 -0
- package/.agents/backend/fm-procevent-quota.sh +290 -0
- package/.agents/backend/fm-procevent-remote-reply.sh +577 -0
- package/.agents/backend/fm-procevent-when.sh +504 -0
- package/.agents/backend/fm-procevent.sh +1466 -0
- package/.agents/backend/fm-project-mode.sh +92 -0
- package/.agents/backend/fm-project-origin-lib.sh +180 -0
- package/.agents/backend/fm-promote.sh +282 -0
- package/.agents/backend/fm-public-followup-emit.sh +260 -0
- package/.agents/backend/fm-public-followup-lib.sh +398 -0
- package/.agents/backend/fm-public-followup.sh +1330 -0
- package/.agents/backend/fm-push-transition-lib.sh +168 -0
- package/.agents/backend/fm-quota-axi-lib.sh +93 -0
- package/.agents/backend/fm-quota-choose.sh +384 -0
- package/.agents/backend/fm-remote-delta-read.sh +189 -0
- package/.agents/backend/fm-remote-doctor.sh +800 -0
- package/.agents/backend/fm-remote-entrypoint.sh +193 -0
- package/.agents/backend/fm-remote-file.sh +234 -0
- package/.agents/backend/fm-remote-home-provision.sh +259 -0
- package/.agents/backend/fm-remote-home-seed.sh +259 -0
- package/.agents/backend/fm-remote-inherit-push.sh +90 -0
- package/.agents/backend/fm-remote-inherit.sh +179 -0
- package/.agents/backend/fm-remote-job-lib.sh +1241 -0
- package/.agents/backend/fm-remote-job-reap-orphans.sh +137 -0
- package/.agents/backend/fm-remote-job-worker.sh +1124 -0
- package/.agents/backend/fm-remote-readiness-lib.sh +44 -0
- package/.agents/backend/fm-remote-secondmate-control.sh +340 -0
- package/.agents/backend/fm-review-diff.sh +158 -0
- package/.agents/backend/fm-secondmate-charter-lib.sh +44 -0
- package/.agents/backend/fm-secondmate-nudge-lib.sh +68 -0
- package/.agents/backend/fm-secondmate-parent-lib.sh +70 -0
- package/.agents/backend/fm-secondmate-reconcile.sh +371 -0
- package/.agents/backend/fm-secondmate-registry-lib.sh +311 -0
- package/.agents/backend/fm-secondmate-report.sh +88 -0
- package/.agents/backend/fm-send.sh +1059 -0
- package/.agents/backend/fm-session-lock-lib.sh +176 -0
- package/.agents/backend/fm-session-start.sh +970 -0
- package/.agents/backend/fm-sessionstart-cursor.sh +40 -0
- package/.agents/backend/fm-sessionstart-nudge.sh +45 -0
- package/.agents/backend/fm-sessionstart-run.sh +145 -0
- package/.agents/backend/fm-spawn.sh +3153 -0
- package/.agents/backend/fm-startup-memory-budget-lib.sh +224 -0
- package/.agents/backend/fm-startup-memory-budget.sh +94 -0
- package/.agents/backend/fm-startup-network.sh +642 -0
- package/.agents/backend/fm-stow-cascade.sh +251 -0
- package/.agents/backend/fm-subagent-pretool-check.sh +207 -0
- package/.agents/backend/fm-supervise-daemon.sh +1732 -0
- package/.agents/backend/fm-supervision-instructions.sh +215 -0
- package/.agents/backend/fm-supervision-lib.sh +90 -0
- package/.agents/backend/fm-supervisor-target-lib.sh +78 -0
- package/.agents/backend/fm-tangle-lib.sh +53 -0
- package/.agents/backend/fm-task-inbox-lib.sh +402 -0
- package/.agents/backend/fm-tasks-axi-lib.sh +123 -0
- package/.agents/backend/fm-teardown.sh +2922 -0
- package/.agents/backend/fm-test-isolation-proof.sh +588 -0
- package/.agents/backend/fm-test-run.sh +2191 -0
- package/.agents/backend/fm-timeout-lib.sh +141 -0
- package/.agents/backend/fm-timing-lib.sh +179 -0
- package/.agents/backend/fm-tmux-lib.sh +291 -0
- package/.agents/backend/fm-tool-update-check.sh +898 -0
- package/.agents/backend/fm-trace-context-lib.sh +227 -0
- package/.agents/backend/fm-transition-lib.sh +103 -0
- package/.agents/backend/fm-turnend-guard-cursor.sh +391 -0
- package/.agents/backend/fm-turnend-guard-grok.sh +90 -0
- package/.agents/backend/fm-turnend-guard.sh +432 -0
- package/.agents/backend/fm-update.sh +110 -0
- package/.agents/backend/fm-vendor-auth-probe.sh +190 -0
- package/.agents/backend/fm-voice-client.py +1373 -0
- package/.agents/backend/fm-voice-relay.py +1256 -0
- package/.agents/backend/fm-wake-drain.sh +592 -0
- package/.agents/backend/fm-wake-grant.sh +127 -0
- package/.agents/backend/fm-wake-lib.sh +1849 -0
- package/.agents/backend/fm-watch-arm.sh +602 -0
- package/.agents/backend/fm-watch-checkpoint.sh +109 -0
- package/.agents/backend/fm-watch.sh +1962 -0
- package/.agents/backend/fm-x-dismiss.sh +116 -0
- package/.agents/backend/fm-x-followup.sh +286 -0
- package/.agents/backend/fm-x-lib.sh +1000 -0
- package/.agents/backend/fm-x-link.sh +234 -0
- package/.agents/backend/fm-x-poll.sh +185 -0
- package/.agents/backend/fm-x-reply.sh +385 -0
- package/.agents/backend/fm_voice_frame.py +166 -0
- package/.agents/backend/fm_voice_records.py +574 -0
- package/.agents/backend/model-bridge.py +360 -0
- package/.agents/backend/opencode-go-bridge.py +30 -0
- package/.agents/bus/README.md +12 -0
- package/.agents/bus/messages.json +1 -0
- package/.agents/config/agents.machine.example.yaml +16 -0
- package/.agents/config/agents.yaml.example +72 -0
- package/.agents/config/crew-dispatch.json +22 -0
- package/.agents/config/cron.yaml +11 -0
- package/.agents/config/eindri-dispatch.json +67 -0
- package/.agents/config/eindri-harness +1 -0
- package/.agents/config/startup-memory-budget +1 -0
- package/.agents/filebrowser/.filebrowser.json +6 -0
- package/.agents/filebrowser/README.md +11 -0
- package/.agents/gateway/README.md +12 -0
- package/.agents/github/README.md +15 -0
- package/.agents/github/webhooks/.gitkeep +0 -0
- package/.agents/github/workflows/.gitkeep +0 -0
- package/.agents/harness/opencode/plugins/lib/rodd-operational-input.js +37 -0
- package/.agents/harness/opencode/plugins/package.json +4 -0
- package/.agents/harness/opencode/plugins/saga-sessionstart.js +77 -0
- package/.agents/harness/opencode/plugins/syn-cd-check.js +61 -0
- package/.agents/harness/opencode/plugins/syn-pretool-check.js +68 -0
- package/.agents/harness/opencode/plugins/syn-turnend-guard.js +105 -0
- package/.agents/harness/opencode/plugins/syn-watch-arm.js +521 -0
- package/.agents/memory/README.md +46 -0
- package/.agents/memory/runes_audit.md +5 -0
- package/.agents/migrations/0001-hodd-layout.sh +38 -0
- package/.agents/migrations/0002-a2a-mcp.sh +27 -0
- package/.agents/migrations/0003-private-data-separation.sh +121 -0
- package/.agents/migrations/0004-hoard-and-realms.sh +104 -0
- package/.agents/migrations/0005-roots-out-of-tree.sh +158 -0
- package/.agents/sandbox/Dockerfile.utgard +19 -0
- package/.agents/sandbox/README.md +14 -0
- package/.agents/sandbox/utgard.config.json +14 -0
- package/.agents/skills/README.md +59 -0
- package/.agents/skills/bragi-marketing/README.md +3 -0
- package/.agents/skills/bragi-marketing/SKILL.md +82 -0
- package/.agents/skills/eindri-homes/README.md +3 -0
- package/.agents/skills/eindri-homes/SKILL.md +291 -0
- package/.agents/skills/eindri-homes/assets/control-plane.md +122 -0
- package/.agents/skills/eindri-homes/assets/dispatch.md +80 -0
- package/.agents/skills/frigg-consent/README.md +3 -0
- package/.agents/skills/frigg-consent/SKILL.md +56 -0
- package/.agents/skills/galdr-ymirsystem/README.md +3 -0
- package/.agents/skills/galdr-ymirsystem/SKILL.md +159 -0
- package/.agents/skills/galdr-ymirsystem/assets/README.md +74 -0
- package/.agents/skills/galdr-ymirsystem/assets/brokk-distro-runtime.md +390 -0
- package/.agents/skills/galdr-ymirsystem/assets/build-method.md +113 -0
- package/.agents/skills/galdr-ymirsystem/assets/build-tool-categories.md +178 -0
- package/.agents/skills/galdr-ymirsystem/assets/eindri-orchestration.md +518 -0
- package/.agents/skills/galdr-ymirsystem/assets/eindri-profiles.md +136 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/README.md +736 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/claude-code.md +197 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/codex.md +191 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/cursor.md +193 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/opencode.md +262 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/pi.md +295 -0
- package/.agents/skills/galdr-ymirsystem/assets/hlidskjalf-ui.md +539 -0
- package/.agents/skills/galdr-ymirsystem/assets/installation.md +763 -0
- package/.agents/skills/galdr-ymirsystem/assets/local-models/HOST-DATA.example.md +72 -0
- package/.agents/skills/galdr-ymirsystem/assets/local-models.md +274 -0
- package/.agents/skills/galdr-ymirsystem/assets/memory-well.md +163 -0
- package/.agents/skills/galdr-ymirsystem/assets/nornir-jobs.md +415 -0
- package/.agents/skills/galdr-ymirsystem/assets/norse-naming.md +325 -0
- package/.agents/skills/galdr-ymirsystem/assets/odrerir-hall.md +133 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/einherjar-spawn.schema.json +81 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/herdr-profile.toml +75 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/pi-profile.yml +101 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/supervision-tree.yml +163 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot-guide.md +58 -0
- package/.agents/skills/galdr-ymirsystem/assets/porting-upstream-to-norse.md +301 -0
- package/.agents/skills/galdr-ymirsystem/assets/principles.md +385 -0
- package/.agents/skills/galdr-ymirsystem/assets/reference-adoption.md +99 -0
- package/.agents/skills/galdr-ymirsystem/assets/registry.md +379 -0
- package/.agents/skills/galdr-ymirsystem/assets/runtime-compliance.md +463 -0
- package/.agents/skills/galdr-ymirsystem/assets/runtime-components.md +553 -0
- package/.agents/skills/galdr-ymirsystem/assets/smidja.md +180 -0
- package/.agents/skills/galdr-ymirsystem/schemas/toon-schemas.md +190 -0
- package/.agents/skills/galdr-ymirsystem/scripts/README.md +45 -0
- package/.agents/skills/galdr-ymirsystem/scripts/bench-one.sh +248 -0
- package/.agents/skills/galdr-ymirsystem/scripts/compliance-check.sh +503 -0
- package/.agents/skills/galdr-ymirsystem/scripts/gpu-sample.sh +43 -0
- package/.agents/skills/galdr-ymirsystem/scripts/stop-all.sh +34 -0
- package/.agents/skills/galdr-ymirsystem/scripts/toon-check.py +188 -0
- package/.agents/skills/gjallarhorn-relay/README.md +3 -0
- package/.agents/skills/gjallarhorn-relay/SKILL.md +283 -0
- package/.agents/skills/groa-update/SKILL.md +90 -0
- package/.agents/skills/hamr-adapters/README.md +3 -0
- package/.agents/skills/hamr-adapters/SKILL.md +123 -0
- package/.agents/skills/hamr-adapters/references/common/control-and-recovery.md +37 -0
- package/.agents/skills/hamr-adapters/references/common/dispatch.md +32 -0
- package/.agents/skills/hamr-adapters/references/common/model-and-effort.md +42 -0
- package/.agents/skills/hamr-adapters/references/common/primary-hooks.md +40 -0
- package/.agents/skills/hamr-adapters/references/harness/claude.md +55 -0
- package/.agents/skills/hamr-adapters/references/harness/codex.md +43 -0
- package/.agents/skills/hamr-adapters/references/harness/cursor.md +75 -0
- package/.agents/skills/hamr-adapters/references/harness/grok.md +69 -0
- package/.agents/skills/hamr-adapters/references/harness/kimi.md +51 -0
- package/.agents/skills/hamr-adapters/references/harness/muse.md +70 -0
- package/.agents/skills/hamr-adapters/references/harness/opencode.md +42 -0
- package/.agents/skills/hamr-adapters/references/harness/pi.md +56 -0
- package/.agents/skills/herdr-panes/README.md +3 -0
- package/.agents/skills/herdr-panes/SKILL.md +92 -0
- package/.agents/skills/herdr-panes/assets/herdr-backend.md +346 -0
- package/.agents/skills/herdr-panes/assets/tmux-backend.md +115 -0
- package/.agents/skills/hnoss-design/DESIGN.md +19 -0
- package/.agents/skills/hnoss-design/README.md +3 -0
- package/.agents/skills/hnoss-design/SKILL.md +83 -0
- package/.agents/skills/hvild-afk/README.md +3 -0
- package/.agents/skills/hvild-afk/SKILL.md +241 -0
- package/.agents/skills/jord-projects/README.md +3 -0
- package/.agents/skills/jord-projects/SKILL.md +92 -0
- package/.agents/skills/lifecycle/SKILL.md +56 -0
- package/.agents/skills/lifecycle/smoke_test.sh +57 -0
- package/.agents/skills/lifecycle/start.sh +21 -0
- package/.agents/skills/lifecycle/status.sh +35 -0
- package/.agents/skills/lifecycle/stop.sh +16 -0
- package/.agents/skills/muninn-stow/README.md +3 -0
- package/.agents/skills/muninn-stow/SKILL.md +309 -0
- package/.agents/skills/no-mistakes/SKILL.md +379 -0
- package/.agents/skills/nornir-schedule/README.md +3 -0
- package/.agents/skills/nornir-schedule/SKILL.md +25 -0
- package/.agents/skills/nornir-schedule/assets/events.md +137 -0
- package/.agents/skills/nornir-schedule/assets/quota.md +131 -0
- package/.agents/skills/nsr-compliance/README.md +3 -0
- package/.agents/skills/nsr-compliance/SKILL.md +29 -0
- package/.agents/skills/nsr-compliance/assets/nsr/README.md +40 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/README.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/git-workflow.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/security.md +22 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/tech-stack.md +8 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/SKILL.md +71 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/config/core_four.yaml +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/validate_code.sh +29 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/verify_docs.py +66 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/generate.sh +109 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/telemetry/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/README.md +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/features/README.md +36 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/features/SKILL-template.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/README.md +25 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/SKILL.md +13 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/create_branch.sh +6 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/safe_commit.sh +9 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/sync_upstream.sh +6 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/README.md +27 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/SKILL.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/smoke_test.sh +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/start.sh +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/status.sh +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/stop.sh +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/config/core_four.yaml +13 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/telemetry/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/README.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/api.md +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/compliance-wiring.md +155 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/frontend.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/README.md +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/clients/README.md +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/clients/template-README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/deploy.sh +49 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/development.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/production.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/staging.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/tenants/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/tenants/template.env.example +8 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/README.md +26 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/agent.md +7 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/developers/dev-1.md +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/linux.md +9 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/macos.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/shared.md +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/windows.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/README.md +25 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/_template.md +41 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/hosting-1.md +41 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/README.md +21 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/README.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/deployment.md +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/disaster-recovery.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/ops-tasks.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/features/README.md +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/project-skills.md +146 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/research/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/research/software-compliance-research.md +269 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/working-with-agents.md +260 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/AGENTS.md +38 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/ARCHITECTURE.md +36 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/BEST_PRACTICES.md +27 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/CI_CD.md +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/FEATURES.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/README.md +22 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/RULES.md +37 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/STRUCTURE.md +45 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/TECH_STACK.md +28 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scaffold-spec.md +63 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scripts/scaffold.sh +103 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scripts/validate.sh +52 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/SKILL.md +71 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/config/core_four.yaml +16 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/validate_code.sh +29 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/verify_docs.py +66 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/generate.sh +109 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/telemetry/README.md +11 -0
- package/.agents/skills/pr-ops/README.md +3 -0
- package/.agents/skills/pr-ops/SKILL.md +109 -0
- package/.agents/skills/ratatoskr-a2a/README.md +3 -0
- package/.agents/skills/ratatoskr-a2a/SKILL.md +148 -0
- package/.agents/skills/rules-check-drift/SKILL.md +81 -0
- package/.agents/skills/saga-bearings/README.md +3 -0
- package/.agents/skills/saga-bearings/SKILL.md +26 -0
- package/.agents/skills/saga-bearings/assets/bearings.md +161 -0
- package/.agents/skills/saga-bearings/assets/board-template.html +731 -0
- package/.agents/skills/saga-bearings/assets/recap.md +56 -0
- package/.agents/skills/syn-recovery/README.md +3 -0
- package/.agents/skills/syn-recovery/SKILL.md +54 -0
- package/.agents/skills/tyr-check/README.md +3 -0
- package/.agents/skills/tyr-check/SKILL.md +218 -0
- package/.agents/skills/urdh-hold/README.md +3 -0
- package/.agents/skills/urdh-hold/SKILL.md +25 -0
- package/.agents/skills/urdh-hold/assets/decisions.md +15 -0
- package/.agents/skills/urdh-hold/assets/hold.md +54 -0
- package/.agents/skills/vor-diagnostics/README.md +3 -0
- package/.agents/skills/vor-diagnostics/SKILL.md +68 -0
- package/.agents/skills/ymir-host/README.md +3 -0
- package/.agents/skills/ymir-host/SKILL.md +35 -0
- package/.agents/skills/ymir-host/assets/desktop.md +36 -0
- package/.agents/skills/ymir-host/assets/install.md +69 -0
- package/.agents/skills/ymir-host/assets/omarchy.md +297 -0
- package/.agents/skills/ymir-host/assets/runbooks.md +15 -0
- package/.agents/skills/ymir-host/assets/thjazi.md +220 -0
- package/.agents/skills/ymir-host/assets/update.md +64 -0
- package/.agents/tests/assets/board-render-harness.mjs +117 -0
- package/.agents/tests/cmux-test-safety.sh +51 -0
- package/.agents/tests/fixtures.sh +291 -0
- package/.agents/tests/fm-afk-inject-e2e.test.sh +428 -0
- package/.agents/tests/fm-afk-inject-herdr-e2e.test.sh +536 -0
- package/.agents/tests/fm-afk-launch.test.sh +961 -0
- package/.agents/tests/fm-afk-pi-herdr-return-e2e.test.sh +297 -0
- package/.agents/tests/fm-afk-return.test.sh +283 -0
- package/.agents/tests/fm-arm-pretool-check.test.sh +482 -0
- package/.agents/tests/fm-ask-user-authority.test.sh +42 -0
- package/.agents/tests/fm-backend-autodetect-smoke.test.sh +176 -0
- package/.agents/tests/fm-backend-cmux-smoke.test.sh +188 -0
- package/.agents/tests/fm-backend-cmux.test.sh +1166 -0
- package/.agents/tests/fm-backend-herdr-eventwait-smoke.test.sh +136 -0
- package/.agents/tests/fm-backend-herdr-eventwait.test.py +106 -0
- package/.agents/tests/fm-backend-herdr-focus-flash-e2e.test.sh +409 -0
- package/.agents/tests/fm-backend-herdr-launcher-workspace-e2e.test.sh +437 -0
- package/.agents/tests/fm-backend-herdr-presentation-e2e.test.sh +1424 -0
- package/.agents/tests/fm-backend-herdr-prune-safety-e2e.test.sh +180 -0
- package/.agents/tests/fm-backend-herdr-respawn-idem-e2e.test.sh +182 -0
- package/.agents/tests/fm-backend-herdr-smoke.test.sh +355 -0
- package/.agents/tests/fm-backend-herdr-workspace-per-home-e2e.test.sh +251 -0
- package/.agents/tests/fm-backend-herdr.test.sh +4606 -0
- package/.agents/tests/fm-backend-orca.test.sh +1357 -0
- package/.agents/tests/fm-backend-tmux-smoke.test.sh +173 -0
- package/.agents/tests/fm-backend-zellij-smoke.test.sh +205 -0
- package/.agents/tests/fm-backend-zellij.test.sh +1360 -0
- package/.agents/tests/fm-backend.test.sh +1142 -0
- package/.agents/tests/fm-backlog-atomicity.test.sh +2302 -0
- package/.agents/tests/fm-backlog-handoff.test.sh +1360 -0
- package/.agents/tests/fm-bearings-board-render.test.sh +135 -0
- package/.agents/tests/fm-bearings-board.test.sh +414 -0
- package/.agents/tests/fm-bearings-snapshot.test.sh +1990 -0
- package/.agents/tests/fm-bootstrap-network-parallel.test.sh +316 -0
- package/.agents/tests/fm-bootstrap.test.sh +1178 -0
- package/.agents/tests/fm-branch-supervision.test.sh +552 -0
- package/.agents/tests/fm-brief.test.sh +785 -0
- package/.agents/tests/fm-busy-adapter-wiring.test.sh +324 -0
- package/.agents/tests/fm-busy-state.test.sh +465 -0
- package/.agents/tests/fm-calm-pi-extension.test.sh +3979 -0
- package/.agents/tests/fm-captain-hold-lifecycle.test.sh +1187 -0
- package/.agents/tests/fm-cd-pretool-check.test.sh +400 -0
- package/.agents/tests/fm-check-unregister.test.sh +198 -0
- package/.agents/tests/fm-classify-corr-token.test.sh +543 -0
- package/.agents/tests/fm-classify-decision-key.test.sh +340 -0
- package/.agents/tests/fm-claude-stop-autoarm-live-e2e.test.sh +164 -0
- package/.agents/tests/fm-claude-stop-autoarm.test.sh +1190 -0
- package/.agents/tests/fm-cmux-claude-composer-live-e2e.test.sh +110 -0
- package/.agents/tests/fm-codex-continuity-live-e2e.test.sh +55 -0
- package/.agents/tests/fm-composer-ghost.test.sh +716 -0
- package/.agents/tests/fm-composer-lib.test.sh +666 -0
- package/.agents/tests/fm-composer-matrix-live-e2e.test.sh +220 -0
- package/.agents/tests/fm-control-herdr-smoke.test.sh +149 -0
- package/.agents/tests/fm-control-relaunch.test.sh +1530 -0
- package/.agents/tests/fm-control.test.sh +910 -0
- package/.agents/tests/fm-crew-state.test.sh +1610 -0
- package/.agents/tests/fm-cursor-harness.test.sh +404 -0
- package/.agents/tests/fm-cursor-primary-live-e2e.test.sh +217 -0
- package/.agents/tests/fm-cursor-primary.test.sh +708 -0
- package/.agents/tests/fm-daemon.test.sh +2740 -0
- package/.agents/tests/fm-documentation-audiences.test.sh +141 -0
- package/.agents/tests/fm-ensure-agents-md.test.sh +371 -0
- package/.agents/tests/fm-extension-binding.test.sh +2187 -0
- package/.agents/tests/fm-fleet-snapshot-view.test.sh +816 -0
- package/.agents/tests/fm-fleet-sync.test.sh +721 -0
- package/.agents/tests/fm-gate-refuse.test.sh +356 -0
- package/.agents/tests/fm-gitignore-config.test.sh +89 -0
- package/.agents/tests/fm-gotmp.test.sh +230 -0
- package/.agents/tests/fm-grok-continuity-live-e2e.test.sh +112 -0
- package/.agents/tests/fm-grok-harness.test.sh +117 -0
- package/.agents/tests/fm-grok-stop-live-e2e.test.sh +219 -0
- package/.agents/tests/fm-guard-stale-banner.test.sh +709 -0
- package/.agents/tests/fm-harness-adapter-instructions-live-e2e.test.sh +134 -0
- package/.agents/tests/fm-harness-adapter-references.test.sh +30 -0
- package/.agents/tests/fm-harness-liveness-drift-live-e2e.test.sh +151 -0
- package/.agents/tests/fm-herdr-lab.test.sh +243 -0
- package/.agents/tests/fm-herdr-session-cleanup-e2e.test.sh +146 -0
- package/.agents/tests/fm-herdr-session-cleanup.test.sh +329 -0
- package/.agents/tests/fm-herdr-submit-confirm-live-e2e.test.sh +125 -0
- package/.agents/tests/fm-herdr-version-floor-live-e2e.test.sh +144 -0
- package/.agents/tests/fm-home-summary-refresh.test.sh +971 -0
- package/.agents/tests/fm-inactive-reconcile.test.sh +485 -0
- package/.agents/tests/fm-kimi-harness.test.sh +687 -0
- package/.agents/tests/fm-lint-workflows.test.sh +532 -0
- package/.agents/tests/fm-lint.test.sh +1023 -0
- package/.agents/tests/fm-muse-harness.test.sh +932 -0
- package/.agents/tests/fm-muse-signals-live-e2e.test.sh +205 -0
- package/.agents/tests/fm-no-mistakes-required.test.sh +72 -0
- package/.agents/tests/fm-on.test.sh +507 -0
- package/.agents/tests/fm-opencode-primary-live-e2e.test.sh +357 -0
- package/.agents/tests/fm-operational-input.test.sh +160 -0
- package/.agents/tests/fm-peek-remote.test.sh +110 -0
- package/.agents/tests/fm-pending-reply.test.sh +1288 -0
- package/.agents/tests/fm-pi-branch-extension.test.sh +3182 -0
- package/.agents/tests/fm-pi-branch-live-e2e.test.sh +527 -0
- package/.agents/tests/fm-pi-primary-live-e2e.test.sh +345 -0
- package/.agents/tests/fm-pi-primary-types.test.sh +68 -0
- package/.agents/tests/fm-pi-watch-extension.test.sh +2843 -0
- package/.agents/tests/fm-pr-check-security.test.sh +2140 -0
- package/.agents/tests/fm-pr-merge.test.sh +2135 -0
- package/.agents/tests/fm-procevent-quota.test.sh +225 -0
- package/.agents/tests/fm-procevent-when.test.sh +406 -0
- package/.agents/tests/fm-procevent.test.sh +1745 -0
- package/.agents/tests/fm-project-origin.test.sh +110 -0
- package/.agents/tests/fm-public-followup.test.sh +2272 -0
- package/.agents/tests/fm-quota-array-dispatch-live-e2e.test.sh +526 -0
- package/.agents/tests/fm-quota-choose.test.sh +626 -0
- package/.agents/tests/fm-remote-backlog-handoff.test.sh +453 -0
- package/.agents/tests/fm-remote-doctor.test.sh +625 -0
- package/.agents/tests/fm-remote-entrypoint.test.sh +59 -0
- package/.agents/tests/fm-remote-job-orphan-reap.test.sh +205 -0
- package/.agents/tests/fm-remote-job.test.sh +768 -0
- package/.agents/tests/fm-remote-reply.test.sh +520 -0
- package/.agents/tests/fm-remote-secondmate-lifecycle-e2e.test.sh +1256 -0
- package/.agents/tests/fm-remote-secondmate-parent-binding.test.sh +326 -0
- package/.agents/tests/fm-remote-secondmate-trace-context.test.sh +310 -0
- package/.agents/tests/fm-remote-transport-lanes.test.sh +431 -0
- package/.agents/tests/fm-review-diff.test.sh +176 -0
- package/.agents/tests/fm-secondmate-harness.test.sh +2600 -0
- package/.agents/tests/fm-secondmate-lifecycle-e2e.test.sh +259 -0
- package/.agents/tests/fm-secondmate-liveness.test.sh +559 -0
- package/.agents/tests/fm-secondmate-reconcile.test.sh +732 -0
- package/.agents/tests/fm-secondmate-safety.test.sh +2972 -0
- package/.agents/tests/fm-secondmate-sync.test.sh +913 -0
- package/.agents/tests/fm-send-inbox-doorbell-live-e2e.test.sh +206 -0
- package/.agents/tests/fm-send-inbox.test.sh +352 -0
- package/.agents/tests/fm-send-popup-settle.test.sh +167 -0
- package/.agents/tests/fm-send-remote-delivery.test.sh +796 -0
- package/.agents/tests/fm-send-resolve-key.test.sh +551 -0
- package/.agents/tests/fm-send-secondmate-marker-herdr-e2e.test.sh +187 -0
- package/.agents/tests/fm-send-secondmate-marker.test.sh +278 -0
- package/.agents/tests/fm-send-settle.test.sh +147 -0
- package/.agents/tests/fm-send-strict.test.sh +241 -0
- package/.agents/tests/fm-session-lock-ancestry.test.sh +365 -0
- package/.agents/tests/fm-session-start.test.sh +2515 -0
- package/.agents/tests/fm-sessionstart-hook-live-e2e.test.sh +631 -0
- package/.agents/tests/fm-sessionstart-instruction-refresh-live-e2e.test.sh +230 -0
- package/.agents/tests/fm-sessionstart-nudge.test.sh +1039 -0
- package/.agents/tests/fm-shared-captain-inheritance.test.sh +404 -0
- package/.agents/tests/fm-spawn-batch.test.sh +148 -0
- package/.agents/tests/fm-spawn-dispatch-profile.test.sh +827 -0
- package/.agents/tests/fm-spawn-pool-base-freshen.test.sh +440 -0
- package/.agents/tests/fm-spawn-worktree-settle.test.sh +147 -0
- package/.agents/tests/fm-startup-memory-budget.test.sh +333 -0
- package/.agents/tests/fm-startup-network.test.sh +712 -0
- package/.agents/tests/fm-stow-cascade.test.sh +370 -0
- package/.agents/tests/fm-subagent-pretool-check.test.sh +291 -0
- package/.agents/tests/fm-supervision-events.test.sh +156 -0
- package/.agents/tests/fm-supervision-instructions.test.sh +189 -0
- package/.agents/tests/fm-tangle-guard.test.sh +277 -0
- package/.agents/tests/fm-task-delivery.test.sh +420 -0
- package/.agents/tests/fm-task-inbox.test.sh +513 -0
- package/.agents/tests/fm-teardown-endpoint-safety.test.sh +374 -0
- package/.agents/tests/fm-teardown.test.sh +2665 -0
- package/.agents/tests/fm-test-fixture-cleanup.test.sh +172 -0
- package/.agents/tests/fm-test-fixtures.test.sh +132 -0
- package/.agents/tests/fm-test-isolation-proof.test.sh +278 -0
- package/.agents/tests/fm-test-run.test.sh +1196 -0
- package/.agents/tests/fm-tmux-agent-liveness.test.sh +354 -0
- package/.agents/tests/fm-tmux-submit-busy.test.sh +340 -0
- package/.agents/tests/fm-tool-update-check.test.sh +1044 -0
- package/.agents/tests/fm-trace-context-lib.test.sh +253 -0
- package/.agents/tests/fm-trace-context-spawn.test.sh +581 -0
- package/.agents/tests/fm-transition-lib.test.sh +54 -0
- package/.agents/tests/fm-turnend-guard.test.sh +1822 -0
- package/.agents/tests/fm-update.test.sh +304 -0
- package/.agents/tests/fm-vendor-auth-probe.test.sh +395 -0
- package/.agents/tests/fm-voice-relay.test.sh +4741 -0
- package/.agents/tests/fm-wake-daemon-lifecycle-e2e.test.sh +171 -0
- package/.agents/tests/fm-wake-drain-open-decisions-cursor.test.sh +356 -0
- package/.agents/tests/fm-wake-drain-open-decisions.test.sh +226 -0
- package/.agents/tests/fm-wake-drain-unread-status.test.sh +379 -0
- package/.agents/tests/fm-wake-queue.test.sh +1224 -0
- package/.agents/tests/fm-watch-arm.test.sh +821 -0
- package/.agents/tests/fm-watch-checkpoint.test.sh +87 -0
- package/.agents/tests/fm-watch-recovery-loop.test.sh +223 -0
- package/.agents/tests/fm-watch-triage.test.sh +3889 -0
- package/.agents/tests/fm-watcher-lock.test.sh +1133 -0
- package/.agents/tests/fm-x-mode.test.sh +3042 -0
- package/.agents/tests/gleipnir-guard-pretool-check.test.sh +51 -0
- package/.agents/tests/gleipnir-machine-lock.test.sh +130 -0
- package/.agents/tests/herdr-test-safety.sh +42 -0
- package/.agents/tests/lib.sh +315 -0
- package/.agents/tests/remote-herdr-fixture.sh +125 -0
- package/.agents/tests/secondmate-helpers.sh +193 -0
- package/.agents/tests/smoke.test.sh +93 -0
- package/.agents/tests/wake-helpers.sh +338 -0
- package/.agents/tests/zellij-test-safety.sh +60 -0
- package/.agents/tools/README.md +10 -0
- package/.agents/tools/bin/tasks-cli +267 -0
- package/.agents/tools/tasks-cli.ts +216 -0
- package/AGENTS.md +498 -0
- package/CHANGELOG.md +1913 -0
- package/LICENSE +1 -1
- package/NOTICE +63 -0
- package/README.md +114 -60
- package/RULES/01-domains.md +51 -0
- package/RULES/02-agents.md +78 -0
- package/RULES/03-houses.md +61 -0
- package/RULES/04-hoard.md +97 -0
- package/RULES/05-platforms.md +67 -0
- package/RULES/06-append-only.md +108 -0
- package/RULES/07-config.md +101 -0
- package/RULES/08-delivery-gate.md +75 -0
- package/RULES/09-electron.md +58 -0
- package/RULES/README.md +22 -0
- package/bin/README.md +107 -0
- package/bin/a2a-mcp.sh +133 -0
- package/bin/a2a-serve.py +103 -0
- package/bin/a2a-serve.sh +8 -0
- package/bin/a2a-talk.sh +50 -0
- package/bin/a2abridge-ensure.sh +108 -0
- package/bin/agent-run.sh +43 -0
- package/bin/agents-config.sh +256 -0
- package/bin/apodex-smoke-test.sh +105 -0
- package/bin/bifrost-bridge.sh +131 -0
- package/bin/bifrost-ingress.sh +77 -0
- package/bin/bootstrap-macos.sh +112 -0
- package/bin/bootstrap-windows.ps1 +112 -0
- package/bin/branch-guard.sh +64 -0
- package/bin/brokk +73 -0
- package/bin/brokk-classify-lib.sh +1770 -0
- package/bin/brokk-lease-lib.sh +222 -0
- package/bin/brokk-lease.sh +193 -0
- package/bin/brokk-lint.sh +65 -0
- package/bin/brokk-send.sh +51 -0
- package/bin/brokk-update.sh +9 -0
- package/bin/brokk-wake-grant.sh +127 -0
- package/bin/brokk-wake-lib.sh +1849 -0
- package/bin/changelog-assemble.sh +154 -0
- package/bin/changelog-guard.sh +197 -0
- package/bin/crash-sense.sh +173 -0
- package/bin/design-check.sh +80 -0
- package/bin/design-icon.sh +153 -0
- package/bin/desktop-place.sh +224 -0
- package/bin/docs-guard.sh +39 -0
- package/bin/editor-place.sh +225 -0
- package/bin/eindri-acclaim.sh +47 -0
- package/bin/eindri-control.sh +28 -0
- package/bin/eindri-role.sh +83 -0
- package/bin/eindri-seat.sh +83 -0
- package/bin/eindri-seen.sh +54 -0
- package/bin/eindri-send.sh +15 -0
- package/bin/eindri-start.sh +98 -0
- package/bin/eindri-watch.sh +57 -0
- package/bin/einherjar-spawn.sh +576 -0
- package/bin/eir-doctor.sh +158 -0
- package/bin/erindi-brief.sh +271 -0
- package/bin/feature-inventory.sh +73 -0
- package/bin/fleet-apply.sh +81 -0
- package/bin/github-deploy.sh +94 -0
- package/bin/gjallarhorn-expose.sh +136 -0
- package/bin/gjallarhorn-notify.sh +71 -0
- package/bin/gjallarhorn-purge.sh +67 -0
- package/bin/gjallarhorn-tunnel.sh +85 -0
- package/bin/gleipnir-lock-lib.sh +284 -0
- package/bin/groa-update.sh +130 -0
- package/bin/hall-snapshot.sh +111 -0
- package/bin/hamr-harness.sh +246 -0
- package/bin/heimdall-ssh-keys.sh +374 -0
- package/bin/herdr-agents.py +44 -0
- package/bin/herdr-ensure.sh +104 -0
- package/bin/herdr-run.sh +452 -0
- package/bin/hermes-ensure.sh +88 -0
- package/bin/hlidskjalf-agents.sh +172 -0
- package/bin/hlidskjalf-usage.sh +196 -0
- package/bin/hoard-guard.sh +135 -0
- package/bin/hoard-lib.sh +105 -0
- package/bin/hodd.sh +102 -0
- package/bin/host-sense.sh +199 -0
- package/bin/huginn-research-worker.sh +121 -0
- package/bin/local-model-lock.sh +70 -0
- package/bin/mimir-bridge.py +259 -0
- package/bin/mimir-bridge.sh +100 -0
- package/bin/mimir-ingest.sh +131 -0
- package/bin/mimir-reflect.sh +27 -0
- package/bin/mimir.sh +113 -0
- package/bin/mjollnir-webhook.sh +72 -0
- package/bin/mjollnir.sh +104 -0
- package/bin/model-hardware.sh +96 -0
- package/bin/model-resolve.sh +160 -0
- package/bin/models-detect.sh +178 -0
- package/bin/nornir-cron-start.sh +162 -0
- package/bin/nornir-job-daily-briefing.sh +191 -0
- package/bin/nornir-job-git-sync.sh +152 -0
- package/bin/nornir-job-hall-snapshot.sh +28 -0
- package/bin/nornir-job-memory-housekeeping.sh +114 -0
- package/bin/nornir-job-nsr-compliance.sh +54 -0
- package/bin/nornir-job-observer.sh +166 -0
- package/bin/nornir-job-skillopt-sleep.sh +76 -0
- package/bin/npm-publish.sh +136 -0
- package/bin/omarchy-hook-install.sh +60 -0
- package/bin/omarchy-install.sh +161 -0
- package/bin/omarchy-plugins.sh +187 -0
- package/bin/omarchy-sense.sh +162 -0
- package/bin/perm-guard.sh +30 -0
- package/bin/pi-agent.sh +68 -0
- package/bin/pi-ensure.sh +77 -0
- package/bin/pi-local.sh +37 -0
- package/bin/pi-model-agnostic.sh +71 -0
- package/bin/pi-seat.sh +63 -0
- package/bin/prereq-ensure.sh +166 -0
- package/bin/private-guard.sh +58 -0
- package/bin/project-git.sh +69 -0
- package/bin/public-guard.sh +71 -0
- package/bin/ratatoskr.sh +49 -0
- package/bin/realm-lib.sh +32 -0
- package/bin/repo-scrub.sh +62 -0
- package/bin/rodd-operational-input.sh +250 -0
- package/bin/runes-append.sh +198 -0
- package/bin/saga-session-start.sh +172 -0
- package/bin/saga-sessionstart-run.sh +79 -0
- package/bin/saga-wake-drain.sh +41 -0
- package/bin/secret-guard.sh +63 -0
- package/bin/sessrumnir-ensure.sh +100 -0
- package/bin/sessrumnir-sync.sh +237 -0
- package/bin/sessrumnir.sh +104 -0
- package/bin/skillopt-setup.sh +76 -0
- package/bin/skuld-branch-outcome.sh +203 -0
- package/bin/skuld-branch-prompt.sh +101 -0
- package/bin/smidja-bootstrap.sh +94 -0
- package/bin/smidja-observe.sh +86 -0
- package/bin/syn-arm-pretool-check.sh +57 -0
- package/bin/syn-asset-pretool-check.sh +89 -0
- package/bin/syn-cd-pretool-check.sh +28 -0
- package/bin/syn-guard-pretool-check.sh +83 -0
- package/bin/syn-spawn-pretool-check.sh +58 -0
- package/bin/syn-turnend-guard.sh +36 -0
- package/bin/syn-watch-arm.sh +99 -0
- package/bin/tailscale-sync.sh +203 -0
- package/bin/telegram-bot.sh +82 -0
- package/bin/toolchain.sh +74 -0
- package/bin/ui-truth-check.sh +75 -0
- package/bin/utgard.sh +111 -0
- package/bin/valhalla.sh +115 -0
- package/bin/valknut-load.sh +298 -0
- package/bin/vor-crew-state.sh +124 -0
- package/bin/wedge-notify.sh +60 -0
- package/bin/workspace-provision.sh +80 -0
- package/bin/workspace-rag.sh +163 -0
- package/bin/wyrd-db.sh +47 -0
- package/bin/yggdrasil.sh +152 -0
- package/bin/ymir-edit.sh +145 -0
- package/bin/ymir-install.sh +806 -0
- package/bin/ymir-invite.sh +93 -0
- package/bin/ymir-isolation.sh +88 -0
- package/bin/ymir-migrate.sh +61 -0
- package/bin/ymir-plan.sh +356 -0
- package/bin/ymir-platform.sh +348 -0
- package/bin/ymir-say.sh +110 -0
- package/bin/ymir-setup-auth.sh +119 -0
- package/bin/ymir-validate.sh +193 -0
- package/bin/ymir.js +74 -16
- package/docs/Architecture.md +339 -0
- package/docs/design.md +351 -0
- package/docs/installations/README.md +63 -0
- package/docs/installations/ymir-home.md +93 -0
- package/docs/integration.md +105 -0
- package/docs/lore.md +1060 -0
- package/docs/research/agent-harnesses.md +290 -0
- package/docs/runbooks/README.md +19 -0
- package/docs/runbooks/a2a.md +91 -0
- package/docs/runbooks/agent-permissions.md +99 -0
- package/docs/runbooks/agents.md +57 -0
- package/docs/runbooks/models.md +69 -0
- package/docs/runbooks/realm-onboarding.md +60 -0
- package/docs/runbooks/secrets-and-hoard.md +60 -0
- package/docs/runbooks/updates-and-migrations.md +110 -0
- package/docs/runbooks/worktrees-isolation.md +72 -0
- package/docs/session-start.md +105 -0
- package/docs/skillopt-integration.md +321 -0
- package/docs/sync-system.md +66 -0
- package/docs/workspaces.md +104 -0
- package/docs/ymir-rut.md +260 -0
- package/package.json +54 -14
- package/packaging/build.sh +74 -0
- package/packaging/macos/Ymir Installer.command +43 -0
- package/packaging/windows/ymir-setup.nsi +74 -0
- package/scripts/README.md +22 -0
- package/scripts/electron.sh +269 -0
- package/scripts/lower.sh +34 -0
- package/scripts/raise.sh +42 -0
- package/scripts/start.sh +217 -0
- package/scripts/stop.sh +113 -0
- package/install.sh +0 -35
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
# Runtime Compliance — the acceptance gates Galdr/Tyr enforce
|
|
2
|
+
|
|
3
|
+
Purpose: the runnable acceptance checklist for the Brokk/Eindri/Nornir runtime. Every gate
|
|
4
|
+
below is verified against real artifacts in this repo, with the exact command, the pass
|
|
5
|
+
criterion, and the failure mode. Nothing ships on a mock, an example, or a silent fallback.
|
|
6
|
+
|
|
7
|
+
> Galdr is the **master builder and maintainer** of the Ymir runtime: it forges the tooling
|
|
8
|
+
> surface, defines the ergonomic contract, and keeps the runtime honest. Tyr is the judge —
|
|
9
|
+
> the one-handed who holds the gate. A gate is not "probably fine"; it is a command that exits
|
|
10
|
+
> 0 with evidence.
|
|
11
|
+
|
|
12
|
+
The canonical source scripts live in `bin/` and `config/`; the canonical reference docs are the
|
|
13
|
+
siblings of this file (`eindri-orchestration.md`, `nornir-jobs.md`). The runtime's authority is
|
|
14
|
+
`docs/plans/29-brokk-distro-runtime.md` and `AGENTS.md`.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 1. Gates at a glance
|
|
19
|
+
|
|
20
|
+
| # | Gate | Command | Pass criterion |
|
|
21
|
+
|---|---|---|---|
|
|
22
|
+
| 1 | Shell parses | `bash -n <script>` for every `bin/*.sh` | No syntax errors. |
|
|
23
|
+
| 2 | JSON parses | `python3 -c "json.load(...)"` for every JSON | No `JSONDecodeError`. |
|
|
24
|
+
| 3 | Smoke evidence | run each runtime script standalone | Exit 0; expected line present. |
|
|
25
|
+
| 4 | Norse naming | audit component names against the table | Every subsystem named for its Norse figure. |
|
|
26
|
+
| 5 | Harness fail-closed | spawn with an unverified/absent harness | Non-zero exit, plain reason, no silent fallback. |
|
|
27
|
+
| 6 | Session lock | inspect `state/.lock` | Bound to a live PID; refused lock ⇒ read-only. |
|
|
28
|
+
| 7 | Turn-end guard | run `syn-turnend-guard.sh` with/without arm marker | Inert (0) until armed; 2 when armed and stale. |
|
|
29
|
+
| 8 | No mocks/examples/placeholders | grep the shipped runtime | No TODO/FIXME/MOCK/placeholder in `bin/`, live `config/`. |
|
|
30
|
+
| 9 | Cron idempotent + date-guarded | start twice; inspect stamps | One loop; one run per job per day. |
|
|
31
|
+
| 10 | Observer read-only | confirm a run touches only `state/` + Runes | No writes to Ymir's tree or the read-only worktree root. |
|
|
32
|
+
| 11 | Secrets never committed | secret scan + ignore audit | No secret literal; ignore rules cover env files. |
|
|
33
|
+
| 12 | Governed assets current | `compliance-check.sh` (`assets` check) | A governed path changed in the working tree has its owning asset changed too. |
|
|
34
|
+
| 13 | **Governed paths resolve** | `compliance-check.sh` (`governed` check) | Every path in `AGENTS.md`'s `governed[]` table exists (or its glob matches something). |
|
|
35
|
+
| 14 | **Harness surfaces resolve** | `compliance-check.sh` (`harnesses` check) | Every link in `.claude/agents`, `.codex/agents`, `.cursor/agents`, `.pi/agents`, `.opencode/agents` lands (one hop) in `.agents/agents/`, and no nested `SKILL.md` carries frontmatter — a phantom skill. |
|
|
36
|
+
| 15 | **Skill index true** | `compliance-check.sh` (`skillindex` check) | Every real skill dir is named in `.agents/skills/README.md`, and every `.agents/skills/<name>` path the assets cite exists. |
|
|
37
|
+
|
|
38
|
+
### Governed paths — load the asset before you edit
|
|
39
|
+
|
|
40
|
+
The `assets` gate and the `bin/syn-asset-pretool-check.sh` seatbelt both use this
|
|
41
|
+
map. The seatbelt **denies the edit** until the asset was read this session
|
|
42
|
+
(reads recorded in `state/asset-reads`); the gate **fails the run** when the code
|
|
43
|
+
changed but the asset did not.
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
governed[6]{path,load_first}:
|
|
47
|
+
"bin/ymir-install.sh",".agents/skills/galdr-ymirsystem/assets/installation.md"
|
|
48
|
+
"apps/hlidskjalf/**",".agents/skills/galdr-ymirsystem/assets/hlidskjalf-ui.md"
|
|
49
|
+
"bin/mimir*",".agents/skills/galdr-ymirsystem/assets/memory-well.md"
|
|
50
|
+
"bin/nornir-* | config/cron.yaml",".agents/skills/galdr-ymirsystem/assets/nornir-jobs.md"
|
|
51
|
+
"bin/valknut-load.sh | .pi/** | .opencode/**",".agents/skills/galdr-ymirsystem/assets/harness-integration/README.md"
|
|
52
|
+
"bin/smidja* | .agents/skills/smidja-factory/**",".agents/skills/galdr-ymirsystem/assets/smidja.md"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
The same routes appear in `AGENTS.md` (`governed[]`) and are printed in the
|
|
56
|
+
session digest under `ASSET ROUTING`, so the mapping is reachable even when the
|
|
57
|
+
galdr router itself is not loaded.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 2. Gate detail
|
|
62
|
+
|
|
63
|
+
### G13 — every governed path resolves (the silent-failure guard)
|
|
64
|
+
|
|
65
|
+
A governed path that does not exist is **worse than a missing rule**: the pretool
|
|
66
|
+
guard's `asset_for` stops matching, so the protection is gone and nothing fails,
|
|
67
|
+
warns, or logs. This was not hypothetical — the `smidja` → `smidja-factory`
|
|
68
|
+
rename left `smidja-factory-factory` in seven places, including `AGENTS.md`'s own
|
|
69
|
+
`governed[]` table and the guard's pattern, and the smidja rule quietly stopped
|
|
70
|
+
protecting anything.
|
|
71
|
+
|
|
72
|
+
The check reads the `governed[]` table out of `AGENTS.md`, splits each row on
|
|
73
|
+
`|` (a row may name alternatives), and resolves every entry — a plain path with
|
|
74
|
+
`-e`, a glob with `compgen -G` — counting all of them:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
bash .agents/skills/galdr-ymirsystem/scripts/compliance-check.sh | grep governed
|
|
78
|
+
# "governed","governed paths resolve","PASS","all 25 governed paths exist"
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Rule for a rename:** `grep -rn '<old>' --include='*.sh' --include='*.md'` across
|
|
82
|
+
`bin/`, `AGENTS.md`, and `.agents/skills/*/assets/` — including the *patterns* that
|
|
83
|
+
name governed paths, not just the prose. Then re-run this check.
|
|
84
|
+
|
|
85
|
+
### G14 — harness surfaces resolve, and no phantom skills (the loading guard)
|
|
86
|
+
|
|
87
|
+
Two failures hide in the harness layer, and neither is visible from the code:
|
|
88
|
+
|
|
89
|
+
1. **A symlink that no longer resolves.** Rule 02 says `.agents/agents` is
|
|
90
|
+
canonical and every harness dir (`.claude/agents`, `.codex/agents`,
|
|
91
|
+
`.cursor/agents`, `.pi/agents`, `.opencode/agents`) is a link into it. The
|
|
92
|
+
`galdr-cli` → `galdr-ymirsystem` rename left `.agents/agents/galdr.md`
|
|
93
|
+
dangling, so Galdr's agent surface did not exist in *any* harness — and
|
|
94
|
+
nothing failed loudly; the harness simply had no such agent.
|
|
95
|
+
2. **A nested `SKILL.md` carried as a phantom skill.** A recursive scanner
|
|
96
|
+
(opencode, pi, claude) walks `skills.paths` to any depth. A `SKILL.md` below
|
|
97
|
+
`.agents/skills/<skill>/` that carries YAML frontmatter is loaded as a second,
|
|
98
|
+
real skill. Three were live this way: two superseded galdr crafters, and the
|
|
99
|
+
NSR scaffolding spec. A nested `SKILL.md` *without* frontmatter is an inert
|
|
100
|
+
template (the NSR `agents_skills/` layer) and is left alone.
|
|
101
|
+
|
|
102
|
+
The link check resolves **one hop**, deliberately: Galdr's canonical agent file
|
|
103
|
+
is itself a symlink into the skill (the dual-surface rule), so following the
|
|
104
|
+
whole chain would wrongly call it off-tree.
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
bash .agents/skills/galdr-ymirsystem/scripts/compliance-check.sh | grep harnesses
|
|
108
|
+
# "harnesses","harness surfaces + skill discovery","PASS","50 agent links resolve; no phantom skills"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### G15 — the skill index is true (the registry guard)
|
|
112
|
+
|
|
113
|
+
`.agents/skills/README.md` is the canonical index. It drifted to 23 entries
|
|
114
|
+
while 26 skills existed, and the mirrored registries cited a layout that no
|
|
115
|
+
longer existed (`smidja/`, `gunnlod`, `hamr`, `saga`, `ymir`, `open-design`).
|
|
116
|
+
An index that names a skill which is gone sends the agent to a file that is not
|
|
117
|
+
there.
|
|
118
|
+
|
|
119
|
+
The check compares the real skill dirs against the index (both directions) and
|
|
120
|
+
resolves every `.agents/skills/<name>` path cited by the Galdr assets and
|
|
121
|
+
`.agents/agents/brokk.md`. A line marked *planned*, *legacy*, *superseded*,
|
|
122
|
+
*removed*, *abandoned*, *retired* or *former* is exempt by intent — an index may
|
|
123
|
+
name what is coming or gone, but never what never was.
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
bash .agents/skills/galdr-ymirsystem/scripts/compliance-check.sh | grep skillindex
|
|
127
|
+
# "skillindex","skill index + cited skill paths","PASS","26 skills, all indexed and cited paths resolve"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### G1 — every shell script is `bash -n` clean
|
|
131
|
+
|
|
132
|
+
**Why:** a syntax error in a cron job or spawn path fails silently at 03:00 unless the parse is
|
|
133
|
+
checked now.
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
fail=0
|
|
137
|
+
while IFS= read -r f; do
|
|
138
|
+
bash -n "$f" 2>/tmp/bn.err || { echo "SYNTAX FAIL: $f"; cat /tmp/bn.err; fail=1; }
|
|
139
|
+
done < <(find bin .agents -name '*.sh' -type f | sort)
|
|
140
|
+
[ "$fail" = 0 ] && echo "G1 PASS: all shell scripts parse clean"
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Pass:** `G1 PASS`. **Failure:** any `SYNTAX FAIL`, exit 1.
|
|
144
|
+
|
|
145
|
+
### G2 — every JSON parses
|
|
146
|
+
|
|
147
|
+
**Why:** `config/eindri-dispatch.json` gates dispatch and `sandcastle.config.json` gates Utgard
|
|
148
|
+
caps; a trailing comma breaks the runtime.
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
fail=0
|
|
152
|
+
while IFS= read -r f; do
|
|
153
|
+
python3 -c "import json,sys; json.load(open(sys.argv[1]))" "$f" 2>/dev/null \
|
|
154
|
+
&& echo "OK $f" || { echo "BAD $f"; fail=1; }
|
|
155
|
+
done < <(find config .agents -name '*.json' -type f | sort)
|
|
156
|
+
[ "$fail" = 0 ] && echo "G2 PASS: all JSON parses"
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**Pass:** `G2 PASS`. **Failure:** any `BAD`, exit 1.
|
|
160
|
+
|
|
161
|
+
### G3 — smoke-test evidence
|
|
162
|
+
|
|
163
|
+
**Why:** "it parses" is not "it runs". Each runtime script must execute standalone and emit its
|
|
164
|
+
contract line.
|
|
165
|
+
|
|
166
|
+
| Script | Smoke command | Expected |
|
|
167
|
+
|---|---|---|
|
|
168
|
+
| `bin/hamr-harness.sh` | `bin/hamr-harness.sh` | one of `claude codex opencode pi pi-signed grok kimi cursor unknown` |
|
|
169
|
+
| `bin/nornir-cron-start.sh` | `bin/nornir-cron-start.sh --status` | `cron: running … jobs=<n>` or `cron: stopped …` |
|
|
170
|
+
| `bin/vor-crew-state.sh <id>` | after a spawn | `state: … · source: … · …` |
|
|
171
|
+
| `bin/runes-append.sh` | `… smoke ledger.append --message x` | `runes: appended … checksum=…` |
|
|
172
|
+
| `bin/einherjar-spawn.sh --help` | `--help` | usage text, exit 0 |
|
|
173
|
+
| `bin/erindi-brief.sh --help` | `--help` | usage text, exit 0 |
|
|
174
|
+
| `bin/saga-session-start.sh` | `bash bin/saga-session-start.sh` | `BROKK SESSION START …` with all stages |
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
bin/hamr-harness.sh
|
|
178
|
+
bin/nornir-cron-start.sh --status
|
|
179
|
+
bin/einherjar-spawn.sh --help >/dev/null && bin/erindi-brief.sh --help >/dev/null && echo "help OK"
|
|
180
|
+
bash bin/saga-session-start.sh >/tmp/saga.out && grep -q 'BROKK SESSION START' /tmp/saga.out && echo "G3 PASS"
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**Pass:** every script exits 0 and prints its contract line. **Failure:** a missing line or a
|
|
184
|
+
non-zero exit.
|
|
185
|
+
|
|
186
|
+
### G4 — Norse naming validity
|
|
187
|
+
|
|
188
|
+
**Why:** every subsystem is named for the figure whose role matches its work; nautical or
|
|
189
|
+
generic labels are not Ymir components.
|
|
190
|
+
|
|
191
|
+
| Component | Norse name | Artifact(s) |
|
|
192
|
+
|---|---|---|
|
|
193
|
+
| Primary agent | **Brokk** | `AGENTS.md`, Brokk runtime |
|
|
194
|
+
| Sub-agent worker | **Eindri** | `.agents/subagents/` |
|
|
195
|
+
| Worker gather | **Einherjar** | `bin/einherjar-spawn.sh` |
|
|
196
|
+
| Worker brief | **Erindi** | `bin/erindi-brief.sh` |
|
|
197
|
+
| State reconciliation | **Vör** | `bin/vor-crew-state.sh` |
|
|
198
|
+
| Session-start digest | **Sága** | `bin/saga-session-start.sh`, `saga-sessionstart-run.sh` |
|
|
199
|
+
| Watch / supervision | **Sýn** | `bin/syn-watch-arm.sh`, `syn-turnend-guard.sh` |
|
|
200
|
+
| Session lock | **Gleipnir** | `bin/gleipnir-lock-lib.sh` |
|
|
201
|
+
| Harness detection | **Hamr** | `bin/hamr-harness.sh` |
|
|
202
|
+
| Scheduled jobs | **Nornir** | `bin/nornir-cron-start.sh`, `nornir-job-*.sh` |
|
|
203
|
+
| Daily briefing | **Sága** | `bin/nornir-job-daily-briefing.sh` |
|
|
204
|
+
| Memory housekeeping | **Muninn** | `bin/nornir-job-memory-housekeeping.sh` |
|
|
205
|
+
| Observation | **Huginn** | `bin/nornir-job-observer.sh` |
|
|
206
|
+
| Git sync | **Yggdrasil** | `bin/nornir-job-git-sync.sh` |
|
|
207
|
+
| Audit ledger | **Runes** | `bin/runes-append.sh`, `runes_audit.md` |
|
|
208
|
+
| Worktree isolation | **Yggdrasil** | `.yggdrasil/` |
|
|
209
|
+
| Sandbox | **Utgard** | `.agents/sandbox/` |
|
|
210
|
+
| Process supervision | **Valhalla** | supervision tree asset |
|
|
211
|
+
| Human merge gate | **Glitnir** | Hlidskjalf PR review |
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
# No nautical component labels leaked into our scripts.
|
|
215
|
+
grep -rniE 'Allfather|Brokk|Allfather-hold|Eindri' bin/ \
|
|
216
|
+
&& echo "G4 REVIEW: nautical term present — verify it is provenance only" \
|
|
217
|
+
|| echo "G4 PASS: no nautical component names in bin/"
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
**Pass:** every runtime artifact maps to a Norse figure; domain words appear only as provenance
|
|
221
|
+
comments. **Failure:** a nautical or generic name is used as a component.
|
|
222
|
+
|
|
223
|
+
### G5 — harness adapters fail closed
|
|
224
|
+
|
|
225
|
+
**Why:** launching an unverified adapter must never happen silently.
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
# With dispatch active, omitting --harness must refuse.
|
|
229
|
+
bin/einherjar-spawn.sh demo /tmp --mode local-only; echo "exit=$?" # expect 1, error + help
|
|
230
|
+
|
|
231
|
+
# An explicitly unverified harness must refuse.
|
|
232
|
+
bin/einherjar-spawn.sh demo /tmp --mode local-only --harness claude; echo "exit=$?" # expect 1
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
**Pass:** both refuse with a plain reason naming the verified set
|
|
236
|
+
(`opencode pi pi-signed`). **Failure:** a launch proceeds, or a fallback harness is substituted.
|
|
237
|
+
|
|
238
|
+
### G6 — session lock bound to the live session
|
|
239
|
+
|
|
240
|
+
**Why:** a second session must not mutate shared state. Gleipnir holds one live session per
|
|
241
|
+
home.
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
cat state/.lock 2>/dev/null; echo
|
|
245
|
+
owner=$(tr -d '[:space:]' < state/.lock 2>/dev/null || true)
|
|
246
|
+
if [ -n "$owner" ] && kill -0 "$owner" 2>/dev/null; then
|
|
247
|
+
echo "G6 PASS: lock held by live pid $owner"
|
|
248
|
+
else
|
|
249
|
+
echo "G6 PASS (no live session): lock is absent or stale — a new session acquires read-write"
|
|
250
|
+
fi
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
`bin/saga-session-start.sh` prints `session lock held` or
|
|
254
|
+
`READ-ONLY: session lock held by pid <n> — no spawn, steer, merge, drain, or repair this
|
|
255
|
+
session`. A refused lock is a read-only session by law.
|
|
256
|
+
|
|
257
|
+
**Pass:** the lock is either absent/stale (acquirable) or held by a live PID.
|
|
258
|
+
**Failure:** a lock names a live PID owned by another session yet this session mutates state.
|
|
259
|
+
|
|
260
|
+
> **Gotcha.** `bin/gleipnir-lock-lib.sh:87-88` declares `GLEIPNIR_LOCK_ACQUIRED=0` and never
|
|
261
|
+
> updates it. Callers must use `gleipnir_lock_acquire`'s **return code**, not that variable.
|
|
262
|
+
|
|
263
|
+
### G7 — turn-end guard inert until armed
|
|
264
|
+
|
|
265
|
+
**Why:** the guard must never block a turn before supervision has ever been armed, and must
|
|
266
|
+
refuse a blind turn end once armed and the watcher is stale.
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
# Inert before the first arm:
|
|
270
|
+
rm -f state/.supervision-armed
|
|
271
|
+
echo '{"stop_hook_active":false}' | bash bin/syn-turnend-guard.sh; echo "unarmed exit=$?" # expect 0
|
|
272
|
+
|
|
273
|
+
# Armed + stale heartbeat → refuse:
|
|
274
|
+
: > state/.supervision-armed
|
|
275
|
+
printf '0\n' > state/.watch.heartbeat
|
|
276
|
+
echo '{"stop_hook_active":false}' | bash bin/syn-turnend-guard.sh; echo "armed-stale exit=$?" # expect 2
|
|
277
|
+
rm -f state/.supervision-armed state/.watch.heartbeat
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
Staleness threshold: `BROKK_WATCH_HEARTBEAT_STALE_SECONDS` (default 60).
|
|
281
|
+
|
|
282
|
+
**Pass:** exit 0 unarmed; exit 2 armed+stale with the recovery instruction on stderr.
|
|
283
|
+
**Failure:** exit 2 while unarmed, or exit 0 while armed and stale.
|
|
284
|
+
|
|
285
|
+
### G8 — no mocks / examples / placeholders in the shipped runtime
|
|
286
|
+
|
|
287
|
+
**Why:** plan 29 §14 mandates real, working files. A placeholder in `bin/` or a live `config/`
|
|
288
|
+
file is a production defect.
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
# Shipped runtime must be real:
|
|
292
|
+
grep -rnE 'TODO|FIXME|XXX|placeholder|<PLACEHOLDER>|MOCK|mock_data|not implemented' \
|
|
293
|
+
bin/ config/ .agents/sandbox/ 2>/dev/null \
|
|
294
|
+
&& echo "G8 REVIEW: markers above need justification" \
|
|
295
|
+
|| echo "G8 PASS: no mock/placeholder markers in the shipped runtime"
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
Allowed exceptions (documented, not defects):
|
|
299
|
+
|
|
300
|
+
- Template fixtures are allowed **only** as committed `*.example` scaffolding
|
|
301
|
+
(`data/*.example`, `config/*.example`); the live `data/` and `config/` must hold real files.
|
|
302
|
+
- Reference-configuration assets inside `.agents/skills/galdr-ymirsystem/assets/pi-boot/` are documentation
|
|
303
|
+
templates, not runtime.
|
|
304
|
+
|
|
305
|
+
**Pass:** no markers in `bin/`, `config/`, `.agents/sandbox/`. **Failure:** a mock or
|
|
306
|
+
placeholder in the live runtime.
|
|
307
|
+
|
|
308
|
+
> **Disagreement to track.** `.gitignore` allows `!data/*.example` / `!config/*.example`
|
|
309
|
+
> ("ship `*.example` templates only"), but plan 29 §14 says "No mocks, no examples, no
|
|
310
|
+
> placeholders in the shipped runtime." The reconciling reading: `*.example` are committed
|
|
311
|
+
> onboarding templates; the **runtime** must still contain real files. No `*.example` fixtures
|
|
312
|
+
> exist in the tree today.
|
|
313
|
+
|
|
314
|
+
### G9 — cron idempotent and date-guarded
|
|
315
|
+
|
|
316
|
+
**Why:** session start calls the scheduler every launch; it must not spawn a second loop, and a
|
|
317
|
+
job must not run twice in a day.
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
bin/nornir-cron-start.sh --status
|
|
321
|
+
first=$(bin/nornir-cron-start.sh | sed -n 's/.*pid=\([0-9]*\).*/\1/p')
|
|
322
|
+
second=$(bin/nornir-cron-start.sh | sed -n 's/.*pid=\([0-9]*\).*/\1/p')
|
|
323
|
+
[ -n "$first" ] && [ "$first" = "$second" ] && echo "G9 PASS: one loop pid=$first" \
|
|
324
|
+
|| echo "G9 FAIL: loop pid changed ($first -> $second)"
|
|
325
|
+
ls state/.cron-fired/ 2>/dev/null # one date stamp per job
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
**Pass:** the same PID is reported on repeat start; each job has one `YYYY-MM-DD` stamp per day.
|
|
329
|
+
**Failure:** a duplicate loop, or a job dispatched twice for the same date.
|
|
330
|
+
|
|
331
|
+
### G10 — observer read-only
|
|
332
|
+
|
|
333
|
+
**Why:** plan 23 makes the observer self-contained and read-only.
|
|
334
|
+
|
|
335
|
+
```bash
|
|
336
|
+
bin/nornir-job-observer.sh >/dev/null
|
|
337
|
+
# The observer must only mutate its own state and the ledger:
|
|
338
|
+
git status --porcelain 2>/dev/null \
|
|
339
|
+
| grep -v -E '^.. (state/|workspace/memory/runes_audit\.md)' || true
|
|
340
|
+
tail -n 5 state/observer.log
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
**Pass:** no changes outside `state/` and `workspace/memory/runes_audit.md`.
|
|
344
|
+
**Failure:** any other file changes — the observer writes nothing into the runtime.
|
|
345
|
+
|
|
346
|
+
### G11 — secrets never committed
|
|
347
|
+
|
|
348
|
+
**Why:** realm/platform secrets live in env files that are gitignored; a committed key is a
|
|
349
|
+
breach.
|
|
350
|
+
|
|
351
|
+
```bash
|
|
352
|
+
# 1. Ignore rules cover the secret files.
|
|
353
|
+
grep -nE '\.env\.local|\.env\.realm|\.env$' .gitignore
|
|
354
|
+
# 2. No secret-looking literals in tracked runtime/docs.
|
|
355
|
+
grep -rnE '(sk-[A-Za-z0-9]{16,}|ghp_[A-Za-z0-9]{20,}|AKIA[0-9A-Z]{16}|-----BEGIN [A-Z ]*PRIVATE KEY-----)' \
|
|
356
|
+
bin config .agents AGENTS.md docs 2>/dev/null \
|
|
357
|
+
&& echo "G11 FAIL: possible secret literal" \
|
|
358
|
+
|| echo "G11 PASS: no secret literals in runtime/docs"
|
|
359
|
+
# 3. Env files are not readable by the doc surface (they are private).
|
|
360
|
+
ls -la .env.local svartalfaheim/*/.env.realm 2>/dev/null || echo "no env files present (or private)"
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
**Pass:** secret files are ignored; no secret literal in tracked runtime/docs; secrets are
|
|
364
|
+
referenced by variable name only. **Failure:** a literal key/token, or an env file not ignored.
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
## 3. One runnable checklist
|
|
369
|
+
|
|
370
|
+
Run from the Ymir root (`BROKK_HOME=$YMIR_ROOT`). Non-zero output is the signal to stop.
|
|
371
|
+
|
|
372
|
+
```bash
|
|
373
|
+
set -u
|
|
374
|
+
ROOT="${BROKK_HOME:-$YMIR_ROOT}"
|
|
375
|
+
cd "$ROOT"
|
|
376
|
+
rc=0
|
|
377
|
+
|
|
378
|
+
echo "== G1 shell parse =="
|
|
379
|
+
while IFS= read -r f; do bash -n "$f" || { echo "FAIL G1 $f"; rc=1; }; done \
|
|
380
|
+
< <(find bin .agents -name '*.sh' -type f | sort)
|
|
381
|
+
[ "$rc" = 0 ] && echo "G1 PASS"
|
|
382
|
+
|
|
383
|
+
echo "== G2 JSON parse =="
|
|
384
|
+
for f in $(find config .agents -name '*.json' -type f | sort); do
|
|
385
|
+
python3 -c "import json,sys;json.load(open(sys.argv[1]))" "$f" || { echo "FAIL G2 $f"; rc=1; }
|
|
386
|
+
done
|
|
387
|
+
[ "$rc" = 0 ] && echo "G2 PASS"
|
|
388
|
+
|
|
389
|
+
echo "== G3 smoke =="
|
|
390
|
+
bin/hamr-harness.sh >/dev/null || { echo "FAIL G3 hamr"; rc=1; }
|
|
391
|
+
bin/nornir-cron-start.sh --status >/dev/null || { echo "FAIL G3 cron"; rc=1; }
|
|
392
|
+
bin/einherjar-spawn.sh --help >/dev/null || { echo "FAIL G3 spawn-help"; rc=1; }
|
|
393
|
+
bin/erindi-brief.sh --help >/dev/null || { echo "FAIL G3 brief-help"; rc=1; }
|
|
394
|
+
|
|
395
|
+
echo "== G5 harness fail-closed =="
|
|
396
|
+
bin/einherjar-spawn.sh compliance /tmp --mode local-only >/dev/null 2>&1 \
|
|
397
|
+
&& { echo "FAIL G5: spawn did not refuse"; rc=1; } || echo "G5 PASS"
|
|
398
|
+
|
|
399
|
+
echo "== G7 turn-end guard =="
|
|
400
|
+
rm -f state/.supervision-armed
|
|
401
|
+
echo '{}' | bash bin/syn-turnend-guard.sh; [ $? = 0 ] || { echo "FAIL G7 unarmed"; rc=1; }
|
|
402
|
+
: > state/.supervision-armed; printf '0\n' > state/.watch.heartbeat
|
|
403
|
+
echo '{}' | bash bin/syn-turnend-guard.sh; [ $? = 2 ] || { echo "FAIL G7 armed-stale"; rc=1; }
|
|
404
|
+
rm -f state/.supervision-armed state/.watch.heartbeat
|
|
405
|
+
|
|
406
|
+
echo "== G8 no placeholders =="
|
|
407
|
+
grep -rqE 'TODO|FIXME|MOCK|not implemented' bin/ config/ .agents/sandbox/ \
|
|
408
|
+
&& { echo "REVIEW G8"; } || echo "G8 PASS"
|
|
409
|
+
|
|
410
|
+
echo "== G9 cron idempotence =="
|
|
411
|
+
p1=$(bin/nornir-cron-start.sh | sed -n 's/.*pid=\([0-9]*\).*/\1/p')
|
|
412
|
+
p2=$(bin/nornir-cron-start.sh | sed -n 's/.*pid=\([0-9]*\).*/\1/p')
|
|
413
|
+
[ "$p1" = "$p2" ] && echo "G9 PASS pid=$p1" || { echo "FAIL G9"; rc=1; }
|
|
414
|
+
|
|
415
|
+
echo "== G11 secrets =="
|
|
416
|
+
grep -rqE '(sk-[A-Za-z0-9]{16,}|ghp_[A-Za-z0-9]{20,}|AKIA[0-9A-Z]{16})' bin config .agents 2>/dev/null \
|
|
417
|
+
&& { echo "FAIL G11"; rc=1; } || echo "G11 PASS"
|
|
418
|
+
|
|
419
|
+
echo
|
|
420
|
+
[ "$rc" = 0 ] && echo "RUNTIME COMPLIANCE: PASS" || echo "RUNTIME COMPLIANCE: FAIL"
|
|
421
|
+
exit "$rc"
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
> The smoke block writes and removes `state/.supervision-armed` and `state/.watch.heartbeat`.
|
|
425
|
+
> Run it only when no live watcher owns those files; otherwise use a throwaway
|
|
426
|
+
> `BROKK_STATE_OVERRIDE` directory.
|
|
427
|
+
|
|
428
|
+
---
|
|
429
|
+
|
|
430
|
+
## 4. Verification
|
|
431
|
+
|
|
432
|
+
- The checklist in §3 is the verification. Run it before any merge that touches `bin/`,
|
|
433
|
+
`config/`, or `.agents/sandbox/`.
|
|
434
|
+
- Attach the G3 smoke output as evidence; "it parses" alone is not acceptance.
|
|
435
|
+
- For a spawn change, also capture a real `spawned …` line and a `vor-crew-state.sh` read.
|
|
436
|
+
- For a cron change, capture `--status` plus the relevant `state/.cron-fired/` stamps.
|
|
437
|
+
|
|
438
|
+
---
|
|
439
|
+
|
|
440
|
+
## 5. Gotchas
|
|
441
|
+
|
|
442
|
+
- **`bash -n` checks syntax, not behavior.** G3 exists because a clean parse can still
|
|
443
|
+
misresolve paths or exit non-zero.
|
|
444
|
+
- **`GLEIPNIR_LOCK_ACQUIRED` is never set to 1.** Use the `gleipnir_lock_acquire` return code.
|
|
445
|
+
- **The turn-end guard is inert without `state/.supervision-armed`.** A guard that fires before
|
|
446
|
+
the first arm is a bug, not diligence.
|
|
447
|
+
- **Cron stamps are written before the run**, so a failed job does not retry that day.
|
|
448
|
+
- **`$YMIR_ROOT` is not a git repo.** `git-sync` correctly reports no targets; do not
|
|
449
|
+
treat that as a failure of G10.
|
|
450
|
+
- **Secret scanning is heuristic.** G11 catches common literals; the real law is that secrets
|
|
451
|
+
live only in gitignored `.env.local` / `.env.realm` and are referenced by variable name.
|
|
452
|
+
- **Reference-config assets are not runtime.** Files under
|
|
453
|
+
`.agents/skills/galdr-ymirsystem/assets/pi-boot/` are documentation; G8 does not fail on them.
|
|
454
|
+
|
|
455
|
+
## 6. Maintaining this
|
|
456
|
+
|
|
457
|
+
- Adding a runtime script? Add its `bash -n` and smoke command to G1/G3 and to §3.
|
|
458
|
+
- Adding a scheduler job? Add its idempotence/date-guard evidence to G9.
|
|
459
|
+
- Changing the lock, guard, or harness resolution? Update the matching gate and its expected
|
|
460
|
+
exit codes **in the same change**.
|
|
461
|
+
- Keep the Norse name table in G4 in lockstep with `docs/plans/29-brokk-distro-runtime.md §12`.
|
|
462
|
+
- When a new gate is added, prefer a runnable command over prose; a gate without a command is
|
|
463
|
+
an opinion.
|