@zerwiz/ymir 0.1.4 → 0.1.5
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/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 +290 -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 +50 -0
- package/.agents/config/agents.yaml.example +72 -0
- package/.agents/config/crew-dispatch.json +22 -0
- package/.agents/config/cron.yaml +9 -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/config/tailscale-sync.yaml +27 -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/kaia.engram +0 -0
- package/.agents/memory/kaia.engram-shm +0 -0
- package/.agents/memory/kaia.engram-wal +0 -0
- package/.agents/memory/runes_audit.md +5 -0
- package/.agents/memory/well/episodes.jsonl +367 -0
- package/.agents/memory/well/workspace.jsonl +27 -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 +111 -0
- package/.agents/migrations/0004-hoard-and-realms.sh +104 -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 +158 -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 +673 -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 +496 -0
- package/.agents/skills/galdr-ymirsystem/assets/installation.md +571 -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 +161 -0
- package/.agents/skills/galdr-ymirsystem/assets/nornir-jobs.md +377 -0
- package/.agents/skills/galdr-ymirsystem/assets/norse-naming.md +325 -0
- package/.agents/skills/galdr-ymirsystem/assets/odrerir-hall.md +129 -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 +96 -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 +175 -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 +360 -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 +70 -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 +52 -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 +34 -0
- package/.agents/skills/ymir-host/assets/desktop.md +36 -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 +454 -0
- package/CHANGELOG.md +881 -0
- package/LICENSE +1 -1
- package/NOTICE +63 -0
- package/README.md +113 -59
- 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 +65 -0
- package/RULES/05-platforms.md +67 -0
- package/RULES/06-append-only.md +58 -0
- package/RULES/07-config.md +45 -0
- package/RULES/08-delivery-gate.md +75 -0
- package/RULES/README.md +20 -0
- package/bin/README.md +107 -0
- package/bin/a2a-mcp.sh +98 -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 +233 -0
- package/bin/apodex-smoke-test.sh +92 -0
- package/bin/bifrost-bridge.sh +112 -0
- package/bin/bifrost-ingress.sh +77 -0
- package/bin/bootstrap-macos.sh +107 -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 +38 -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-guard.sh +165 -0
- package/bin/crash-sense.sh +160 -0
- package/bin/desktop-place.sh +224 -0
- package/bin/docs-guard.sh +39 -0
- package/bin/editor-place.sh +207 -0
- package/bin/eindri-acclaim.sh +34 -0
- package/bin/eindri-control.sh +28 -0
- package/bin/eindri-role.sh +83 -0
- package/bin/eindri-seen.sh +41 -0
- package/bin/eindri-send.sh +15 -0
- package/bin/eindri-start.sh +85 -0
- package/bin/eindri-watch.sh +57 -0
- package/bin/einherjar-spawn.sh +576 -0
- package/bin/eir-doctor.sh +112 -0
- package/bin/erindi-brief.sh +271 -0
- package/bin/fleet-apply.sh +68 -0
- package/bin/github-deploy.sh +81 -0
- package/bin/gjallarhorn-expose.sh +102 -0
- package/bin/gjallarhorn-notify.sh +58 -0
- package/bin/gjallarhorn-purge.sh +54 -0
- package/bin/gjallarhorn-tunnel.sh +72 -0
- package/bin/gleipnir-lock-lib.sh +284 -0
- package/bin/groa-update.sh +122 -0
- package/bin/hall-snapshot.sh +92 -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 +431 -0
- package/bin/hermes-ensure.sh +88 -0
- package/bin/hoard-lib.sh +25 -0
- package/bin/hodd.sh +78 -0
- package/bin/host-sense.sh +199 -0
- package/bin/huginn-research-worker.sh +108 -0
- package/bin/local-model-lock.sh +51 -0
- package/bin/mimir-bridge.py +226 -0
- package/bin/mimir-bridge.sh +87 -0
- package/bin/mimir-ingest.sh +131 -0
- package/bin/mimir.sh +113 -0
- package/bin/mjollnir-webhook.sh +59 -0
- package/bin/mjollnir.sh +85 -0
- package/bin/model-hardware.sh +82 -0
- package/bin/model-resolve.sh +147 -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-memory-housekeeping.sh +114 -0
- package/bin/nornir-job-observer.sh +166 -0
- package/bin/nornir-job-skillopt-sleep.sh +76 -0
- package/bin/omarchy-hook-install.sh +60 -0
- package/bin/omarchy-install.sh +148 -0
- package/bin/omarchy-plugins.sh +174 -0
- package/bin/omarchy-sense.sh +149 -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-seat.sh +63 -0
- package/bin/prereq-ensure.sh +166 -0
- package/bin/private-guard.sh +38 -0
- package/bin/project-git.sh +55 -0
- package/bin/public-guard.sh +70 -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 +91 -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 +90 -0
- package/bin/smidja-observe.sh +86 -0
- package/bin/syn-arm-pretool-check.sh +57 -0
- package/bin/syn-asset-pretool-check.sh +76 -0
- package/bin/syn-cd-pretool-check.sh +28 -0
- package/bin/syn-guard-pretool-check.sh +83 -0
- package/bin/syn-turnend-guard.sh +36 -0
- package/bin/syn-watch-arm.sh +99 -0
- package/bin/tailscale-sync.sh +190 -0
- package/bin/telegram-bot.sh +69 -0
- package/bin/toolchain.sh +74 -0
- package/bin/utgard.sh +111 -0
- package/bin/valhalla.sh +115 -0
- package/bin/valknut-load.sh +260 -0
- package/bin/vor-crew-state.sh +124 -0
- package/bin/wedge-notify.sh +47 -0
- package/bin/workspace-provision.sh +80 -0
- package/bin/workspace-rag.sh +150 -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 +641 -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-platform.sh +348 -0
- package/bin/ymir-say.sh +97 -0
- package/bin/ymir-setup-auth.sh +108 -0
- package/bin/ymir-validate.sh +173 -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 +1056 -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 +44 -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 +210 -0
- package/scripts/start.sh +167 -0
- package/scripts/stop.sh +113 -0
- package/install.sh +0 -35
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: nornir-quota
|
|
3
|
+
description: >-
|
|
4
|
+
Agent-only decision procedure for resolving a matched crew-dispatch profile
|
|
5
|
+
array from quota-axi's default TOON, ranking by spendPriority after three
|
|
6
|
+
orthogonal gates.
|
|
7
|
+
Load when a dispatch rule or default resolves to more than one profile candidate.
|
|
8
|
+
user-invocable: false
|
|
9
|
+
metadata:
|
|
10
|
+
internal: true
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# quota-array-dispatch
|
|
14
|
+
|
|
15
|
+
This skill is the single owner of the completion-aware profile-array selection procedure.
|
|
16
|
+
`AGENTS.md` section 4 owns the always-loaded intake boundary, load trigger, malformed-config refusal, every-candidate accounting, and strongest-reasoning/tie safety rules.
|
|
17
|
+
`harness-adapters` owns harness verification, model/provider discovery, and effort fallback.
|
|
18
|
+
`quota-axi` remains data-only: it publishes `spendPriority` as a comparable scalar and never recommends, selects, ranks, or infers a route.
|
|
19
|
+
Do not add a daemon, opaque composite score, routing wrapper, hard-coded model-specific policy, or producer-side route recommendation.
|
|
20
|
+
Deterministic shell owns only schema, configuration, and version validation plus concrete spawn safeguards; every model-to-provider, provider-to-credential, and quota-applicability relation is yours to establish transparently and to show your evidence for.
|
|
21
|
+
|
|
22
|
+
## Worker-side quota helper
|
|
23
|
+
|
|
24
|
+
The canonical shell helper for a worker that has already performed its model-selection reasoning and now needs to pick the first viable candidate is `bin/brokk-quota-choose.sh`.
|
|
25
|
+
Pass it the intake's already-captured default TOON or permitted JSON fallback through stdin or `--snapshot`; it never takes another quota snapshot, so it selects from the same quota state as the intake.
|
|
26
|
+
Pass each candidate as `harness:model`, with earlier candidates preferred.
|
|
27
|
+
The helper maps each harness to its primary provider family and applies the provider-wide scopes plus the exact model or product scopes for the model.
|
|
28
|
+
An `exhausted_now` runway vetoes the candidate.
|
|
29
|
+
The helper selects a candidate only when its applicable quota has a known `effectivePercentRemaining` greater than zero.
|
|
30
|
+
This is an optional narrow helper with a known limitation: it maps each harness to one primary provider family only, so a candidate whose established provider differs from that primary family is checked against the wrong quota row.
|
|
31
|
+
Authoritative multi-provider routing - including provider discovery from the harness catalog and quota matching by that explicit provider - stays owned by this skill's intake procedure above and AGENTS.md section 4, not by the helper.
|
|
32
|
+
Use it only when the brief already fixed the candidate order and every candidate's provider is the harness's primary family.
|
|
33
|
+
It does not replace the reasoning-class, runway-feasibility, or authentication gates above.
|
|
34
|
+
Brokk can optionally arm `bin/brokk-procevent-quota.sh` for a recurring mid-task check that wakes when the tracked provider drops below its configured threshold or its runway becomes `exhausted_now`.
|
|
35
|
+
|
|
36
|
+
## Read the default TOON
|
|
37
|
+
|
|
38
|
+
Start each intake by running `quota-axi` once with no `--json`, and reuse that TOON for every candidate.
|
|
39
|
+
Post-consolidation quota-axi (the floor owned by `bin/brokk-quota-axi-lib.sh`) puts `spendPriority` in the default `quota[]` block beside `effectivePercentRemaining`, `runway`, `confidence`, `limitedBy`, and `resetsAt`.
|
|
40
|
+
Sparse `exhaustion[]` carries finite-runway seconds only for `projected_exhaustion` and `exhausted_now`.
|
|
41
|
+
Sparse `attention[]` names auth, stale, and unmeasurable facts.
|
|
42
|
+
`spendPriority` is THE quota-perspective ranker.
|
|
43
|
+
It already computes the economics that older instructions reconstructed by hand from headroom, pace, reserve, and window-id lists; do not recompute those.
|
|
44
|
+
Do not read `--json` on the normal path, and do not reach for `--full` to rebuild that economics.
|
|
45
|
+
|
|
46
|
+
After reading the TOON, fall back to one `quota-axi --json` call only when that TOON is genuinely ambiguous for the decision, or when the installed quota-axi is somehow below the floor so its TOON lacks `spendPriority`.
|
|
47
|
+
Ambiguous means a candidate's `spendPriority` is the literal `unknown` or unmeasurable, a real tie still needs extra evidence, or a candidate's eligibility is unclear from `quota[]` plus `attention[]`.
|
|
48
|
+
The fallback therefore has an explicit TOON-then-JSON call sequence; reuse its JSON result and do not take any further quota snapshots.
|
|
49
|
+
Below-floor is rare: bootstrap enforces `BROKK_QUOTA_AXI_MIN` and normally reports `MISSING` before dispatch; if an intake somehow reaches an older build whose TOON lacks `spendPriority`, use the defensive `--json` fallback rather than treating the missing scalar as healthy.
|
|
50
|
+
`--json` is a defensive belt, not a habit; never reach for it because it feels more complete.
|
|
51
|
+
Read `quota-axi auth --json` only when a candidate's credential surface is in question.
|
|
52
|
+
|
|
53
|
+
For each candidate, preserve explicit `harness`, `model`, and `provider`; `harness-adapters` owns identity, and model/provider never infer harness.
|
|
54
|
+
|
|
55
|
+
## Three gates, then spendPriority
|
|
56
|
+
|
|
57
|
+
Apply the three cheap orthogonal gates first.
|
|
58
|
+
`spendPriority` ranks only among candidates that pass all three.
|
|
59
|
+
It cannot override a hard-gate failure, and it is never hidden inside a new composite score.
|
|
60
|
+
|
|
61
|
+
### 1. Eligibility
|
|
62
|
+
|
|
63
|
+
Deterministic shell must never map a model to a provider, a provider to a credential store, or a name prefix to a family.
|
|
64
|
+
You establish those relations yourself, in the open, from the candidate's own authoritative catalog (`harness-adapters` owns the per-harness discovery surface) plus the one intake snapshot.
|
|
65
|
+
|
|
66
|
+
Confirm the catalog lists the candidate's model and record the provider family it reports.
|
|
67
|
+
A model the catalog does not list is concrete contradictory evidence: block that candidate and quote the catalog result.
|
|
68
|
+
Apply quota at the granularity the vendor actually supplies.
|
|
69
|
+
A provider-level or `all_models`/`all_products` scope bounds every model you established in that family, including one with no window of its own.
|
|
70
|
+
A named-model or named-product scope is an additional bound for that model alone.
|
|
71
|
+
Match the candidate to its `quota[]` row by that established provider and scope; a stale, auth-required, or unmeasurable scope is named in `attention[]` instead of a fabricated number.
|
|
72
|
+
|
|
73
|
+
A candidate authenticates through its own tuple's surface; another harness's CLI can never gate it, and `harness=pi` with `model=xai/grok-*` is Pi using xAI rather than the standalone Grok CLI.
|
|
74
|
+
`quota-axi auth --json` lists each provider's credential sources independently, so read the one source the candidate actually uses rather than collapsing a provider to a single status.
|
|
75
|
+
A provider can carry a healthy source beside a missing or expired one; the unused source's state is not the candidate's state.
|
|
76
|
+
A Pi-hosted family may authenticate through the vendor's own store with no `pi:`-prefixed source at all, which is normal and never evidence against the candidate.
|
|
77
|
+
|
|
78
|
+
Uncertainty and ineligibility are different findings:
|
|
79
|
+
|
|
80
|
+
- No model-level window, no matching auth source, an unmeasurable or `unknown` scope, or a surface quota-axi does not model at all is disclosed uncertainty.
|
|
81
|
+
Keep the candidate eligible, state the unknown, and prefer known viable evidence when otherwise comparable.
|
|
82
|
+
- An expired credential is a short-lived session token the owning vendor renews on next use, not a sign-out.
|
|
83
|
+
- Only concrete contradictory evidence blocks: an authoritative catalog proving the model unsupported, or proof that the credential the candidate actually selects is unusable.
|
|
84
|
+
- Reserve login wording for that proven-unusable case, and name the harness, model, surface, and evidence.
|
|
85
|
+
|
|
86
|
+
When a credential's local classification is the only thing standing between a candidate and a block, get ground truth before blocking.
|
|
87
|
+
`bin/brokk-vendor-auth-probe.sh` is the only approved vendor-credential probe; its `--help` owns the registered probes and mechanics.
|
|
88
|
+
It takes no harness, model, or provider and returns a fact, not a route: only `authenticated` and `unauthenticated` are ground truth, while `indeterminate`, `timeout`, and `unavailable` establish nothing and must never be read as either outcome.
|
|
89
|
+
Never launch a vendor CLI yourself, and never probe a credential store the candidate does not use.
|
|
90
|
+
Grok prepaid `credits` are unrelated to paid-window headroom; never read them as exhaustion.
|
|
91
|
+
|
|
92
|
+
Malformed configuration is an actionable error, not a candidate to rank around.
|
|
93
|
+
|
|
94
|
+
### 2. Reasoning-class fit
|
|
95
|
+
|
|
96
|
+
Keep only candidates that meet the required reasoning class for this task (a simple bug fix versus very-difficult design).
|
|
97
|
+
Never use `spendPriority` or remaining quota to silently replace that class.
|
|
98
|
+
When every remaining candidate is tight, dispatch inside the strongest-reasoning class if one of those candidates can proceed, or stop and report that the strongest-class choice cannot proceed rather than downgrading it to spend or conserve quota.
|
|
99
|
+
|
|
100
|
+
### 3. Runway feasibility floor
|
|
101
|
+
|
|
102
|
+
Known runway that will not last until the inspectable likely-completion horizon fails this gate, even when that candidate has the highest `spendPriority`.
|
|
103
|
+
Read `runway` from the `quota[]` row: `through_reset` passes this generic feasibility floor because the window reaches its refill without exhausting; never compare its `resetsAt` with the completion horizon as though reset were an exhaustion deadline.
|
|
104
|
+
`exhausted_now` is zero, and `projected_exhaustion` uses the matching `exhaustion[]` row's `usableRunwaySeconds`.
|
|
105
|
+
A high `spendPriority` on a nearly empty window that will exhaust soon must not route into a mid-task stall.
|
|
106
|
+
Unknown or unmeasurable runway stays eligible with disclosed uncertainty and is never assumed to pass.
|
|
107
|
+
Do not invent a generic percentage floor, and honor an explicit Allfather floor for a candidate when one exists.
|
|
108
|
+
|
|
109
|
+
## Rank by spendPriority
|
|
110
|
+
|
|
111
|
+
Among candidates that pass all three gates, pick the highest known `spendPriority`.
|
|
112
|
+
A higher known scalar is better: positive means paid allowance is on track to reach reset unused, `0` is exact utilization, and negative means overdrawn against the reset clock.
|
|
113
|
+
Rank only from comparable known scalars.
|
|
114
|
+
Never treat absent, `unknown`, or unmeasurable `spendPriority` as zero or as healthy; `0` means exact utilization, a different claim from unknown.
|
|
115
|
+
An unknown `spendPriority` keeps the candidate eligible with disclosed uncertainty.
|
|
116
|
+
Prefer known viable evidence when otherwise comparable.
|
|
117
|
+
After the permitted TOON-to-JSON fallback, escalate to Brokk instead of routing if no candidate can be ranked or runway uncertainty prevents proving the feasibility floor for any candidate that could be selected.
|
|
118
|
+
Never resolve that terminal uncertainty by treating unknown as healthy or by choosing arbitrarily.
|
|
119
|
+
Show the scalar or the literal `unknown` in the rationale; do not hide it in a score.
|
|
120
|
+
|
|
121
|
+
Do not compare headroom against runway by hand.
|
|
122
|
+
Do not use pace or signed reserve as a later tie-break layer.
|
|
123
|
+
Do not read `aheadWindowIds`, `behindWindowIds`, `onPaceWindowIds`, `limitingWindowIds`, or other window-id lists to reconstruct what `spendPriority` already computed.
|
|
124
|
+
|
|
125
|
+
Genuine ties: stop and report every tied candidate for Allfather choice.
|
|
126
|
+
Do not select by array order, harness name, or another arbitrary identity ordering.
|
|
127
|
+
Report duplicate concrete profiles as a configuration error.
|
|
128
|
+
|
|
129
|
+
Account for every candidate visibly before selecting or escalating, naming its catalog evidence, provider relation, applicable quota and authentication facts, remaining uncertainty, fit and reasoning class, `spendPriority`, and runway-versus-horizon result.
|
|
130
|
+
A blocked credential report must name `harness`, `model`, authentication surface, and concrete failure evidence; never emit a bare `Grok unauthenticated` statement.
|
|
131
|
+
Never conclude with an unexplained "best quota" label.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: nsr
|
|
3
|
+
description: >-
|
|
4
|
+
WayOfNorthStarRules — the doctrine and its deterministic gate. Load when
|
|
5
|
+
creating a new NSR-compliant project, converting a legacy repo to the
|
|
6
|
+
NorthStar layout, auditing a repo for NSR compliance, generating the
|
|
7
|
+
.compliance/ harness, or running its gates (danger, wiring, env, paths).
|
|
8
|
+
One skill for the NorthStar law.
|
|
9
|
+
allowed-tools: run_shell_command, run_bash_command, edit, write
|
|
10
|
+
metadata:
|
|
11
|
+
internal: true
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# nsr-compliance — compliance — NorthStar scaffold/audit + the .compliance/ harness
|
|
15
|
+
|
|
16
|
+
The NorthStar doctrine and the compliance harness that enforces it, under one
|
|
17
|
+
skill.
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
assets[2]{path,load_when}:
|
|
21
|
+
"assets/nsr/scaffold-spec.md","scaffold a new NSR repo · convert a legacy repo · audit compliance (master spec, templates, scripts)"
|
|
22
|
+
"assets/nsrcompliance/SKILL.md","generate and run the .compliance/ harness: danger, wiring, env, path gates + telemetry"
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Stamp the harness into a repo:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
.agents/skills/nsr/assets/nsrcompliance/generate.sh [TARGET] [--force] [--dry-run]
|
|
29
|
+
```
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# NSR Skill
|
|
2
|
+
|
|
3
|
+
Scaffold + validate Way-Of NorthStar compliant projects.
|
|
4
|
+
|
|
5
|
+
## Layout
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
NSR/
|
|
9
|
+
├── SKILL.md # Skill manifest (agent-facing workflow)
|
|
10
|
+
├── README.md # This file
|
|
11
|
+
├── assets/ # Project templates (the source of truth for a new repo)
|
|
12
|
+
│ ├── root/ # Root routing files (AGENTS.md, STRUCTURE.md, ...)
|
|
13
|
+
│ ├── RULES/ # Execution rules (kept at root)
|
|
14
|
+
│ ├── docs/ # Granular docs tree (BEST_PRACTICES, CI_CD, DEVELOPER_SETUP, HOSTING, RUNBOOK, features, research)
|
|
15
|
+
│ ├── agents_skills/ # .agents/skills/ automation layer templates
|
|
16
|
+
│ └── compliance/ # .compliance/ deterministic harness templates
|
|
17
|
+
└── scripts/
|
|
18
|
+
├── scaffold.sh # Create OR convert a project to the NSR layout
|
|
19
|
+
└── validate.sh # Audit a repo against NSR compliance gates
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Quick Start
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# New project
|
|
26
|
+
.agents/skills/NSR/scripts/scaffold.sh ./my-project --name MyProject --description "SaaS thing"
|
|
27
|
+
|
|
28
|
+
# Existing repo (adds missing NSR pieces, never overwrites)
|
|
29
|
+
.agents/skills/NSR/scripts/scaffold.sh . --name "Existing" --description "Adopting NSR"
|
|
30
|
+
|
|
31
|
+
# Audit
|
|
32
|
+
.agents/skills/NSR/scripts/validate.sh ./my-project
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Rules
|
|
36
|
+
|
|
37
|
+
- Templates are generic; the scaffolder substitutes project name/description.
|
|
38
|
+
- Never overwrite an existing file during conversion.
|
|
39
|
+
- The scaffolder's post-condition is a passing `validate.sh`.
|
|
40
|
+
- Keep this skill in sync with `WayOfNorthstarRules.md`.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# RULES/
|
|
2
|
+
|
|
3
|
+
Modular, single-responsibility rule files. Indexed by `RULES.md` (root). Kept at the repo root per the NSR layout.
|
|
4
|
+
|
|
5
|
+
## Files
|
|
6
|
+
|
|
7
|
+
- `security.md` — Access control, secrets, vulnerability gates.
|
|
8
|
+
- `git-workflow.md` — Branching, commit message, merge protocol.
|
|
9
|
+
- `tech-stack.md` — One primary stack per feature, pinned versions.
|
|
10
|
+
- *(add more: `multi-tenancy.md`, `testing.md`, ...)*
|
|
11
|
+
|
|
12
|
+
## Rules
|
|
13
|
+
|
|
14
|
+
- One topic per file; concrete and enforceable.
|
|
15
|
+
- Keep `RULES.md` (root) in sync.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Git Workflow — __PROJECT__
|
|
2
|
+
|
|
3
|
+
## Branching
|
|
4
|
+
- Feature branches named `feat/<feature>-<short-desc>` or `fix/<ticket>`.
|
|
5
|
+
- Branches created via `.agents/skills/git_ops/create_branch.sh` (naming + ticket link enforced).
|
|
6
|
+
|
|
7
|
+
## Commits
|
|
8
|
+
- Use `.agents/skills/git_ops/safe_commit.sh` — runs pre-commit gates + formats message.
|
|
9
|
+
- Conventional style: `feat:`, `fix:`, `docs:`, `chore:`.
|
|
10
|
+
- No bare `git commit -m ...` — always via skill script.
|
|
11
|
+
|
|
12
|
+
## Merge / PR
|
|
13
|
+
- Push via `sync_upstream.sh` (rebase + conflict check).
|
|
14
|
+
- PR must pass all gates (`.compliance/gates/*`) and reviewer approval.
|
|
15
|
+
|
|
16
|
+
## Enforced By
|
|
17
|
+
- `.agents/skills/git_ops/` scripts.
|
|
18
|
+
- `.compliance/gates/check_platform.sh` (no `pkill`/`taskkill`/raw kill).
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Security Rules — __PROJECT__
|
|
2
|
+
|
|
3
|
+
## Access Control
|
|
4
|
+
- Auth via the project's identity provider; roles scoped per tenant.
|
|
5
|
+
- API tokens required on every request; tenant resolved per-request from token claims.
|
|
6
|
+
|
|
7
|
+
## Secrets
|
|
8
|
+
- Never commit secrets. All secrets via env / secret manager.
|
|
9
|
+
- `.env` is git-ignored; only `.env.example` templates are committed.
|
|
10
|
+
- Keys injected at deploy time via `docs/CI_CD/deployment/deploy.sh` + secret manager.
|
|
11
|
+
|
|
12
|
+
## Tenant Isolation
|
|
13
|
+
- Queries are scoped by tenant at the DB layer — never fetch across tenants.
|
|
14
|
+
|
|
15
|
+
## Vulnerability Gates
|
|
16
|
+
- `.compliance/gates/check_env.sh` fails if required secrets are absent.
|
|
17
|
+
- Dependencies pinned in `TECH_STACK.md`; no floating/latest in production.
|
|
18
|
+
- Run `.agents/skills/features/<feature>/test.sh` before any PR.
|
|
19
|
+
|
|
20
|
+
## Enforced By
|
|
21
|
+
- `.compliance/gates/*` — exit-code gates.
|
|
22
|
+
- CI deploy order: `check_env → check_paths → check_platform → validate_code`.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Tech-Stack Rules — __PROJECT__
|
|
2
|
+
|
|
3
|
+
1. **One primary stack per feature** — see `TECH_STACK.md` mapping; no undocumented second stacks.
|
|
4
|
+
2. **Pin versions** — recorded in `TECH_STACK.md`; no floating/latest in production.
|
|
5
|
+
3. **No new stack without registration** — update `TECH_STACK.md` + `FEATURES.md` first.
|
|
6
|
+
4. **Cross-platform** — stacks run on Mac/Linux/Windows or are containerized with pinned images.
|
|
7
|
+
5. **License & cost vetting** — before adopting a new stack.
|
|
8
|
+
6. **Consistency over novelty** — prefer the existing stack for a category.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# SKILL.md — Embedded Agent Skill Compliance
|
|
2
|
+
|
|
3
|
+
Headless CLI runner + local validation layer — the sole, script-first compliance mechanism.
|
|
4
|
+
|
|
5
|
+
The compliance skill is **self-contained**: it needs no rest of the NSR repo. It carries its own runner, gates, telemetry, envelopes, templates, and a generator that stamps `.compliance/` into whatever repo it is deployed into.
|
|
6
|
+
|
|
7
|
+
## Purpose
|
|
8
|
+
|
|
9
|
+
- Generate the deterministic `.compliance/` harness into a repo with one command.
|
|
10
|
+
- Execute feature + lifecycle scripts and gate checks locally inside that repo.
|
|
11
|
+
- Enforce typed envelopes (validated before any run) and wired, non-stub scripting.
|
|
12
|
+
- Record every run (phase, status, latency, cost) into a local SQLite DB.
|
|
13
|
+
|
|
14
|
+
## Capabilities
|
|
15
|
+
|
|
16
|
+
- **Generate** — `generate.sh [TARGET]` stamps a `.compliance/` tree into the host repository (idempotent; `--force`). Stack-agnostic: the wiring that follows adapts to whatever stack the repo uses.
|
|
17
|
+
- **Harness** — `harness/runner.py` orchestrates gates + feature scripts; validates typed envelopes; full `--plan` runs (envelope → gates → feature action → result envelope); `--list` shows the script registry.
|
|
18
|
+
- **Danger validation** — `gates/check_danger.sh` flags scripts containing dangerous primitives unless they declare `# gate: dev|guard|human`. The runner refuses to auto-run human/guard-gated scripts.
|
|
19
|
+
- **Wiring awareness** — `gates/check_wiring.sh` reports which scripts are still shipped stubs vs bound to the project's real commands (`--strict` must pass before agents are trusted).
|
|
20
|
+
- **Gates** — `gates/check_env.sh`, `check_paths.sh`, `check_platform.sh`, `validate_code.sh`, `verify_docs.py` decide pass/fail by `$? == 0`.
|
|
21
|
+
- **Config** — `config/core_four.yaml` governs Context, Model, Prompt, Tools per phase.
|
|
22
|
+
- **Envelopes** — `harness/envelopes/task_envelope.json` (+ `result_envelope.json`) valid task packets; success must be earned.
|
|
23
|
+
- **Telemetry** — `telemetry/logger.py` writes runs/events to SQLite (`runs.db`); readers poll SQLite.
|
|
24
|
+
|
|
25
|
+
## Usage
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
# 1. Generate the harness into this repo (self-contained)
|
|
29
|
+
.agents/skills/NSRcompliance/generate.sh
|
|
30
|
+
|
|
31
|
+
# 2. Report wiring status; strict before trusting agents
|
|
32
|
+
.compliance/gates/check_wiring.sh
|
|
33
|
+
.compliance/gates/check_wiring.sh --strict
|
|
34
|
+
|
|
35
|
+
# 3. Danger audit
|
|
36
|
+
.compliance/gates/check_danger.sh
|
|
37
|
+
|
|
38
|
+
# 4. Validate a task envelope (exit 1 on any schema violation)
|
|
39
|
+
.compliance/harness/runner.py --envelope .compliance/harness/envelopes/task_envelope.json
|
|
40
|
+
|
|
41
|
+
# 5. Full run: envelope -> gates -> feature action -> result envelope
|
|
42
|
+
.compliance/harness/runner.py --plan <task-envelope.json> --action test
|
|
43
|
+
|
|
44
|
+
# 6. Run a feature / all gates / inspect the registry
|
|
45
|
+
.compliance/harness/runner.py --feature <name> --action test
|
|
46
|
+
.compliance/harness/runner.py --gates
|
|
47
|
+
.compliance/harness/runner.py --list
|
|
48
|
+
|
|
49
|
+
# 7. Telemetry
|
|
50
|
+
.compliance/telemetry/logger.py log --phase plan --status success --latency-ms 120
|
|
51
|
+
.compliance/telemetry/logger.py query --last 10
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Wiring to the project (what binds the compliance to your stack)
|
|
55
|
+
|
|
56
|
+
The compliance is project-agnostic by design; the WIRING layer is where it benefits the specific project.
|
|
57
|
+
|
|
58
|
+
1. Replace the stub bodies in `.agents/skills/lifecycle/{start,stop,status,smoke_test}.sh` with your real commands (Phoenix: `mix phx.server`; Node: `npm run dev`; Django: `manage.py runserver`...). Existing procedures are **wrapped, never replaced** — delegate to them and add env/exit-code guards.
|
|
59
|
+
2. For every feature in `FEATURES.md`, wire `features/<name>/{setup,test,smoke_test,rollback}.sh` to the app's real suites and seeds.
|
|
60
|
+
3. Add `# gate: dev|guard|human` to any script that touches production-affecting primitives.
|
|
61
|
+
4. Prove it: `check_wiring.sh --strict` and `check_danger.sh` must pass.
|
|
62
|
+
|
|
63
|
+
Walkthrough: `docs/BEST_PRACTICES/compliance-wiring.md`.
|
|
64
|
+
|
|
65
|
+
## Rules
|
|
66
|
+
|
|
67
|
+
- Zero ad-hoc shell commands — invoke compliance scripts only.
|
|
68
|
+
- Gate results are evaluated by `$? == 0`, never by parsing text output.
|
|
69
|
+
- Never lose a function: wiring delegates to existing procedures and adds guards.
|
|
70
|
+
- Generated `.compliance/` is derived from this skill — regenerate, don't hand-edit both copies.
|
|
71
|
+
- Syncs with WayOfTeams (Kanban Board, Knowledge Base, Anchor Memory) over MCP.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
core_four:
|
|
2
|
+
context:
|
|
3
|
+
default: "docs/features/*.md"
|
|
4
|
+
routing: "AGENTS.md, STRUCTURE.md, FEATURES.md"
|
|
5
|
+
scoped: ".agents/skills/**/SKILL.md"
|
|
6
|
+
model:
|
|
7
|
+
coding: "fast-cheap-model"
|
|
8
|
+
planning: "large-reasoning-model"
|
|
9
|
+
default: "default-model"
|
|
10
|
+
prompt:
|
|
11
|
+
system: "Follow WayOfNorthstarRules.md and AGENTS.md. No ad-hoc shell commands."
|
|
12
|
+
per_feature: ".agents/skills/features/<feature>/SKILL.md"
|
|
13
|
+
tools:
|
|
14
|
+
allowed_scripts: ".agents/skills/**"
|
|
15
|
+
forbidden: ["npm test", "git commit -m", "kill -9"]
|
|
16
|
+
handoff_format: "JSON/YAML typed envelopes"
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# check_danger: validate that scripts may be run by the compliance, or are explicitly gated.
|
|
3
|
+
#
|
|
4
|
+
# Any script containing a dangerous primitive (data loss, force ops, shell
|
|
5
|
+
# injection, destructive commands) MUST declare its blast radius in a comment:
|
|
6
|
+
#
|
|
7
|
+
# # gate: dev - safe for agents/automation in dev; human confirm in prod
|
|
8
|
+
# # gate: guard - must not run until a required guard script passes
|
|
9
|
+
# # gate: human - irreversible; agents must never run this alone
|
|
10
|
+
#
|
|
11
|
+
# A script with dangerous primitives and no # gate: annotation FAILS this check.
|
|
12
|
+
#
|
|
13
|
+
# Usage:
|
|
14
|
+
# check_danger.sh # scan .agents/skills/{lifecycle,git_ops,features,compliance}
|
|
15
|
+
# check_danger.sh --path <f> # evaluate a single script in isolation
|
|
16
|
+
set -e
|
|
17
|
+
|
|
18
|
+
find_root() {
|
|
19
|
+
local d; d="$(cd "$(dirname "$0")" && pwd)"
|
|
20
|
+
while [ "$d" != "/" ]; do
|
|
21
|
+
if [ -d "$d/.agents" ]; then echo "$d"; return 0; fi
|
|
22
|
+
d="$(dirname "$d")"
|
|
23
|
+
done
|
|
24
|
+
return 1
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
ROOT="$(find_root)" || { echo "[check_danger] FAIL: no repo root (.agents/ not found upward)"; exit 1; }
|
|
28
|
+
SINGLE_PATH=""
|
|
29
|
+
|
|
30
|
+
DANGER_PRIMS=(
|
|
31
|
+
'rm[[:space:]]+-rf'
|
|
32
|
+
'rm[[:space:]]+-fr'
|
|
33
|
+
':\(\)[[:space:]]*\{'
|
|
34
|
+
'kill[[:space:]]+-9'
|
|
35
|
+
'pkill'
|
|
36
|
+
'taskkill'
|
|
37
|
+
'git[[:space:]]+push[[:space:]]+--force'
|
|
38
|
+
'git[[:space:]]+reset[[:space:]]+--hard'
|
|
39
|
+
'DROP[[:space:]]+(TABLE|DATABASE)'
|
|
40
|
+
'TRUNCATE[[:space:]]+TABLE'
|
|
41
|
+
'dd[[:space:]]+if='
|
|
42
|
+
'mkfs'
|
|
43
|
+
'chmod[[:space:]]+-R[[:space:]]+777'
|
|
44
|
+
'curl[[:space:]].*\|[[:space:]]*sh'
|
|
45
|
+
'wget[[:space:]].*\|[[:space:]]*sh'
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
GATE_RE='^[[:space:]]*# gate:[[:space:]]*(dev|guard|human)([[:space:]]+.*|:|$)'
|
|
49
|
+
|
|
50
|
+
has_danger() {
|
|
51
|
+
local f="$1" prim
|
|
52
|
+
for prim in "${DANGER_PRIMS[@]}"; do
|
|
53
|
+
grep -qiE "$prim" "$f" 2>/dev/null && return 0
|
|
54
|
+
done
|
|
55
|
+
return 1
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
has_gate() { grep -qiE "$GATE_RE" "$1" 2>/dev/null; }
|
|
59
|
+
|
|
60
|
+
check_file() {
|
|
61
|
+
local f="$1" g
|
|
62
|
+
has_danger "$f" || return 0
|
|
63
|
+
if has_gate "$f"; then
|
|
64
|
+
g="$(grep -iE "$GATE_RE" "$f" | head -1 | sed -E 's/^[[:space:]]*//')"
|
|
65
|
+
echo " OK [gated] $g"
|
|
66
|
+
echo " $f"
|
|
67
|
+
else
|
|
68
|
+
echo " FAIL [ungated danger] $f"
|
|
69
|
+
echo " contains a dangerous primitive but no '# gate:' annotation"
|
|
70
|
+
return 1
|
|
71
|
+
fi
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
while [ $# -gt 0 ]; do
|
|
75
|
+
case "$1" in
|
|
76
|
+
--path) SINGLE_PATH="$2"; shift 2 ;;
|
|
77
|
+
-h|--help) echo "usage: check_danger.sh [--path FILE]"; exit 0 ;;
|
|
78
|
+
-*) echo "unknown option: $1"; exit 1 ;;
|
|
79
|
+
*) SINGLE_PATH="$1"; shift ;;
|
|
80
|
+
esac
|
|
81
|
+
done
|
|
82
|
+
|
|
83
|
+
fail=0
|
|
84
|
+
|
|
85
|
+
if [ -n "$SINGLE_PATH" ]; then
|
|
86
|
+
check_file "$SINGLE_PATH" || fail=1
|
|
87
|
+
else
|
|
88
|
+
echo "[check_danger] scanning $ROOT/.agents/skills for dangerous primitives"
|
|
89
|
+
for f in "$ROOT"/.agents/skills/lifecycle/*.sh \
|
|
90
|
+
"$ROOT"/.agents/skills/git_ops/*.sh \
|
|
91
|
+
"$ROOT"/.agents/skills/features/*/*.sh; do
|
|
92
|
+
[ -f "$f" ] || continue
|
|
93
|
+
check_file "$f" || fail=1
|
|
94
|
+
done
|
|
95
|
+
fi
|
|
96
|
+
|
|
97
|
+
if [ "$fail" -ne 0 ]; then
|
|
98
|
+
echo "[check_danger] FAIL: dangerous scripts without a # gate: annotation"
|
|
99
|
+
exit 1
|
|
100
|
+
fi
|
|
101
|
+
echo "[check_danger] PASS: no undeclared dangerous scripts"
|
|
102
|
+
exit 0
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# check_wiring: does the compliance actually touch the project, or is it still stubs?
|
|
3
|
+
#
|
|
4
|
+
# A script is WIRED when the shipped STUB marker is gone from its body. A freshly
|
|
5
|
+
# scaffolded repo is 100% stubs — that is fine during bootstrap. Before you trust
|
|
6
|
+
# the compliance (run agents against it, deploy for real) run --strict: it must pass.
|
|
7
|
+
#
|
|
8
|
+
# Usage:
|
|
9
|
+
# check_wiring.sh # report wired vs stub; exit 0 unless required scripts missing
|
|
10
|
+
# check_wiring.sh --strict # exit 1 if any required script is missing or still a stub
|
|
11
|
+
set -e
|
|
12
|
+
|
|
13
|
+
find_root() {
|
|
14
|
+
local d; d="$(cd "$(dirname "$0")" && pwd)"
|
|
15
|
+
while [ "$d" != "/" ]; do
|
|
16
|
+
if [ -d "$d/.agents" ]; then echo "$d"; return 0; fi
|
|
17
|
+
d="$(dirname "$d")"
|
|
18
|
+
done
|
|
19
|
+
return 1
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
ROOT="$(find_root)" || { echo "[check_wiring] FAIL: no repo root (.agents/ not found upward)"; exit 1; }
|
|
23
|
+
STRICT=0
|
|
24
|
+
[ "${1:-}" = "--strict" ] && STRICT=1
|
|
25
|
+
|
|
26
|
+
fail=0
|
|
27
|
+
|
|
28
|
+
echo "[check_wiring] scanning for real-world wiring under $ROOT"
|
|
29
|
+
|
|
30
|
+
is_stub() {
|
|
31
|
+
grep -qiE '\bSTUB\b|# stub[: ]' "$1" 2>/dev/null
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
check_script() {
|
|
35
|
+
local f="$1"
|
|
36
|
+
[ -f "$f" ] || { [ "$STRICT" -eq 1 ] && { echo " FAIL [MISSING] $f"; fail=1; }; return 0; }
|
|
37
|
+
if is_stub "$f"; then
|
|
38
|
+
if [ "$STRICT" -eq 1 ]; then
|
|
39
|
+
echo " FAIL [STUB ] $f"
|
|
40
|
+
fail=1
|
|
41
|
+
else
|
|
42
|
+
echo " warn [STUB ] $f (not wired — see docs/BEST_PRACTICES/compliance-wiring.md)"
|
|
43
|
+
fi
|
|
44
|
+
else
|
|
45
|
+
echo " ok [WIRED ] $f"
|
|
46
|
+
fi
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
# lifecycle is mandatory for a project to be operable
|
|
50
|
+
for f in start stop status smoke_test; do
|
|
51
|
+
check_script "$ROOT/.agents/skills/lifecycle/$f.sh"
|
|
52
|
+
done
|
|
53
|
+
|
|
54
|
+
# every feature dir must have its five script domains wired
|
|
55
|
+
for d in "$ROOT"/.agents/skills/features/*/; do
|
|
56
|
+
[ -d "$d" ] || continue
|
|
57
|
+
for f in setup test smoke_test rollback; do
|
|
58
|
+
check_script "$d/$f.sh"
|
|
59
|
+
done
|
|
60
|
+
done
|
|
61
|
+
|
|
62
|
+
if [ "$fail" -ne 0 ]; then
|
|
63
|
+
echo "[check_wiring] STRICT FAIL — compliance scripts are stubs/missing, not wired to the project."
|
|
64
|
+
echo "[check_wiring] Wire them per docs/BEST_PRACTICES/compliance-wiring.md, then re-run."
|
|
65
|
+
exit 1
|
|
66
|
+
fi
|
|
67
|
+
[ "$STRICT" -eq 1 ] && echo "[check_wiring] PASS (strict) — every required script is wired"
|
|
68
|
+
[ "$STRICT" -eq 0 ] && echo "[check_wiring] PASS (report) — nothing missing for a bootstrap repo"
|
|
69
|
+
exit 0
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Deterministic gate: run test + lint checks. Exit 0 = pass, non-zero = fail.
|
|
3
|
+
set -e
|
|
4
|
+
|
|
5
|
+
echo "[gate] validate_code: running lint + test gates"
|
|
6
|
+
|
|
7
|
+
gates_passed=0
|
|
8
|
+
|
|
9
|
+
for gate in .compliance/gates/*.sh; do
|
|
10
|
+
if [ -x "$gate" ]; then
|
|
11
|
+
echo "[gate] running $gate"
|
|
12
|
+
"$gate" || gates_passed=1
|
|
13
|
+
fi
|
|
14
|
+
done
|
|
15
|
+
|
|
16
|
+
for script in .agents/skills/features/*/test.sh; do
|
|
17
|
+
if [ -f "$script" ]; then
|
|
18
|
+
echo "[gate] running $script"
|
|
19
|
+
bash "$script" || gates_passed=1
|
|
20
|
+
fi
|
|
21
|
+
done
|
|
22
|
+
|
|
23
|
+
if [ "$gates_passed" -eq 0 ]; then
|
|
24
|
+
echo "[gate] PASS ($? == 0)"
|
|
25
|
+
exit 0
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
echo "[gate] FAIL"
|
|
29
|
+
exit 1
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# Deterministic gate: ensure STRUCTURE.md, FEATURES.md, HOSTING/, DEVELOPER_SETUP/ and TECH_STACK.md are in sync with the repo.
|
|
3
|
+
import json
|
|
4
|
+
import pathlib
|
|
5
|
+
import sys
|
|
6
|
+
|
|
7
|
+
ROOT = pathlib.Path(__file__).resolve().parents[4]
|
|
8
|
+
MANDATORY = [
|
|
9
|
+
"AGENTS.md", "ARCHITECTURE.md", "STRUCTURE.md", "FEATURES.md",
|
|
10
|
+
"RULES.md", "BEST_PRACTICES.md", "CI_CD.md", "TECH_STACK.md", "README.md",
|
|
11
|
+
]
|
|
12
|
+
MANDATORY_DIRS = [
|
|
13
|
+
"RULES", "docs/features", "docs/BEST_PRACTICES", "docs/CI_CD",
|
|
14
|
+
"docs/DEVELOPER_SETUP", "docs/HOSTING", "docs/RUNBOOK", "docs/research",
|
|
15
|
+
".agents/skills", ".compliance",
|
|
16
|
+
]
|
|
17
|
+
EXPLICIT_DOCS = {
|
|
18
|
+
"docs/HOSTING": ["README.md", "_template.md"],
|
|
19
|
+
"docs/DEVELOPER_SETUP": ["README.md"],
|
|
20
|
+
}
|
|
21
|
+
EXPLICIT_SUBDIRS = {
|
|
22
|
+
"docs/HOSTING": [], # hosting-N.md files are enumerated dynamically
|
|
23
|
+
"docs/DEVELOPER_SETUP": ["developers"], # dev-N.md files are enumerated dynamically
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def enumerate_explicit(directory: str, subdir: str) -> list:
|
|
28
|
+
base = ROOT / directory
|
|
29
|
+
if subdir:
|
|
30
|
+
base = base / subdir
|
|
31
|
+
if not base.exists():
|
|
32
|
+
return []
|
|
33
|
+
return sorted(p.name for p in base.glob("*.md") if p.name not in ("README.md", "_template.md"))
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def main() -> int:
|
|
37
|
+
missing = [f for f in MANDATORY if not (ROOT / f).exists()]
|
|
38
|
+
missing_dirs = [d for d in MANDATORY_DIRS if not (ROOT / d).exists()]
|
|
39
|
+
|
|
40
|
+
problems = []
|
|
41
|
+
for directory, required in EXPLICIT_DOCS.items():
|
|
42
|
+
for name in required:
|
|
43
|
+
if not (ROOT / directory / name).exists():
|
|
44
|
+
problems.append(f"{directory}/{name}")
|
|
45
|
+
|
|
46
|
+
# Every hosting/developer must have its own explicit file (numbered *_N.md or dev-N.md)
|
|
47
|
+
for directory, subdirs in EXPLICIT_SUBDIRS.items():
|
|
48
|
+
subdirs_to_check = subdirs if subdirs else [""]
|
|
49
|
+
for subdir in subdirs_to_check:
|
|
50
|
+
entries = enumerate_explicit(directory, subdir)
|
|
51
|
+
if not entries:
|
|
52
|
+
problems.append(f"{directory}/{subdir}/<explicit file missing>" if subdir else f"{directory}/<hosting file missing>")
|
|
53
|
+
|
|
54
|
+
if missing or missing_dirs or problems:
|
|
55
|
+
print(json.dumps({
|
|
56
|
+
"missing_files": missing,
|
|
57
|
+
"missing_dirs": missing_dirs,
|
|
58
|
+
"explicit_docs_missing": problems,
|
|
59
|
+
}))
|
|
60
|
+
return 1
|
|
61
|
+
print(json.dumps({"ok": True, "docs_synced": True}))
|
|
62
|
+
return 0
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
if __name__ == "__main__":
|
|
66
|
+
sys.exit(main())
|