simt-dev 0.5.0__tar.gz → 0.6.2__tar.gz
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.
- simt_dev-0.6.2/.gitignore +22 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/CHANGELOG.md +146 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/PKG-INFO +80 -61
- {simt_dev-0.5.0 → simt_dev-0.6.2}/README.md +78 -59
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-058-one-tool-three-channels-and-the-order-is-forced.md +13 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-059-the-version-a-repository-runs-is-the-one-it-pinned.md +1 -1
- simt_dev-0.6.2/docs/decisions/ADR-097-the-channels-publish-by-hand-and-the-version-rides-in-as-an-input.md +71 -0
- simt_dev-0.6.2/docs/decisions/ADR-098-the-fourth-channel-is-one-file-and-it-needs-no-toolchain.md +149 -0
- simt_dev-0.6.2/docs/decisions/ADR-099-the-release-verifies-served-bytes-and-the-formula-mirrors-them.md +79 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/package.json +4 -4
- {simt_dev-0.5.0 → simt_dev-0.6.2}/pyproject.toml +1 -1
- {simt_dev-0.5.0 → simt_dev-0.6.2}/python/simt_dev/cli.py +2 -2
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/agenthooks/render.mjs +87 -21
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/argv.mjs +13 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/bench/ablate.mjs +1 -3
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/bench/grade.mjs +1 -1
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/bench/mine.mjs +3 -3
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/bench/probes.mjs +1 -3
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/bench/report.mjs +1 -3
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/bench/run.mjs +1 -3
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/bench/tasks.mjs +1 -3
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/bench/variants.mjs +1 -3
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/brief/assemble.mjs +2 -4
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/ci/dependabot.mjs +1 -1
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/ci/workflow.mjs +47 -17
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/agenthook.mjs +6 -2
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/bench.mjs +4 -4
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/ci.mjs +1 -1
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/compare.mjs +1 -1
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/distill.mjs +1 -1
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/gate.mjs +2 -2
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/graph.mjs +2 -2
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/harness.mjs +87 -14
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/help.mjs +29 -7
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/hooks.mjs +1 -1
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/index.mjs +17 -3
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/init.mjs +2 -2
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/local.mjs +11 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/mcp.mjs +1 -1
- simt_dev-0.6.2/src/commands/pack.mjs +246 -0
- simt_dev-0.6.2/src/commands/plugin.mjs +61 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/rules.mjs +1 -1
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/skills.mjs +1 -1
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/skillscompile.mjs +1 -3
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/skillsinstall.mjs +1 -1
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/sync.mjs +8 -8
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/tokens.mjs +1 -1
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/upgrade.mjs +1 -1
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/why.mjs +1 -1
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/compare/discover.mjs +1 -1
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/compare/hooksstate.mjs +19 -7
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/compare/learn.mjs +2 -2
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/compare/row.mjs +3 -3
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/decisions/index.mjs +1 -1
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/distill/distill.mjs +2 -2
- simt_dev-0.6.2/src/distribute/release.mjs +142 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/graph/load.mjs +9 -8
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/hooks/dispatcher.mjs +3 -2
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/hooks/shim.mjs +11 -6
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/index/govern.mjs +1 -1
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/index/map.mjs +1 -1
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/index/persist.mjs +2 -2
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/index/store.mjs +50 -20
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/ledger/index.mjs +2 -2
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/local/client.mjs +22 -8
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/local/config.mjs +17 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/locate.mjs +22 -1
- simt_dev-0.6.2/src/mcp/prompts.mjs +118 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/mcp/resources.mjs +96 -22
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/mcp/server.mjs +33 -6
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/mcp/tools.mjs +12 -12
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/measure/session.mjs +1 -1
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/memory/decide.mjs +1 -1
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/memory/lessons.mjs +14 -14
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/name.mjs +11 -1
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/package-version.mjs +12 -10
- simt_dev-0.6.2/src/packs/manage.mjs +563 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/packs.mjs +15 -5
- simt_dev-0.6.2/src/plugins.mjs +164 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/projection/loaders.mjs +84 -10
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/projection/manifest.mjs +4 -4
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/projection/project.mjs +3 -3
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/projection/rules.mjs +24 -4
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/projection/surfaces.mjs +20 -2
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/review/critic.mjs +4 -4
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/toolwords.mjs +8 -5
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/tsconfig.mjs +3 -3
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/upgrade/plan.mjs +1 -1
- simt_dev-0.5.0/.gitignore +0 -18
- {simt_dev-0.5.0 → simt_dev-0.6.2}/LICENSE +0 -0
- /simt_dev-0.5.0/bin/simt-dev.mjs → /simt_dev-0.6.2/bin/simt.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-001-push-requires-approval.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-002-refactor-blast-radius.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-003-test-breadth.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-004-hook-owns-format.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-005-file-length.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-006-coverage-bar.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-007-section-skeleton.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-008-verdict-vocabulary.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-009-skill-layout.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-010-runner-invocation.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-011-windows-support.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-012-drop-windows-support.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-013-genericity-by-facts-and-local-profiles.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-014-workspace-is-configuration.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-015-a-source-is-content-not-a-location.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-016-a-divergent-rule-is-retired-not-merged.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-017-a-declared-gate-must-be-runnable.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-018-an-unset-hooks-path-is-not-an-absent-hook.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-019-a-declared-command-is-the-runner.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-020-a-rule-is-written-per-surface-and-pointed-not-copied.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-021-one-surface-per-repo.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-022-a-key-simt-dev-reads-is-prefixed.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-023-the-gate-ships-as-a-file-the-repo-owns.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-024-simt-dev-overwrites-its-own-gate-file.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-025-a-baseline-is-a-region-in-a-file-the-repo-owns.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-026-a-config-without-a-region-is-a-file-the-repo-owns.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-027-the-one-gitattributes-line-that-is-neither-dangerous-nor-empty.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-028-a-base-file-is-a-floor-so-the-disagreement-it-cannot-repair-becomes-a-check.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-029-the-pins-a-repository-declares-are-its-own.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-030-what-a-plan-does-not-ship-is-a-decision-with-a-record.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-031-the-suite-stages-the-environment-it-needs.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-032-provenance-is-a-content-digest-not-a-commit.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-033-three-plan-rows-closed-by-decision-not-by-authoring.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-034-a-staged-tool-refuses-a-partially-staged-file.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-035-one-write-decision-and-one-json-document.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-036-a-writer-that-writes-says-so-and-the-instructions-naming-it-move-with-it.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-037-unchanged-means-writing-would-not-change-a-byte.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-038-the-gate-filter-belongs-to-every-manifest-writer.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-039-a-ci-step-runs-a-form-that-can-fail.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-040-the-last-writer-that-wrote-by-default-was-not-the-one-named.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-041-the-suite-installs-the-package-in-order-to-test-it.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-042-a-declared-glob-must-match-a-path-built-from-it.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-043-a-keyword-is-a-phrase-and-two-letters-is-a-word.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-044-compatibility-is-not-evidence.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-045-a-dashboard-that-counts-a-defect.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-046-one-rule-one-copy.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-047-a-profile-selects-on-what-a-repository-runs-on.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-048-a-baseline-carries-only-keys-a-reader-honours.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-049-a-ruling-that-a-later-record-moved-says-so-where-it-is-printed.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-050-a-byte-count-is-not-a-region-and-updated-is-not-a-change-of-rules.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-051-a-pointer-is-the-readers-only-route-so-it-is-not-a-convenience.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-052-a-dependency-is-counted-against-the-budget-and-there-is-one-budget.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-053-the-node-floor-is-22-20-0.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-054-the-digest-covers-every-byte-that-leaves-the-package.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-055-a-status-line-travels-so-it-may-not-name-a-location.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-056-three-names-one-of-which-is-cheap-to-move.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-057-an-identity-is-per-developer-and-a-repository-does-not-own-it.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-060-a-repository-with-nothing-to-run-is-adopted-and-says-so.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-061-the-skill-registry-is-workspace-data.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-062-a-fresh-adoption-seeds-the-gates-it-can-run.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-063-the-adoption-escape-hatch-is-opt-in.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-064-the-context-meter-counts-what-the-tool-wrote.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-065-a-pack-is-one-shared-rule-set-pinned-by-digest.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-066-a-monorepo-projects-once-per-package.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-067-which-harnesses-read-agents-md-is-a-column.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-068-the-mcp-revision-list-cites-what-was-read.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-069-the-conformance-lint-checks-the-published-specification.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-070-the-json-payload-carries-its-own-version.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-071-a-rule-that-can-be-narrowed-is-written-narrow.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-072-the-budget-is-a-declaration-beside-the-gates.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-073-a-kernel-is-a-smaller-projection-the-repository-asks-for.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-074-a-rule-and-a-decision-are-readable-by-uri.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-075-nothing-leaves-the-machine.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-076-a-change-to-what-agents-read-is-measured.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-077-the-command-card-leads-the-region-and-reads-committed-evidence.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-078-a-line-the-repository-already-proves-does-not-ship.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-079-the-rules-are-enforced-at-the-tool-call-from-one-policy-table.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-080-the-tools-own-names-are-not-repositories-and-neither-reader-decides-by-shape.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-081-a-tracker-is-read-through-the-repositorys-template.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-082-the-tracker-override-is-a-manifest-key.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-083-a-budget-is-met-by-cutting-the-kernel-and-hard-is-the-floor.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-084-a-workspace-carries-its-repeated-rules-once.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-085-the-region-ends-with-the-names-it-kept-out.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-086-the-stable-prefix-comes-first-and-the-lock-records-both-digests.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-087-a-run-is-evidence-for-one-tree.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-088-a-marked-line-is-enforced-by-a-checker.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-089-the-local-index-is-a-cache-of-git-blobs.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-090-an-optional-adapter-is-off-until-named.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-091-the-map-ranks-files-a-task-mentions.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-092-tests-are-imports-conventions-and-coverage.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-093-why-names-what-governs-a-file.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-094-a-change-runs-the-tests-that-import-it.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-095-gate-output-keeps-the-failures.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/ADR-096-impact-names-who-a-change-reaches.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/docs/decisions/README.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/python/simt_dev/__init__.py +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/core.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/mdc/intake-questions.mdc +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/mdc/preview-postflight.mdc +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/mdc/slice-commit.mdc +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/mdc/test-gate.mdc +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/stacks/android.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/stacks/cloudflare-workers.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/stacks/connectiq.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/stacks/container.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/stacks/dart.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/stacks/deno.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/stacks/dotnet.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/stacks/elixir.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/stacks/go.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/stacks/jvm.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/stacks/node.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/stacks/python.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/stacks/react-native.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/stacks/react-web.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/stacks/ruby.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/stacks/rust.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/stacks/swift.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/stacks/typescript.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/rules/stacks/uv.md +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/advice/advice.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/agenthooks/decide.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/agenthooks/policy.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/agenthooks/prompt.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/bench/adapters.json +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/brief/kind.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/brief/packet.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/brief.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/decide.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/evidence.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/impact.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/lessons.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/map.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/plan.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/repoindex.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/review.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/shared.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/commands/tests.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/distill/engine.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/federation/client.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/federation/config.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/federation/query.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/graph/compile.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/graph/spec.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/graph/speccheck.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/hooks/capability.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/hooks/gates.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/hooks/resolve.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/hooks/where.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/identity.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/index/compact.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/index/extract.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/index/gate.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/index/impact.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/index/tests.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/kernel/budget.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/kernel/card.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/kernel/checks.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/kernel/inferability.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/kernel/variants.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/mcp/schema.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/measure/context.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/measure/loaderView.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/monorepo.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/output/index.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/plan/index.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/plan/template.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/projection/baselines.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/projection/conflicts.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/projection/disclosure.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/projection/lock.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/projection/markers.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/projection/mdc.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/projection/shared.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/projection/targets.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/resolve/body.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/resolve/eval.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/resolve/fingerprint.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/resolve/near.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/resolve/resolve.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/resolve/source.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/toolchain.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/src/workspace.mjs +0 -0
- {simt_dev-0.5.0 → simt_dev-0.6.2}/templates/plan/tracker.json +0 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Editors and operating systems
|
|
2
|
+
.DS_Store
|
|
3
|
+
.idea/
|
|
4
|
+
# Per-developer git identity, written by `simt init`. Not a file to share:
|
|
5
|
+
# it carries whoever is committing into the tree, and a repository has more than
|
|
6
|
+
# one of those. See ADR-057.
|
|
7
|
+
git.config
|
|
8
|
+
|
|
9
|
+
.pybuild/
|
|
10
|
+
dist/
|
|
11
|
+
.sea-cache/
|
|
12
|
+
|
|
13
|
+
# Local index, evidence ledger, benchmark run outputs and local-model proposals
|
|
14
|
+
# (plan 0003 §4). Task descriptors in .simt/bench/tasks/*.json are committed;
|
|
15
|
+
# runs, distilled summaries and review proposals are not.
|
|
16
|
+
.simt/index.sqlite
|
|
17
|
+
.simt/index.jsonl
|
|
18
|
+
.simt/ledger.jsonl
|
|
19
|
+
.simt/bench/runs/
|
|
20
|
+
.simt/gate/
|
|
21
|
+
.simt/distilled/
|
|
22
|
+
.simt/reviews/
|
|
@@ -6,6 +6,152 @@ All notable changes to this package are recorded here. The format follows
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.6.2] — 2026-10-27
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
The v0.6.1 tag run failed its own tests step: two decision-corpus lists in
|
|
14
|
+
`test/rules.test.mjs` were not moved with ADR-099 (the partial-supersession
|
|
15
|
+
shapes and the leaking-paths count, both designed to move with the corpus).
|
|
16
|
+
Same product as v0.6.1; this tag exists so the release automation is proven by
|
|
17
|
+
a green run rather than described by a red one.
|
|
18
|
+
|
|
19
|
+
## [0.6.1] — 2026-10-27
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
The release automation, which the v0.6.0 tag proved broken in two places. The
|
|
24
|
+
tag workflow compared CI-built binaries against locally-built committed
|
|
25
|
+
checksums, but the build is deterministic per host family, not across them —
|
|
26
|
+
the check could never pass, and darwin binaries cannot be finished on ubuntu
|
|
27
|
+
runners for lack of `codesign` anyway. Each target now builds on its native
|
|
28
|
+
runner, the release verifies the served bytes equal the built bytes, and a
|
|
29
|
+
`sync-formula` job re-renders the committed formula from the served bytes
|
|
30
|
+
(ADR-099). The formula description no longer starts with an article, which is
|
|
31
|
+
what failed the Homebrew channel's `brew style` on v0.6.0. No product change.
|
|
32
|
+
|
|
33
|
+
## [0.6.0] — 2026-10-27
|
|
34
|
+
|
|
35
|
+
### Added
|
|
36
|
+
|
|
37
|
+
`simt plugin <claude|gemini|cursor> --out <dir>` generates one of the three
|
|
38
|
+
harness packages from the same tables `agent-hooks install` writes — the hooks
|
|
39
|
+
file, the MCP registration and, for cursor, the kernel rules — each carrying a
|
|
40
|
+
self-contained copy of the runtime so it installs into a clean profile. Dry-run
|
|
41
|
+
unless `--yes`. The Gemini reader row gains its hooks file (`.gemini/settings.json`),
|
|
42
|
+
which extends `agent-hooks install` and `status` to a fifth adapter.
|
|
43
|
+
|
|
44
|
+
The MCP server answers `prompts/list` and `prompts/get` with two templates:
|
|
45
|
+
`simt-brief` starts a task from the pre-assembled brief packet, and `simt-slice`
|
|
46
|
+
implements one slice of the working plan (the next one whose dependencies are
|
|
47
|
+
complete, or a named one) — reading the repo's rules through `simt://kernel`
|
|
48
|
+
first, testing per the slice's acceptance check, committing locally and pushing
|
|
49
|
+
only on explicit approval. A prompt names the tools; the server stays read-only.
|
|
50
|
+
|
|
51
|
+
Two fixed resources join `simt://rules/{id}` and `simt://decisions/{adr}`:
|
|
52
|
+
`simt://kernel` serves the collaborating region rendered in kernel mode for
|
|
53
|
+
whatever repository the server runs in — the URI promises the kernel's bytes,
|
|
54
|
+
whatever `mode` the manifest declares — and `simt://plan/next` serves the
|
|
55
|
+
section of the next ready plan slice, listed only while one is ready. A listed
|
|
56
|
+
resource's size is the size its read returns.
|
|
57
|
+
|
|
58
|
+
The tool descriptions in `tools/list` are cut from 2,783 bytes to 1,949,
|
|
59
|
+
inside the 2 KB budget plan 0003 R41 sets for a cacheable tools list; the
|
|
60
|
+
input and output schemas stay full, per ADR-068.
|
|
61
|
+
|
|
62
|
+
`harness detect` reports the MCP registration files the loader table records —
|
|
63
|
+
`.mcp.json` (Claude Code), `.codex/config.toml`, `.cursor/mcp.json`,
|
|
64
|
+
`.agents/mcp_config.json`, `.gemini/settings.json`, `.vscode/mcp.json` — as
|
|
65
|
+
`kind: 'mcp'` rows whose provenance is the vendor page each path was read from.
|
|
66
|
+
A row rests on the file existing, never on a directory's presence, and never
|
|
67
|
+
counts toward the no-rule-channel note: a config file doesn't claim one.
|
|
68
|
+
|
|
69
|
+
The loader table gains the Gemini CLI reader, whose configuration reference the
|
|
70
|
+
table previously recorded as unavailable: it is live again (read 2026-10-26), so
|
|
71
|
+
the row carries the GEMINI.md chain with `.git` boundary markers, the
|
|
72
|
+
`context.fileName` rename (the only documented way this reader picks up
|
|
73
|
+
AGENTS.md), depth-5 `@path` imports, no published cap, and the `mcpServers`
|
|
74
|
+
registration. It stays a facts row — the `gemini-md` pointer remains the one
|
|
75
|
+
rule channel for that reader.
|
|
76
|
+
|
|
77
|
+
Each release now carries a fourth artefact beside the tarball, the wheel and the
|
|
78
|
+
formula: one single-file executable per target (`darwin-arm64`, `darwin-x64`,
|
|
79
|
+
`linux-x64`), built from the same `files` set with a pinned Node runtime, published to
|
|
80
|
+
the GitHub release with a `.sha256` beside it and a build-provenance attestation. It is
|
|
81
|
+
the channel for a machine that has no toolchain to install one with — the binary lands
|
|
82
|
+
as one file in `.simt/bin/` and carries its own runtime — and its acceptance is
|
|
83
|
+
executable: a Gradle fixture with every directory containing a node removed from `PATH`
|
|
84
|
+
runs `check` and the hook shim from the built bytes.
|
|
85
|
+
|
|
86
|
+
`simt pack new <name> --source <npm:<package>|git+https://…>` scaffolds a
|
|
87
|
+
versioned pack — `pack.json`, an unmeasured `bench.json`, one stack rule — and
|
|
88
|
+
`simt pack lint [dir]` validates it and states its measured ΔR, rejecting a pack
|
|
89
|
+
with no bench summary under `--require-measured`. `simt pack publish [dir]` lints
|
|
90
|
+
first, publishes an npm-sourced pack idempotently (a live version is skipped),
|
|
91
|
+
and names the tag-and-push for a git-sourced one. The summary binds to every
|
|
92
|
+
byte but itself, so recording a measurement cannot invalidate it.
|
|
93
|
+
|
|
94
|
+
### Changed
|
|
95
|
+
|
|
96
|
+
`harness detect`'s "some readers read AGENTS.md" rows no longer say bare "some"
|
|
97
|
+
when the row knows which one: the `readsAgentsMdNote` travels to the text
|
|
98
|
+
output, and `.gemini` graduates from unverified candidate to verified detection
|
|
99
|
+
facts (presence implies Gemini CLI; AGENTS.md only when `context.fileName`
|
|
100
|
+
names it).
|
|
101
|
+
|
|
102
|
+
The one-line description the three channels publish (npm, PyPI and Homebrew) now
|
|
103
|
+
names the goal plan `0003` is building toward — an intelligence amplifier for AI
|
|
104
|
+
coding agents — instead of the adoption-only story it grew out of.
|
|
105
|
+
|
|
106
|
+
The per-repository state directory is renamed from `.simt-dev/` to `.simt/`: the
|
|
107
|
+
index, ledger, lessons, bench artifacts, local-model proposals (`distilled/`,
|
|
108
|
+
`reviews/`) and repo-local profiles all live under `.simt/` now. Existing state is
|
|
109
|
+
not migrated — a repository that carries a `.simt-dev/` directory moves it once by
|
|
110
|
+
hand (`mv .simt-dev .simt`); everything in it is cache or ledger, regenerable from
|
|
111
|
+
git. The names this tool writes into files it does not own stay put: the `simt.json`
|
|
112
|
+
manifest, the `simt-dev-check.yml` gate, the user-level config directory and the
|
|
113
|
+
`SIMT_DEV_*` environment variables keep their names.
|
|
114
|
+
|
|
115
|
+
The skill registry leaves the published set again, as ADR-061 ruled when it
|
|
116
|
+
first left in 0.2.1. It is a catalogue of one workspace's skills — the
|
|
117
|
+
repositories whose bodies it resolves — and an installed copy serving that
|
|
118
|
+
catalogue to an adopting repository is a confident wrong answer: the skills
|
|
119
|
+
it names do not live in the reader's workspace. 0.5.0 carried the registry
|
|
120
|
+
because a fresh install's `simt skills *` and `simt distill` otherwise found
|
|
121
|
+
none; the fix is the honest absence the tiered loader already reports — the
|
|
122
|
+
path it would have read, and the `simt graph lint <path>` remedy — with a
|
|
123
|
+
workspace that owns the registry naming it through `--workspace`,
|
|
124
|
+
`SIMT_DEV_WORKSPACE` or the user config file. Custom skills were never part
|
|
125
|
+
of the registry: they live in each repository, and the disclosure scan
|
|
126
|
+
projects them into AGENTS.md.
|
|
127
|
+
|
|
128
|
+
The entry point file is renamed from `bin/simt-dev.mjs` to `bin/simt.mjs`,
|
|
129
|
+
matching the command it installs: the command has been `simt` for a long
|
|
130
|
+
time, the package is still `simt-dev`, and the file path was the last place
|
|
131
|
+
that carried the old spelling. `BIN_REL` in `src/name.mjs` is the single
|
|
132
|
+
source of truth, so the generated hook shim and CI workflow pick up the new
|
|
133
|
+
path on their next regeneration; the channels (npm, PyPI, Homebrew), the
|
|
134
|
+
repository's own CI and the test harnesses follow.
|
|
135
|
+
|
|
136
|
+
The hook shim's remedy and the generated CI workflow now install the release binary
|
|
137
|
+
for a repository without npm, instead of the pinned global npm install (`npm i -g`)
|
|
138
|
+
that needed the npm that repository kind is defined by not having. The remedy is the
|
|
139
|
+
one-line download the binary channel names, with its platform derived from `uname`;
|
|
140
|
+
the CI step verifies the download against the published `.sha256` and runs with no
|
|
141
|
+
`setup-node` step at all — a file that runs without a Node toolchain should not have
|
|
142
|
+
one installed to run it.
|
|
143
|
+
|
|
144
|
+
The locator resolves `.simt/bin/simt` between `node_modules` and `PATH`, so the bytes
|
|
145
|
+
a repository downloaded are the bytes its gate runs and a machine-wide install cannot
|
|
146
|
+
shadow them. The dispatcher's version check is unchanged and still refuses a stale
|
|
147
|
+
copy, whichever path found it.
|
|
148
|
+
|
|
149
|
+
Homebrew's formula downloads the release binaries rather than the npm tarball — one
|
|
150
|
+
`url`/`sha256` pair per target, chosen at install time — and no longer declares
|
|
151
|
+
`depends_on "node"`. `scripts/release-formula.mjs` patches each pair by content, and
|
|
152
|
+
the release refuses to publish a formula whose checksums are not the bytes the tagged
|
|
153
|
+
tree builds (ADR-098).
|
|
154
|
+
|
|
9
155
|
## [0.5.0] — 2026-10-25
|
|
10
156
|
|
|
11
157
|
### An offline distiller that proposes, never projects
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: simt-dev
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 0.6.2
|
|
4
|
+
Summary: An intelligence amplifier for AI coding agents: rules and dual gates adopted by one command, plus local retrieval, task briefs, benches and repo memory — deterministic by default, with local-model adapters that propose and never select.
|
|
5
5
|
Project-URL: Homepage, https://github.com/QuazarMedia/simt-dev
|
|
6
6
|
Project-URL: Repository, https://github.com/QuazarMedia/simt-dev
|
|
7
7
|
Project-URL: Changelog, https://github.com/QuazarMedia/simt-dev/blob/main/CHANGELOG.md
|
|
@@ -32,7 +32,10 @@ Description-Content-Type: text/markdown
|
|
|
32
32
|
|
|
33
33
|

|
|
34
34
|
|
|
35
|
-
`simt` adopts a repository for the agents that work in it
|
|
35
|
+
`simt` adopts a repository for the agents that work in it, and builds an intelligence
|
|
36
|
+
amplifier around them: a brief that answers before the agent explores, gates that
|
|
37
|
+
validate before a tool call, benches that price every rule text, and memory that puts
|
|
38
|
+
a recorded failure to work on the next one.
|
|
36
39
|
|
|
37
40
|
It reads what the repository actually runs, projects the rules that are not already
|
|
38
41
|
obvious into the files those agents read, and installs only the gates that repository
|
|
@@ -50,7 +53,64 @@ Anything that needs a parser grammar, a local model, or another server is a sepa
|
|
|
50
53
|
package, off until the repository names it, and it proposes rows or text for a person
|
|
51
54
|
to merge. It does not write the projection.
|
|
52
55
|
|
|
53
|
-
##
|
|
56
|
+
## Install
|
|
57
|
+
|
|
58
|
+
Requires **Node >= 22.20.0** for the npm and PyPI channels; the release binary carries
|
|
59
|
+
its own runtime. The current published release is **0.5.0**. Pin it. The tool writes a
|
|
60
|
+
content digest into the files it generates, and an unpinned upgrade changes them under
|
|
61
|
+
you.
|
|
62
|
+
|
|
63
|
+
```sh
|
|
64
|
+
npm i -D simt-dev@0.5.0
|
|
65
|
+
|
|
66
|
+
# or globally
|
|
67
|
+
npm i -g simt-dev@0.5.0
|
|
68
|
+
|
|
69
|
+
# or once, with no install
|
|
70
|
+
npx -y simt-dev@0.5.0 check
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### From PyPI
|
|
74
|
+
|
|
75
|
+
The wheel carries the same bytes as the npm tarball. It does not fetch them from npm
|
|
76
|
+
at install time.
|
|
77
|
+
|
|
78
|
+
```sh
|
|
79
|
+
pip install simt-dev
|
|
80
|
+
|
|
81
|
+
# when this machine has no node
|
|
82
|
+
pip install "simt-dev[node]"
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
`simt` is the command on both channels. Node is resolved in this order, and the first
|
|
86
|
+
one that answers wins: `SIMT_DEV_NODE`, the node bundled with the `node` extra, then
|
|
87
|
+
`node` on `PATH`.
|
|
88
|
+
|
|
89
|
+
### From Homebrew
|
|
90
|
+
|
|
91
|
+
```sh
|
|
92
|
+
brew install QuazarMedia/homebrew-tap/simt-dev
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
The formula downloads the single-file binary for this machine, which carries its own
|
|
96
|
+
runtime: the command works with no Node installed.
|
|
97
|
+
|
|
98
|
+
### As a single-file binary
|
|
99
|
+
|
|
100
|
+
Each release carries one executable per platform — macOS arm64 and x64, Linux x64 —
|
|
101
|
+
beside its `.sha256`. The channel's first release is the version after 0.5.0; pin that,
|
|
102
|
+
and run this from the repository's top level:
|
|
103
|
+
|
|
104
|
+
```sh
|
|
105
|
+
mkdir -p .simt/bin && os=$(uname -s | tr A-Z a-z) && arch=$(uname -m | sed "s/x86_64/x64/") && curl -fsSL "https://github.com/QuazarMedia/simt-dev/releases/download/v<version>/simt-dev-<version>-$os-$arch" -o .simt/bin/simt && chmod +x .simt/bin/simt
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
The locator checks `.simt/bin/simt` before `PATH`, so the repository's own copy is the
|
|
109
|
+
one its hooks and its CI run — this is the same command the hook shim prints as its
|
|
110
|
+
remedy. The generated CI workflow downloads the same asset and verifies it against the
|
|
111
|
+
published `.sha256` before running anything.
|
|
112
|
+
|
|
113
|
+
## What `simt` does
|
|
54
114
|
|
|
55
115
|
```sh
|
|
56
116
|
# Adopt, inspect, and maintain a repository
|
|
@@ -113,11 +173,15 @@ simt bench report [--compare a b] # resolved rate, quality, cost, CPI, bootstr
|
|
|
113
173
|
simt bench ablate --yes # leave-one-out rule ablation ranked by value per KB
|
|
114
174
|
simt bench probes --yes # 12 deterministic rule-compliance probes
|
|
115
175
|
simt bench variants --yes # evaluate simt-variants slots and lock winners in simt-dev.lock.json
|
|
176
|
+
simt pack new <name> --source <spec> # scaffold a versioned pack: pack.json, bench.json, one rule
|
|
177
|
+
simt pack lint [dir] [--require-measured] # validate a pack and state its measured ΔR
|
|
178
|
+
simt pack publish [dir] --yes # publish an npm-sourced pack (git packs name the tag-and-push)
|
|
116
179
|
simt mcp [--list] # serve the 13 read-only tools over stdio JSON-RPC
|
|
117
180
|
```
|
|
118
181
|
|
|
119
182
|
`init`, `sync`, `upgrade`, `hooks install`, `agent-hooks install`, `shared install`,
|
|
120
|
-
`skills install`, `plan done`, `lessons review`, `decide`
|
|
183
|
+
`skills install`, `plan done`, `lessons review`, `decide`, `pack new`, `pack publish`
|
|
184
|
+
and the `bench` writers print
|
|
121
185
|
a plan and write nothing without `--yes`. None of them commit or push. `simt index`
|
|
122
186
|
writes its cache without asking: the file is gitignored and `git ls-files` can rebuild it.
|
|
123
187
|
|
|
@@ -239,7 +303,7 @@ returns a JSON object with `task`, `commands`, `files`, `tests`, `decisions`, `s
|
|
|
239
303
|
`DRIFT` with `simt sync --yes`, and resolve any rule checker or manifest findings.
|
|
240
304
|
2. **Verify execution evidence matches the current tree.** Run `simt evidence` to confirm
|
|
241
305
|
that the tests and gates you plan to cite were recorded against the current
|
|
242
|
-
`git write-tree` digest in `.simt
|
|
306
|
+
`git write-tree` digest in `.simt/ledger.jsonl`. Any file edit invalidates earlier
|
|
243
307
|
evidence.
|
|
244
308
|
3. **Record decisions, lessons, and tracker state:**
|
|
245
309
|
- If the change alters what the repository or tool believes, scaffold an ADR with
|
|
@@ -262,11 +326,11 @@ returns a JSON object with `task`, `commands`, `files`, `tests`, `decisions`, `s
|
|
|
262
326
|
| Shape | How to configure and run `simt` optimally |
|
|
263
327
|
| --- | --- |
|
|
264
328
|
| **Single-package repository** (Node, TypeScript, Python/`uv`, Go, Rust, JVM/Gradle/Maven, Android, Swift, .NET, Deno, Ruby, Dart, Elixir, Cloudflare Workers, React Web, React Native, ConnectIQ, Container) | Run `simt init --yes`, `simt hooks install --yes`, `simt agent-hooks install --yes`, and `simt index`. Stack profiles and runnable gates are selected from committed manifests and build files (`simt doctor` shows `stack`, `facts`, and `factEvidence`). Set `"mode": "kernel"` and `"budget": { "bytes": 12000 }` in `simt.json` to keep session-start tokens minimal while keeping convention/style rules reachable via `simt rules show <id>`. |
|
|
265
|
-
| **Custom stack or repo-specific house rules** | An ecosystem with no built-in profile is still adopted with `core` rules. Add repo-local profiles in `.simt
|
|
329
|
+
| **Custom stack or repo-specific house rules** | An ecosystem with no built-in profile is still adopted with `core` rules. Add repo-local profiles in `.simt/profiles/<id>.md` with `simt-id`, `simt-title`, `simt-applies`, and `simt-priority` (`hard`, `command`, `convention`, `style`); local profiles project alongside or shadow central ones. Declare custom gates under `gates.commands` and placeholders under `substitutions` in `simt.json`. |
|
|
266
330
|
| **Single-language or polyglot monorepo** (`package.json` `workspaces`, `pnpm-workspace.yaml`, `turbo.json`, `Cargo.toml` `[workspace]`, `go.work`, `settings.gradle`, `settings.gradle.kts`) | `simt init --yes` and `simt sync --yes` discover every workspace member and write both the root `AGENTS.md` and nested `<package>/AGENTS.md` projections carrying only the profiles specific to each package. Set `gates.cwd` in `simt.json` for gates that execute inside a sub-package. Measure nested context load with `simt harness loaders --at <package-dir>`, and use `simt gate --changed` to run only tests for modified packages. |
|
|
267
|
-
| **Multi-repository workspace / estate** (sibling checkouts under a workspace directory or `SIMT_DEV_WORKSPACE`) | Run `simt compare` across the workspace root to inspect adoption, drift, pinned SHAs, hook routing, most-violated rules, noisy/slow gates (`NOISY-GATE`), zero-value rules, and proposed ADR drafts. Run `simt tokens --repos` and `simt shared plan`, then `simt shared install --yes` to move rules repeated across repos into user-level harness files (`~/.claude/CLAUDE.md`, `~/.codex/AGENTS.md`, etc.). Vendor shared rule packs in `.simt
|
|
331
|
+
| **Multi-repository workspace / estate** (sibling checkouts under a workspace directory or `SIMT_DEV_WORKSPACE`) | Run `simt compare` across the workspace root to inspect adoption, drift, pinned SHAs, hook routing, most-violated rules, noisy/slow gates (`NOISY-GATE`), zero-value rules, and proposed ADR drafts. Run `simt tokens --repos` and `simt shared plan`, then `simt shared install --yes` to move rules repeated across repos into user-level harness files (`~/.claude/CLAUDE.md`, `~/.codex/AGENTS.md`, etc.). Vendor shared rule packs in `.simt/packs/<name>/` pinned by digest in `simt.json`, and upgrade the entire estate atomically with `simt upgrade --yes`. |
|
|
268
332
|
| **Repositories with external code-graph MCP servers** | Declare external stdio MCP servers under `federation` in `simt.json` (`{ name, command, args, tool, argument, languages, timeoutMs }`). `simt brief "<task>"` and the MCP `federation_query` tool ask each server one bounded structural question and cite the server name in `FEDERATION`. |
|
|
269
|
-
| **Offline or local-model-assisted workflows** (Ollama, `llama-server`, LM Studio, MLX) | By default, `simt` uses zero models and opens zero sockets (`ADR-075`, `ADR-090`). To opt in, add `local: { chat: { url, model }, embed: { url, model } }` in `simt.json` pointing at `http://127.0.0.1:<port>/v1`. Verify with `simt local doctor`, and build/query SQLite vector embeddings with `simt index --embed` and `simt map --embed` (non-loopback URLs are refused without `--allow-remote`). |
|
|
333
|
+
| **Offline or local-model-assisted workflows** (Ollama, `llama-server`, LM Studio, MLX) | By default, `simt` uses zero models and opens zero sockets (`ADR-075`, `ADR-090`). To opt in, add `local: { chat: { url, model }, embed: { url, model } }` in `simt.json` pointing at `http://127.0.0.1:<port>/v1`. Each role accepts an optional `apiKey` (sent as `Authorization: Bearer <key>`) for servers that require a token. Verify with `simt local doctor`, and build/query SQLite vector embeddings with `simt index --embed` and `simt map --embed` (non-loopback URLs are refused without `--allow-remote`). |
|
|
270
334
|
| **Rule, skill, and benchmark maintainers** | Lint skills with `simt graph lint --spec agentskills`, compile and split > 5,000-token skills with `simt skills compile`, and score the resolver with `simt skills eval`. Mine git history tasks with `simt bench mine --yes`, run arms with `simt bench run --yes`, compare arms with `simt bench report --compare bare kernel`, run leave-one-out ablation with `simt bench ablate --yes`, run compliance probes with `simt bench probes --yes`, and lock winning `simt-variants` wordings with `simt bench variants --yes`. |
|
|
271
335
|
|
|
272
336
|
## Module and MCP reference
|
|
@@ -286,13 +350,9 @@ returns a JSON object with `task`, `commands`, `files`, `tests`, `decisions`, `s
|
|
|
286
350
|
|
|
287
351
|
## Where the plan finishes
|
|
288
352
|
|
|
289
|
-
Slices `R01`–`
|
|
290
|
-
|
|
353
|
+
Slices `R01`–`R45` are complete and shipped in `0.6.0`. The remaining queued slices are the
|
|
354
|
+
small ergonomics:
|
|
291
355
|
|
|
292
|
-
- **Packaging and declarative harness data (`R41`–`R45`).** MCP 2026-07-28 revision
|
|
293
|
-
tightening, declarative harness adapter files with provenance, single-command plugin
|
|
294
|
-
packaging, a single-file binary alongside npm/PyPI/Homebrew, and benchmark-measured rule
|
|
295
|
-
packs.
|
|
296
356
|
- **The small doors (`R46`–`R55`).** `simt explain <CODE>` for every finding code, safe
|
|
297
357
|
idempotent `simt doctor --fix`, a `< 50 ms` `simt status --line`, a write journal with
|
|
298
358
|
`simt undo`, `--diff` on every writer, shell completions, one cross-harness ignore list
|
|
@@ -304,47 +364,6 @@ budgeted summaries with line citations, `simt review` proposes an advisory ADR-0
|
|
|
304
364
|
verdict over the staged diff, and `simt brief` carries model/effort advice from bench
|
|
305
365
|
history. All remain off until named and propose rather than write projected text.
|
|
306
366
|
|
|
307
|
-
## Install
|
|
308
|
-
|
|
309
|
-
Requires **Node >= 22.20.0**. The current published release is **0.5.0**. Pin it.
|
|
310
|
-
The tool writes a content digest into the files it generates, and an unpinned upgrade
|
|
311
|
-
changes them under you.
|
|
312
|
-
|
|
313
|
-
```sh
|
|
314
|
-
npm i -D simt-dev@0.5.0
|
|
315
|
-
|
|
316
|
-
# or globally
|
|
317
|
-
npm i -g simt-dev@0.5.0
|
|
318
|
-
|
|
319
|
-
# or once, with no install
|
|
320
|
-
npx -y simt-dev@0.5.0 check
|
|
321
|
-
```
|
|
322
|
-
|
|
323
|
-
### From PyPI
|
|
324
|
-
|
|
325
|
-
The wheel carries the same bytes as the npm tarball. It does not fetch them from npm
|
|
326
|
-
at install time.
|
|
327
|
-
|
|
328
|
-
```sh
|
|
329
|
-
pip install simt-dev
|
|
330
|
-
|
|
331
|
-
# when this machine has no node
|
|
332
|
-
pip install "simt-dev[node]"
|
|
333
|
-
```
|
|
334
|
-
|
|
335
|
-
`simt` is the command on both channels. Node is resolved in this order, and the first
|
|
336
|
-
one that answers wins: `SIMT_DEV_NODE`, the node bundled with the `node` extra, then
|
|
337
|
-
`node` on `PATH`.
|
|
338
|
-
|
|
339
|
-
### From Homebrew
|
|
340
|
-
|
|
341
|
-
```sh
|
|
342
|
-
brew install QuazarMedia/homebrew-tap/simt-dev
|
|
343
|
-
```
|
|
344
|
-
|
|
345
|
-
The formula depends on `node`, so the command works on a machine that has never had
|
|
346
|
-
Node installed.
|
|
347
|
-
|
|
348
367
|
## What it writes
|
|
349
368
|
|
|
350
369
|
| Path | What |
|
|
@@ -374,11 +393,11 @@ These are caches, gitignored, and rebuildable. They are not repository content:
|
|
|
374
393
|
|
|
375
394
|
| Path | What |
|
|
376
395
|
| --- | --- |
|
|
377
|
-
| `.simt
|
|
378
|
-
| `.simt
|
|
379
|
-
| `.simt
|
|
380
|
-
| `.simt
|
|
381
|
-
| `.simt
|
|
396
|
+
| `.simt/index.sqlite` | files, symbols, import/call/test/governs/cochange edges, FTS5 `fts` tokens across `code`, `docs`, `skills`, `decisions` and `lessons`, and optional `embeddings` vector blobs. JSON-lines at `.simt/index.jsonl` when this Node cannot open `node:sqlite` with FTS5 |
|
|
397
|
+
| `.simt/ledger.jsonl` | one line per gate or test the dispatcher actually ran, against one git tree, plus normalised failure signatures |
|
|
398
|
+
| `.simt/lessons.jsonl` | deterministic lesson candidates captured from fail-to-fix pairs, reverts, `BLOCK` reviews, and hook denials |
|
|
399
|
+
| `.simt/bench/` | mined tasks (`tasks/`), test patch vault (`vault/`), and benchmark runs (`runs/`) |
|
|
400
|
+
| `.simt/proposals/` | non-authoritative skill description proposals with `{model, promptHash, digest}` provenance |
|
|
382
401
|
|
|
383
402
|
`simt shared install --yes` writes a user-level copy of the rules a workspace
|
|
384
403
|
repeats, into the file that harness documents, and records the ids on each
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|

|
|
4
4
|
|
|
5
|
-
`simt` adopts a repository for the agents that work in it
|
|
5
|
+
`simt` adopts a repository for the agents that work in it, and builds an intelligence
|
|
6
|
+
amplifier around them: a brief that answers before the agent explores, gates that
|
|
7
|
+
validate before a tool call, benches that price every rule text, and memory that puts
|
|
8
|
+
a recorded failure to work on the next one.
|
|
6
9
|
|
|
7
10
|
It reads what the repository actually runs, projects the rules that are not already
|
|
8
11
|
obvious into the files those agents read, and installs only the gates that repository
|
|
@@ -20,7 +23,64 @@ Anything that needs a parser grammar, a local model, or another server is a sepa
|
|
|
20
23
|
package, off until the repository names it, and it proposes rows or text for a person
|
|
21
24
|
to merge. It does not write the projection.
|
|
22
25
|
|
|
23
|
-
##
|
|
26
|
+
## Install
|
|
27
|
+
|
|
28
|
+
Requires **Node >= 22.20.0** for the npm and PyPI channels; the release binary carries
|
|
29
|
+
its own runtime. The current published release is **0.5.0**. Pin it. The tool writes a
|
|
30
|
+
content digest into the files it generates, and an unpinned upgrade changes them under
|
|
31
|
+
you.
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
npm i -D simt-dev@0.5.0
|
|
35
|
+
|
|
36
|
+
# or globally
|
|
37
|
+
npm i -g simt-dev@0.5.0
|
|
38
|
+
|
|
39
|
+
# or once, with no install
|
|
40
|
+
npx -y simt-dev@0.5.0 check
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### From PyPI
|
|
44
|
+
|
|
45
|
+
The wheel carries the same bytes as the npm tarball. It does not fetch them from npm
|
|
46
|
+
at install time.
|
|
47
|
+
|
|
48
|
+
```sh
|
|
49
|
+
pip install simt-dev
|
|
50
|
+
|
|
51
|
+
# when this machine has no node
|
|
52
|
+
pip install "simt-dev[node]"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
`simt` is the command on both channels. Node is resolved in this order, and the first
|
|
56
|
+
one that answers wins: `SIMT_DEV_NODE`, the node bundled with the `node` extra, then
|
|
57
|
+
`node` on `PATH`.
|
|
58
|
+
|
|
59
|
+
### From Homebrew
|
|
60
|
+
|
|
61
|
+
```sh
|
|
62
|
+
brew install QuazarMedia/homebrew-tap/simt-dev
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The formula downloads the single-file binary for this machine, which carries its own
|
|
66
|
+
runtime: the command works with no Node installed.
|
|
67
|
+
|
|
68
|
+
### As a single-file binary
|
|
69
|
+
|
|
70
|
+
Each release carries one executable per platform — macOS arm64 and x64, Linux x64 —
|
|
71
|
+
beside its `.sha256`. The channel's first release is the version after 0.5.0; pin that,
|
|
72
|
+
and run this from the repository's top level:
|
|
73
|
+
|
|
74
|
+
```sh
|
|
75
|
+
mkdir -p .simt/bin && os=$(uname -s | tr A-Z a-z) && arch=$(uname -m | sed "s/x86_64/x64/") && curl -fsSL "https://github.com/QuazarMedia/simt-dev/releases/download/v<version>/simt-dev-<version>-$os-$arch" -o .simt/bin/simt && chmod +x .simt/bin/simt
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
The locator checks `.simt/bin/simt` before `PATH`, so the repository's own copy is the
|
|
79
|
+
one its hooks and its CI run — this is the same command the hook shim prints as its
|
|
80
|
+
remedy. The generated CI workflow downloads the same asset and verifies it against the
|
|
81
|
+
published `.sha256` before running anything.
|
|
82
|
+
|
|
83
|
+
## What `simt` does
|
|
24
84
|
|
|
25
85
|
```sh
|
|
26
86
|
# Adopt, inspect, and maintain a repository
|
|
@@ -83,11 +143,15 @@ simt bench report [--compare a b] # resolved rate, quality, cost, CPI, bootstr
|
|
|
83
143
|
simt bench ablate --yes # leave-one-out rule ablation ranked by value per KB
|
|
84
144
|
simt bench probes --yes # 12 deterministic rule-compliance probes
|
|
85
145
|
simt bench variants --yes # evaluate simt-variants slots and lock winners in simt-dev.lock.json
|
|
146
|
+
simt pack new <name> --source <spec> # scaffold a versioned pack: pack.json, bench.json, one rule
|
|
147
|
+
simt pack lint [dir] [--require-measured] # validate a pack and state its measured ΔR
|
|
148
|
+
simt pack publish [dir] --yes # publish an npm-sourced pack (git packs name the tag-and-push)
|
|
86
149
|
simt mcp [--list] # serve the 13 read-only tools over stdio JSON-RPC
|
|
87
150
|
```
|
|
88
151
|
|
|
89
152
|
`init`, `sync`, `upgrade`, `hooks install`, `agent-hooks install`, `shared install`,
|
|
90
|
-
`skills install`, `plan done`, `lessons review`, `decide`
|
|
153
|
+
`skills install`, `plan done`, `lessons review`, `decide`, `pack new`, `pack publish`
|
|
154
|
+
and the `bench` writers print
|
|
91
155
|
a plan and write nothing without `--yes`. None of them commit or push. `simt index`
|
|
92
156
|
writes its cache without asking: the file is gitignored and `git ls-files` can rebuild it.
|
|
93
157
|
|
|
@@ -209,7 +273,7 @@ returns a JSON object with `task`, `commands`, `files`, `tests`, `decisions`, `s
|
|
|
209
273
|
`DRIFT` with `simt sync --yes`, and resolve any rule checker or manifest findings.
|
|
210
274
|
2. **Verify execution evidence matches the current tree.** Run `simt evidence` to confirm
|
|
211
275
|
that the tests and gates you plan to cite were recorded against the current
|
|
212
|
-
`git write-tree` digest in `.simt
|
|
276
|
+
`git write-tree` digest in `.simt/ledger.jsonl`. Any file edit invalidates earlier
|
|
213
277
|
evidence.
|
|
214
278
|
3. **Record decisions, lessons, and tracker state:**
|
|
215
279
|
- If the change alters what the repository or tool believes, scaffold an ADR with
|
|
@@ -232,11 +296,11 @@ returns a JSON object with `task`, `commands`, `files`, `tests`, `decisions`, `s
|
|
|
232
296
|
| Shape | How to configure and run `simt` optimally |
|
|
233
297
|
| --- | --- |
|
|
234
298
|
| **Single-package repository** (Node, TypeScript, Python/`uv`, Go, Rust, JVM/Gradle/Maven, Android, Swift, .NET, Deno, Ruby, Dart, Elixir, Cloudflare Workers, React Web, React Native, ConnectIQ, Container) | Run `simt init --yes`, `simt hooks install --yes`, `simt agent-hooks install --yes`, and `simt index`. Stack profiles and runnable gates are selected from committed manifests and build files (`simt doctor` shows `stack`, `facts`, and `factEvidence`). Set `"mode": "kernel"` and `"budget": { "bytes": 12000 }` in `simt.json` to keep session-start tokens minimal while keeping convention/style rules reachable via `simt rules show <id>`. |
|
|
235
|
-
| **Custom stack or repo-specific house rules** | An ecosystem with no built-in profile is still adopted with `core` rules. Add repo-local profiles in `.simt
|
|
299
|
+
| **Custom stack or repo-specific house rules** | An ecosystem with no built-in profile is still adopted with `core` rules. Add repo-local profiles in `.simt/profiles/<id>.md` with `simt-id`, `simt-title`, `simt-applies`, and `simt-priority` (`hard`, `command`, `convention`, `style`); local profiles project alongside or shadow central ones. Declare custom gates under `gates.commands` and placeholders under `substitutions` in `simt.json`. |
|
|
236
300
|
| **Single-language or polyglot monorepo** (`package.json` `workspaces`, `pnpm-workspace.yaml`, `turbo.json`, `Cargo.toml` `[workspace]`, `go.work`, `settings.gradle`, `settings.gradle.kts`) | `simt init --yes` and `simt sync --yes` discover every workspace member and write both the root `AGENTS.md` and nested `<package>/AGENTS.md` projections carrying only the profiles specific to each package. Set `gates.cwd` in `simt.json` for gates that execute inside a sub-package. Measure nested context load with `simt harness loaders --at <package-dir>`, and use `simt gate --changed` to run only tests for modified packages. |
|
|
237
|
-
| **Multi-repository workspace / estate** (sibling checkouts under a workspace directory or `SIMT_DEV_WORKSPACE`) | Run `simt compare` across the workspace root to inspect adoption, drift, pinned SHAs, hook routing, most-violated rules, noisy/slow gates (`NOISY-GATE`), zero-value rules, and proposed ADR drafts. Run `simt tokens --repos` and `simt shared plan`, then `simt shared install --yes` to move rules repeated across repos into user-level harness files (`~/.claude/CLAUDE.md`, `~/.codex/AGENTS.md`, etc.). Vendor shared rule packs in `.simt
|
|
301
|
+
| **Multi-repository workspace / estate** (sibling checkouts under a workspace directory or `SIMT_DEV_WORKSPACE`) | Run `simt compare` across the workspace root to inspect adoption, drift, pinned SHAs, hook routing, most-violated rules, noisy/slow gates (`NOISY-GATE`), zero-value rules, and proposed ADR drafts. Run `simt tokens --repos` and `simt shared plan`, then `simt shared install --yes` to move rules repeated across repos into user-level harness files (`~/.claude/CLAUDE.md`, `~/.codex/AGENTS.md`, etc.). Vendor shared rule packs in `.simt/packs/<name>/` pinned by digest in `simt.json`, and upgrade the entire estate atomically with `simt upgrade --yes`. |
|
|
238
302
|
| **Repositories with external code-graph MCP servers** | Declare external stdio MCP servers under `federation` in `simt.json` (`{ name, command, args, tool, argument, languages, timeoutMs }`). `simt brief "<task>"` and the MCP `federation_query` tool ask each server one bounded structural question and cite the server name in `FEDERATION`. |
|
|
239
|
-
| **Offline or local-model-assisted workflows** (Ollama, `llama-server`, LM Studio, MLX) | By default, `simt` uses zero models and opens zero sockets (`ADR-075`, `ADR-090`). To opt in, add `local: { chat: { url, model }, embed: { url, model } }` in `simt.json` pointing at `http://127.0.0.1:<port>/v1`. Verify with `simt local doctor`, and build/query SQLite vector embeddings with `simt index --embed` and `simt map --embed` (non-loopback URLs are refused without `--allow-remote`). |
|
|
303
|
+
| **Offline or local-model-assisted workflows** (Ollama, `llama-server`, LM Studio, MLX) | By default, `simt` uses zero models and opens zero sockets (`ADR-075`, `ADR-090`). To opt in, add `local: { chat: { url, model }, embed: { url, model } }` in `simt.json` pointing at `http://127.0.0.1:<port>/v1`. Each role accepts an optional `apiKey` (sent as `Authorization: Bearer <key>`) for servers that require a token. Verify with `simt local doctor`, and build/query SQLite vector embeddings with `simt index --embed` and `simt map --embed` (non-loopback URLs are refused without `--allow-remote`). |
|
|
240
304
|
| **Rule, skill, and benchmark maintainers** | Lint skills with `simt graph lint --spec agentskills`, compile and split > 5,000-token skills with `simt skills compile`, and score the resolver with `simt skills eval`. Mine git history tasks with `simt bench mine --yes`, run arms with `simt bench run --yes`, compare arms with `simt bench report --compare bare kernel`, run leave-one-out ablation with `simt bench ablate --yes`, run compliance probes with `simt bench probes --yes`, and lock winning `simt-variants` wordings with `simt bench variants --yes`. |
|
|
241
305
|
|
|
242
306
|
## Module and MCP reference
|
|
@@ -256,13 +320,9 @@ returns a JSON object with `task`, `commands`, `files`, `tests`, `decisions`, `s
|
|
|
256
320
|
|
|
257
321
|
## Where the plan finishes
|
|
258
322
|
|
|
259
|
-
Slices `R01`–`
|
|
260
|
-
|
|
323
|
+
Slices `R01`–`R45` are complete and shipped in `0.6.0`. The remaining queued slices are the
|
|
324
|
+
small ergonomics:
|
|
261
325
|
|
|
262
|
-
- **Packaging and declarative harness data (`R41`–`R45`).** MCP 2026-07-28 revision
|
|
263
|
-
tightening, declarative harness adapter files with provenance, single-command plugin
|
|
264
|
-
packaging, a single-file binary alongside npm/PyPI/Homebrew, and benchmark-measured rule
|
|
265
|
-
packs.
|
|
266
326
|
- **The small doors (`R46`–`R55`).** `simt explain <CODE>` for every finding code, safe
|
|
267
327
|
idempotent `simt doctor --fix`, a `< 50 ms` `simt status --line`, a write journal with
|
|
268
328
|
`simt undo`, `--diff` on every writer, shell completions, one cross-harness ignore list
|
|
@@ -274,47 +334,6 @@ budgeted summaries with line citations, `simt review` proposes an advisory ADR-0
|
|
|
274
334
|
verdict over the staged diff, and `simt brief` carries model/effort advice from bench
|
|
275
335
|
history. All remain off until named and propose rather than write projected text.
|
|
276
336
|
|
|
277
|
-
## Install
|
|
278
|
-
|
|
279
|
-
Requires **Node >= 22.20.0**. The current published release is **0.5.0**. Pin it.
|
|
280
|
-
The tool writes a content digest into the files it generates, and an unpinned upgrade
|
|
281
|
-
changes them under you.
|
|
282
|
-
|
|
283
|
-
```sh
|
|
284
|
-
npm i -D simt-dev@0.5.0
|
|
285
|
-
|
|
286
|
-
# or globally
|
|
287
|
-
npm i -g simt-dev@0.5.0
|
|
288
|
-
|
|
289
|
-
# or once, with no install
|
|
290
|
-
npx -y simt-dev@0.5.0 check
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
### From PyPI
|
|
294
|
-
|
|
295
|
-
The wheel carries the same bytes as the npm tarball. It does not fetch them from npm
|
|
296
|
-
at install time.
|
|
297
|
-
|
|
298
|
-
```sh
|
|
299
|
-
pip install simt-dev
|
|
300
|
-
|
|
301
|
-
# when this machine has no node
|
|
302
|
-
pip install "simt-dev[node]"
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
`simt` is the command on both channels. Node is resolved in this order, and the first
|
|
306
|
-
one that answers wins: `SIMT_DEV_NODE`, the node bundled with the `node` extra, then
|
|
307
|
-
`node` on `PATH`.
|
|
308
|
-
|
|
309
|
-
### From Homebrew
|
|
310
|
-
|
|
311
|
-
```sh
|
|
312
|
-
brew install QuazarMedia/homebrew-tap/simt-dev
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
The formula depends on `node`, so the command works on a machine that has never had
|
|
316
|
-
Node installed.
|
|
317
|
-
|
|
318
337
|
## What it writes
|
|
319
338
|
|
|
320
339
|
| Path | What |
|
|
@@ -344,11 +363,11 @@ These are caches, gitignored, and rebuildable. They are not repository content:
|
|
|
344
363
|
|
|
345
364
|
| Path | What |
|
|
346
365
|
| --- | --- |
|
|
347
|
-
| `.simt
|
|
348
|
-
| `.simt
|
|
349
|
-
| `.simt
|
|
350
|
-
| `.simt
|
|
351
|
-
| `.simt
|
|
366
|
+
| `.simt/index.sqlite` | files, symbols, import/call/test/governs/cochange edges, FTS5 `fts` tokens across `code`, `docs`, `skills`, `decisions` and `lessons`, and optional `embeddings` vector blobs. JSON-lines at `.simt/index.jsonl` when this Node cannot open `node:sqlite` with FTS5 |
|
|
367
|
+
| `.simt/ledger.jsonl` | one line per gate or test the dispatcher actually ran, against one git tree, plus normalised failure signatures |
|
|
368
|
+
| `.simt/lessons.jsonl` | deterministic lesson candidates captured from fail-to-fix pairs, reverts, `BLOCK` reviews, and hook denials |
|
|
369
|
+
| `.simt/bench/` | mined tasks (`tasks/`), test patch vault (`vault/`), and benchmark runs (`runs/`) |
|
|
370
|
+
| `.simt/proposals/` | non-authoritative skill description proposals with `{model, promptHash, digest}` provenance |
|
|
352
371
|
|
|
353
372
|
`simt shared install --yes` writes a user-level copy of the rules a workspace
|
|
354
373
|
repeats, into the file that harness documents, and records the ids on each
|
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
Status: **accepted** · 2026-10-11
|
|
4
4
|
|
|
5
|
+
> Ruling 7's re-run mechanics are superseded by
|
|
6
|
+
> [ADR-097](ADR-097-the-channels-publish-by-hand-and-the-version-rides-in-as-an-input.md):
|
|
7
|
+
> the two channel jobs moved to a manual `workflow_dispatch` workflow whose `version`
|
|
8
|
+
> input dissolves the branch-vs-tag failure recorded below. The ordering ruling —
|
|
9
|
+
> npm live before either channel publishes — stands.
|
|
10
|
+
|
|
11
|
+
> Ruling 5's artefact choice and the Homebrew half of ruling 7 are superseded by
|
|
12
|
+
> [ADR-098](ADR-098-the-fourth-channel-is-one-file-and-it-needs-no-toolchain.md): the
|
|
13
|
+
> formula now downloads the release binary, not the npm tarball, and the Homebrew job's
|
|
14
|
+
> precondition is that those assets exist rather than that the npm version is live. The
|
|
15
|
+
> PyPI half of ruling 7 — npm live before the wheel publishes — stands, as does ruling
|
|
16
|
+
> 5's refusal of `std_npm_args`.
|
|
17
|
+
|
|
5
18
|
Affects: `pyproject.toml`, `python/simt_dev/`, `Formula/simt-dev.rb`,
|
|
6
19
|
`.github/workflows/publish.yml`, `scripts/release-formula.mjs`,
|
|
7
20
|
`scripts/verify-wheel.mjs`, `test/packaging.test.mjs`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ADR-059 — The version a repository runs is the one it pinned, and the gate refuses otherwise
|
|
2
2
|
|
|
3
|
-
Status: **accepted** · 2026-10-12 · affects all repos
|
|
3
|
+
Status: **accepted** · 2026-10-12 · affects all repos · ruling 3's no-npm install and remedy superseded by [ADR-098](ADR-098-the-fourth-channel-is-one-file-and-it-needs-no-toolchain.md)
|
|
4
4
|
|
|
5
5
|
## Context
|
|
6
6
|
|