@chemx/starter-kit 26.10.8-344 → 26.10.10-75
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.md +135 -32
- package/README.md +253 -199
- package/blueprints/atoms/a-button.svelte +11 -9
- package/blueprints/atoms/a-button.vue +2 -1
- package/blueprints/molecule-capsule/m-chemx-badge/m-chemx-badge.svelte +8 -4
- package/blueprints/molecule-capsule/m-chemx-badge/m-chemx-badge.tsx +8 -4
- package/blueprints/molecule-capsule/m-chemx-badge/m-chemx-badge.vue +8 -4
- package/blueprints/molecule-capsule/m-sample-card.svelte +2 -1
- package/blueprints/molecule-capsule/m-sample-card.tsx +2 -1
- package/blueprints/molecule-capsule/m-sample-card.vue +4 -2
- package/blueprints/workflows/chemx-audit.yml +15 -46
- package/cli/agent-json.js +40 -0
- package/cli/apply-edits.js +195 -0
- package/cli/audit/ai-slop-detector.js +62 -35
- package/cli/audit/ast-passes.js +52 -0
- package/cli/audit/ast-visitors.js +142 -83
- package/cli/audit/audit-plain.js +26 -0
- package/cli/audit/audit-summary.js +16 -3
- package/cli/audit/autofix-content.js +122 -0
- package/cli/audit/autofix.js +74 -159
- package/cli/audit/budget-rules.js +84 -0
- package/cli/audit/catch-predicates.js +51 -0
- package/cli/audit/chemx-dir.js +76 -0
- package/cli/audit/clone-detector.js +4 -2
- package/cli/audit/comment-regions.js +83 -0
- package/cli/audit/coverage.js +48 -0
- package/cli/audit/csharp-analyzer.js +47 -22
- package/cli/audit/discussion-store.js +9 -4
- package/cli/audit/extended-text-patterns.js +104 -54
- package/cli/audit/extended-visitors.js +26 -12
- package/cli/audit/feed.d.ts +77 -0
- package/cli/audit/feed.js +146 -0
- package/cli/audit/gate-delta.js +91 -0
- package/cli/audit/gate-verdict.js +25 -3
- package/cli/audit/history.d.ts +14 -2
- package/cli/audit/history.js +89 -101
- package/cli/audit/hook-shape-validator.js +18 -9
- package/cli/audit/lexicon-predicates.js +125 -0
- package/cli/audit/lifecycle-predicates.js +106 -0
- package/cli/audit/line-budgets.js +154 -0
- package/cli/audit/metrics.js +56 -37
- package/cli/audit/mutable-ref-predicate.js +54 -0
- package/cli/audit/parseable-code.js +11 -0
- package/cli/audit/pattern-detector.js +56 -28
- package/cli/audit/project-figures.js +28 -0
- package/cli/audit/prompt-rule-lines.js +46 -0
- package/cli/audit/prompts.js +74 -46
- package/cli/audit/prop-surface.js +74 -0
- package/cli/audit/ratchet.js +112 -23
- package/cli/audit/render-depth.js +79 -0
- package/cli/audit/reporter-banner.js +7 -4
- package/cli/audit/reporter-grades.js +52 -34
- package/cli/audit/reporter-grouping.js +10 -5
- package/cli/audit/reporter-markdown.js +16 -8
- package/cli/audit/reporter-sections.js +31 -16
- package/cli/audit/reporter-summary.js +28 -16
- package/cli/audit/reporter-utils.js +54 -30
- package/cli/audit/roadmap.js +20 -15
- package/cli/audit/rule-overrides.js +78 -0
- package/cli/audit/rule-pillars.js +43 -0
- package/cli/audit/rule-revisions.js +42 -0
- package/cli/audit/rules-helpers.js +13 -63
- package/cli/audit/rules-predicates.d.ts +1 -0
- package/cli/audit/rules-predicates.js +84 -64
- package/cli/audit/rules-registry.js +94 -10
- package/cli/audit/rules.js +92 -171
- package/cli/audit/shallow-catch-csharp.js +49 -0
- package/cli/audit/shallow-catch-escalation.js +157 -0
- package/cli/audit/shallow-catch-reads.js +116 -0
- package/cli/audit/social-gh.js +18 -9
- package/cli/audit/social-git.js +82 -40
- package/cli/audit/social-http.js +17 -9
- package/cli/audit/social-publisher.js +14 -7
- package/cli/audit/social.js +39 -30
- package/cli/audit/staged-delta.js +67 -0
- package/cli/audit/status-file.js +67 -0
- package/cli/audit/structural-weight-evaluator.js +17 -29
- package/cli/audit/structural-weight.js +30 -13
- package/cli/audit/suppressions.js +130 -0
- package/cli/audit/template-rules.js +82 -0
- package/cli/audit/types.d.ts +24 -1
- package/cli/audit-engine.js +128 -0
- package/cli/audit-preflight-git.js +15 -1
- package/cli/audit-preflight.js +6 -4
- package/cli/audit-scan.js +180 -0
- package/cli/audit-scope.js +31 -14
- package/cli/audit.js +6 -201
- package/cli/babel-lazy.js +41 -0
- package/cli/badge.js +9 -6
- package/cli/banner.js +37 -0
- package/cli/build/child-registry.js +57 -0
- package/cli/build/executor.js +122 -48
- package/cli/build.js +75 -25
- package/cli/cli-args.js +107 -0
- package/cli/columnar.js +6 -3
- package/cli/commands/cmd-audit-each.js +164 -0
- package/cli/commands/cmd-audit-feed.js +78 -0
- package/cli/commands/cmd-audit.js +136 -57
- package/cli/commands/cmd-batch.js +60 -0
- package/cli/commands/cmd-check.js +74 -0
- package/cli/commands/cmd-project.js +18 -9
- package/cli/commands/cmd-router.js +148 -32
- package/cli/commands/cmd-show.js +56 -0
- package/cli/commands/cmd-staged-delta.js +27 -0
- package/cli/commands/cmd-wrappers-files.js +77 -0
- package/cli/commands/cmd-wrappers-git.js +122 -0
- package/cli/commands/cmd-wrappers-json.js +101 -0
- package/cli/commands/cmd-wrappers.js +7 -322
- package/cli/commands/unknown-flags.js +228 -0
- package/cli/commands-schema-badge.js +73 -0
- package/cli/commands-schema-commit.js +21 -0
- package/cli/commands-schema-edit.js +106 -0
- package/cli/commands-schema-host.js +65 -0
- package/cli/commands-schema-ops.js +127 -0
- package/cli/commands-schema-patterns.js +69 -0
- package/cli/commands-schema-report.js +18 -0
- package/cli/commands-schema-search.js +121 -0
- package/cli/commands-schema-setup.js +30 -0
- package/cli/commands-schema-verify.js +89 -0
- package/cli/commands-schema-wrappers.js +131 -0
- package/cli/commands-schema.js +26 -408
- package/cli/comment-ranges.js +108 -0
- package/cli/commit/commit-args.js +73 -0
- package/cli/commit/commit-cli.js +25 -0
- package/cli/commit/commit-facts.js +49 -0
- package/cli/commit/commit-git.js +98 -0
- package/cli/commit/commit-index.js +35 -0
- package/cli/commit/commit-message.js +52 -0
- package/cli/commit/commit-record.js +68 -0
- package/cli/commit/commit-run.js +160 -0
- package/cli/commit/commit-validate.js +62 -0
- package/cli/config/index.js +54 -8
- package/cli/config/loader.js +77 -8
- package/cli/config/profiles.js +7 -0
- package/cli/conflicts-cli.js +118 -0
- package/cli/conflicts.js +104 -0
- package/cli/create.js +11 -6
- package/cli/db-project-stamp.js +124 -0
- package/cli/docs-check/command-tree.js +27 -0
- package/cli/docs-check/extract.js +151 -0
- package/cli/docs-check/resolve.js +85 -0
- package/cli/docs-check/run.js +88 -0
- package/cli/doctor/check-env.js +43 -0
- package/cli/doctor/check-host.js +115 -0
- package/cli/doctor/check-index.js +93 -0
- package/cli/doctor/check-mcp.js +78 -0
- package/cli/doctor/doctor-cli.js +60 -0
- package/cli/doctor/kit-locate.js +40 -0
- package/cli/doctor/proc-scan.js +66 -0
- package/cli/edit-atomic.js +75 -0
- package/cli/edit-diff.js +98 -0
- package/cli/edit-guardrails.js +77 -0
- package/cli/edit-locks.js +128 -0
- package/cli/embeddings/vectorizer.js +9 -5
- package/cli/errors/catcher.js +45 -52
- package/cli/errors/formatter.js +14 -10
- package/cli/errors/policy.js +26 -0
- package/cli/errors/publisher.js +5 -1
- package/cli/errors/report-output.js +67 -0
- package/cli/errors/sanitizer.js +52 -3
- package/cli/errors/storage.js +17 -5
- package/cli/explode-importers.js +102 -0
- package/cli/explode-path-args.js +115 -0
- package/cli/explode-plan.js +153 -0
- package/cli/explode-prologue.js +43 -0
- package/cli/explode-relocate.js +73 -0
- package/cli/exploder.js +205 -193
- package/cli/forge/anchors.js +50 -0
- package/cli/forge/audit-forge.js +58 -0
- package/cli/forge/binding-walk.js +84 -0
- package/cli/forge/bindings.js +238 -0
- package/cli/forge/blueprint-cli.js +153 -0
- package/cli/forge/blueprint-context.js +69 -0
- package/cli/forge/blueprint-members.js +82 -0
- package/cli/forge/blueprint-store.js +106 -0
- package/cli/forge/blueprint-target.js +44 -0
- package/cli/forge/blueprint.js +276 -0
- package/cli/forge/body-end-cache.js +34 -0
- package/cli/forge/body-ends.js +86 -0
- package/cli/forge/canon-inline.js +342 -0
- package/cli/forge/canon-logic.js +106 -0
- package/cli/forge/canon-nodes.js +270 -0
- package/cli/forge/canon-print.js +120 -0
- package/cli/forge/canonicalize.js +49 -0
- package/cli/forge/conventions.js +51 -0
- package/cli/forge/drift.js +120 -0
- package/cli/forge/exclusions.js +21 -0
- package/cli/forge/exits.js +76 -0
- package/cli/forge/facets.js +86 -0
- package/cli/forge/file-units.js +53 -0
- package/cli/forge/fingerprint-file.js +52 -0
- package/cli/forge/fingerprint-session.js +215 -0
- package/cli/forge/fingerprint-sync.js +74 -0
- package/cli/forge/fingerprint-visitors.js +66 -0
- package/cli/forge/fixtures/heal/a7-dry-run.diff.txt +179 -0
- package/cli/forge/fixtures/heal/cli/commit/commit-facts.js.txt +49 -0
- package/cli/forge/fixtures/heal/cli/doctor/check-host.js.txt +117 -0
- package/cli/forge/fixtures/heal/cli/doctor/kit-locate.js.txt +42 -0
- package/cli/forge/fixtures/heal/cli/hooks/guard-paths.js.txt +80 -0
- package/cli/forge/fixtures/heal/cli/hooks/project-status.js.txt +62 -0
- package/cli/forge/fixtures/heal/cli/main.js.txt +169 -0
- package/cli/forge/fixtures/heal/cli/mcp/context.js.txt +81 -0
- package/cli/forge/fixtures/heal/cli/mcp/installer-report.js.txt +47 -0
- package/cli/forge/fixtures/heal/cli/path-scope.js.txt +169 -0
- package/cli/forge/fixtures/heal/cli/project-detector.js.txt +364 -0
- package/cli/forge/fixtures/heal/cli/project-markers.js.txt +42 -0
- package/cli/forge/fixtures/heal/cli/team/coordination-root.js.txt +161 -0
- package/cli/forge/fixtures/heal/cli/team/usage-reader.js.txt +109 -0
- package/cli/forge/fixtures/heal/cli/test-slots.js.txt +129 -0
- package/cli/forge/fixtures/social-gh.js.txt +131 -0
- package/cli/forge/fixtures/team-flags.js.txt +214 -0
- package/cli/forge/fold.js +199 -0
- package/cli/forge/forge-groups.js +200 -0
- package/cli/forge/forge-report.js +73 -0
- package/cli/forge/fuzz/binding-hook.js +36 -0
- package/cli/forge/fuzz/choices.js +40 -0
- package/cli/forge/fuzz/classes.js +41 -0
- package/cli/forge/fuzz/coverage.js +26 -0
- package/cli/forge/fuzz/gen-alias.js +61 -0
- package/cli/forge/fuzz/gen-control.js +73 -0
- package/cli/forge/fuzz/gen-kit.js +75 -0
- package/cli/forge/fuzz/gen-logic.js +77 -0
- package/cli/forge/fuzz/gen-mixed.js +204 -0
- package/cli/forge/fuzz/gen-modules.js +80 -0
- package/cli/forge/fuzz/gen-objects.js +92 -0
- package/cli/forge/fuzz/gen-scope.js +131 -0
- package/cli/forge/fuzz/gen-templates.js +87 -0
- package/cli/forge/fuzz/harness.js +314 -0
- package/cli/forge/fuzz/pair-check.js +115 -0
- package/cli/forge/fuzz/resolve.js +32 -0
- package/cli/forge/fuzz/run.js +121 -0
- package/cli/forge/fuzz/sandbox.js +108 -0
- package/cli/forge/fuzz/seeds.js +119 -0
- package/cli/forge/fuzz/slow-shard.js +60 -0
- package/cli/forge/fuzz/template-oracle.js +148 -0
- package/cli/forge/fuzz/transpile.js +61 -0
- package/cli/forge/gates.js +115 -0
- package/cli/forge/group-shape.js +137 -0
- package/cli/forge/group-store.js +160 -0
- package/cli/forge/group.js +280 -0
- package/cli/forge/gt-sandbox.js +83 -0
- package/cli/forge/gt-scaffold.js +110 -0
- package/cli/forge/hash-labels.js +117 -0
- package/cli/forge/hash.js +119 -0
- package/cli/forge/heal-apply.js +170 -0
- package/cli/forge/heal-cli.js +132 -0
- package/cli/forge/heal-leases.js +52 -0
- package/cli/forge/heal-locate.js +70 -0
- package/cli/forge/heal-match.js +208 -0
- package/cli/forge/heal-ops.js +197 -0
- package/cli/forge/heal-plan.js +143 -0
- package/cli/forge/heal-sandbox.js +126 -0
- package/cli/forge/heal-specs.js +80 -0
- package/cli/forge/heal-store.js +80 -0
- package/cli/forge/heal-text.js +60 -0
- package/cli/forge/heal-typecheck.js +108 -0
- package/cli/forge/heal-undo.js +74 -0
- package/cli/forge/heal-verify.js +148 -0
- package/cli/forge/hole-kinds.js +126 -0
- package/cli/forge/inline-mode.js +6 -0
- package/cli/forge/inline-on.setup.js +4 -0
- package/cli/forge/lgg-stage.js +125 -0
- package/cli/forge/lgg.js +197 -0
- package/cli/forge/library-match.js +74 -0
- package/cli/forge/murmur.js +86 -0
- package/cli/forge/naming.js +101 -0
- package/cli/forge/pattern-schema-ddl.js +157 -0
- package/cli/forge/placement.js +165 -0
- package/cli/forge/rank.js +174 -0
- package/cli/forge/refine.js +93 -0
- package/cli/forge/rejected-members.js +92 -0
- package/cli/forge/rejects.js +77 -0
- package/cli/forge/root-shapes.js +84 -0
- package/cli/forge/run-cache.js +145 -0
- package/cli/forge/sibling-blocks.js +41 -0
- package/cli/forge/siblings.js +140 -0
- package/cli/forge/store.js +180 -0
- package/cli/forge/template-normalize.js +209 -0
- package/cli/forge/template-roles.js +86 -0
- package/cli/forge/template-units.js +148 -0
- package/cli/forge/templates.js +42 -0
- package/cli/forge/unify-step.js +65 -0
- package/cli/forge/unit-floor.js +74 -0
- package/cli/forge/unit-hash.js +229 -0
- package/cli/forge/unit-trees.js +153 -0
- package/cli/forge/units.js +261 -0
- package/cli/forge/windows.js +129 -0
- package/cli/friction/friction-cli.js +71 -0
- package/cli/friction/friction-export.js +54 -0
- package/cli/friction/friction-log.js +54 -0
- package/cli/friction/usage-classify.js +56 -0
- package/cli/friction/usage-report.js +86 -0
- package/cli/friction/wrong-call.js +12 -0
- package/cli/fs-json.js +17 -0
- package/cli/generator-compact.js +55 -0
- package/cli/generator-help.js +16 -15
- package/cli/generator-indexer.js +2 -1
- package/cli/generator-jig-cli.js +11 -7
- package/cli/generator-jig.js +38 -33
- package/cli/generator-templates/archetypes/index.js +30 -13
- package/cli/generator-templates/archetypes/vector-matcher.js +8 -4
- package/cli/generator-templates/compact.js +4 -2
- package/cli/generator-templates/controller-converters.js +23 -14
- package/cli/generator-templates/controller.js +10 -5
- package/cli/generator-templates/hooks.js +4 -2
- package/cli/generator-templates/naming.js +2 -1
- package/cli/generator-templates/react.js +2 -1
- package/cli/generator-templates/specs.js +4 -2
- package/cli/generator-templates/svelte.js +4 -2
- package/cli/generator-templates/types.js +6 -3
- package/cli/generator-templates/views.js +4 -2
- package/cli/generator-templates/vue.js +4 -2
- package/cli/generator-writes.js +24 -0
- package/cli/generator.d.ts +1 -1
- package/cli/generator.js +86 -127
- package/cli/git-file-listing.js +69 -0
- package/cli/help-args.js +18 -0
- package/cli/help.d.ts +7 -3
- package/cli/help.js +94 -149
- package/cli/hooks/bypass-log.js +44 -0
- package/cli/hooks/claude-post-edit.js +79 -0
- package/cli/hooks/claude-pre-tool.js +178 -0
- package/cli/hooks/claude-settings-merge.js +101 -0
- package/cli/hooks/dispatch-identity.js +125 -0
- package/cli/hooks/entry.js +181 -0
- package/cli/hooks/foreign-identity.js +60 -0
- package/cli/hooks/guard-args.js +55 -0
- package/cli/hooks/guard-cases.js +94 -0
- package/cli/hooks/guard-config.js +43 -0
- package/cli/hooks/guard-invocation.js +106 -0
- package/cli/hooks/guard-paths.js +80 -0
- package/cli/hooks/guard-route.js +211 -0
- package/cli/hooks/guard-rules-nudge.js +37 -0
- package/cli/hooks/guard-rules-reads.js +66 -0
- package/cli/hooks/guard-rules-shell.js +239 -0
- package/cli/hooks/guard-rules.js +114 -0
- package/cli/hooks/hook-commands.js +21 -0
- package/cli/hooks/install-hooks-apply.js +36 -0
- package/cli/hooks/install-hooks-cli.js +100 -0
- package/cli/hooks/install-hooks-config.js +48 -0
- package/cli/hooks/install-hooks-pins.js +66 -0
- package/cli/hooks/install-hooks-plan.js +56 -0
- package/cli/hooks/install-hooks-status.js +7 -0
- package/cli/hooks/interpreter-writes.js +195 -0
- package/cli/hooks/launcher.js +60 -0
- package/cli/hooks/mcp-json-merge.js +39 -0
- package/cli/hooks/native-edit-lock.js +40 -0
- package/cli/hooks/native-tool-policy.js +152 -0
- package/cli/hooks/out-of-band-edits.js +141 -0
- package/cli/hooks/post-edit-scope.js +43 -0
- package/cli/hooks/project-status.js +59 -0
- package/cli/hooks/repo-membership.js +32 -0
- package/cli/hooks/run-hook.js +79 -0
- package/cli/hooks/session-identity.js +153 -0
- package/cli/hooks/session-start.js +50 -0
- package/cli/hooks/shell-lexer-readers.js +76 -0
- package/cli/hooks/shell-lexer-state.js +59 -0
- package/cli/hooks/shell-lexer.js +110 -0
- package/cli/hooks/shell-parse.js +232 -0
- package/cli/hooks/statusline.js +27 -0
- package/cli/hooks/xatoms-hints.js +38 -0
- package/cli/host-protocol.js +109 -0
- package/cli/host-shims.js +9 -8
- package/cli/index-admission.js +41 -0
- package/cli/index-freshness.js +83 -0
- package/cli/index-row-check.js +58 -0
- package/cli/index.js +52 -150
- package/cli/installer-templates.js +67 -75
- package/cli/installer.d.ts +16 -1
- package/cli/installer.js +159 -58
- package/cli/languages.js +8 -4
- package/cli/lattice-directives.js +24 -0
- package/cli/lattice-payload.js +34 -0
- package/cli/{tesseract-state.js → lattice-state.js} +8 -4
- package/cli/lease-view.js +48 -0
- package/cli/library/entry-fp.js +42 -0
- package/cli/library/entry-schema.js +90 -0
- package/cli/library/library-tasks.js +25 -0
- package/cli/library/registry.js +56 -0
- package/cli/library/reverify.js +56 -0
- package/cli/library/verify-checks.js +89 -0
- package/cli/library/verify.js +81 -0
- package/cli/license-config.js +124 -0
- package/cli/license.js +168 -135
- package/cli/line-count.js +23 -0
- package/cli/literal-replace.js +107 -0
- package/cli/main.js +166 -0
- package/cli/mcp/antigravity.js +11 -9
- package/cli/mcp/batch.js +59 -0
- package/cli/mcp/call-args.js +75 -0
- package/cli/mcp/call-effects.js +57 -0
- package/cli/mcp/call-scope.js +70 -62
- package/cli/mcp/context.js +81 -0
- package/cli/mcp/envelope.js +62 -0
- package/cli/mcp/fingerprint.js +26 -0
- package/cli/mcp/fresh-entry.js +34 -0
- package/cli/mcp/fresh-protocol.js +37 -0
- package/cli/mcp/fresh-runner.js +40 -0
- package/cli/mcp/help.js +53 -0
- package/cli/mcp/index.js +9 -5
- package/cli/mcp/inflight.js +47 -0
- package/cli/mcp/installer-jsonc.js +64 -0
- package/cli/mcp/installer-package.js +54 -0
- package/cli/mcp/installer-report.js +47 -0
- package/cli/mcp/installer-write.js +117 -0
- package/cli/mcp/installer.js +88 -187
- package/cli/mcp/manifests-analysis.js +156 -0
- package/cli/mcp/manifests-runners.js +48 -0
- package/cli/mcp/manifests-team.js +100 -0
- package/cli/mcp/manifests.js +69 -309
- package/cli/mcp/offload-worker.js +11 -0
- package/cli/mcp/offload.js +18 -0
- package/cli/mcp/patterns-cli.js +76 -0
- package/cli/mcp/patterns-forge-cli.js +120 -0
- package/cli/mcp/prompts.js +13 -10
- package/cli/mcp/resources.js +8 -35
- package/cli/mcp/roots.js +46 -0
- package/cli/mcp/scorecard-worker.js +7 -0
- package/cli/mcp/scorecard.js +42 -0
- package/cli/mcp/server-info.js +28 -0
- package/cli/mcp/server.js +91 -291
- package/cli/mcp/spec-harness.js +62 -0
- package/cli/mcp/stale-exec.js +48 -0
- package/cli/mcp/staleness.js +26 -0
- package/cli/mcp/stdio.js +141 -0
- package/cli/mcp/tool-call.js +73 -0
- package/cli/mcp/tools-audit-feed.js +33 -0
- package/cli/mcp/tools-audit.js +13 -7
- package/cli/mcp/tools-generate.js +3 -3
- package/cli/mcp/tools-lazy.js +39 -0
- package/cli/mcp/tools-patch.js +93 -21
- package/cli/mcp/tools-patterns.js +6 -3
- package/cli/mcp/tools-project.js +8 -4
- package/cli/mcp/tools-q-modes.js +15 -14
- package/cli/mcp/tools-q.js +94 -33
- package/cli/mcp/tools-read.js +30 -80
- package/cli/mcp/tools-team-feed.js +10 -8
- package/cli/mcp/tools-team-locks.js +22 -10
- package/cli/mcp/tools-team-mailbox.js +8 -7
- package/cli/mcp/tools-team-tasks.js +125 -38
- package/cli/mcp/tools-team.js +14 -7
- package/cli/mcp/tools-verify.js +44 -15
- package/cli/mcp/tools-write.js +11 -16
- package/cli/mcp/tools.js +202 -68
- package/cli/mcp/worker-run.js +24 -0
- package/cli/missing-imports.js +52 -0
- package/cli/mutation-args.js +96 -0
- package/cli/mutators.js +164 -61
- package/cli/navigator-actions.js +19 -13
- package/cli/navigator-banner-helpers.js +1 -26
- package/cli/navigator-banner.js +5 -3
- package/cli/navigator-conversion.js +23 -12
- package/cli/navigator-grades.js +70 -35
- package/cli/navigator-guide.js +13 -11
- package/cli/navigator-menu.js +80 -166
- package/cli/navigator-paged.js +15 -8
- package/cli/navigator-sections.js +32 -0
- package/cli/navigator-share.js +53 -39
- package/cli/navigator.d.ts +25 -5
- package/cli/navigator.js +14 -41
- package/cli/network-policy.js +72 -0
- package/cli/network-recorder.fixture.mjs +35 -0
- package/cli/outline/ast-outline.js +120 -0
- package/cli/outline/style-outline.js +42 -0
- package/cli/outline/vue-outline.js +88 -0
- package/cli/patcher-cli.js +255 -0
- package/cli/patcher.d.ts +55 -24
- package/cli/patcher.js +167 -358
- package/cli/path-scope.js +78 -22
- package/cli/patterns/fixtures/gt/A1.txt +109 -0
- package/cli/patterns/fixtures/gt/A10.txt +13 -0
- package/cli/patterns/fixtures/gt/A11.txt +10 -0
- package/cli/patterns/fixtures/gt/A12.txt +29 -0
- package/cli/patterns/fixtures/gt/A13.txt +39 -0
- package/cli/patterns/fixtures/gt/A14.txt +45 -0
- package/cli/patterns/fixtures/gt/A15.txt +70 -0
- package/cli/patterns/fixtures/gt/A16.txt +59 -0
- package/cli/patterns/fixtures/gt/A17.txt +29 -0
- package/cli/patterns/fixtures/gt/A18.txt +9 -0
- package/cli/patterns/fixtures/gt/A19.txt +29 -0
- package/cli/patterns/fixtures/gt/A2.txt +28 -0
- package/cli/patterns/fixtures/gt/A20.txt +83 -0
- package/cli/patterns/fixtures/gt/A21.txt +138 -0
- package/cli/patterns/fixtures/gt/A22.txt +32 -0
- package/cli/patterns/fixtures/gt/A23.txt +37 -0
- package/cli/patterns/fixtures/gt/A24.txt +67 -0
- package/cli/patterns/fixtures/gt/A25.txt +41 -0
- package/cli/patterns/fixtures/gt/A26.txt +29 -0
- package/cli/patterns/fixtures/gt/A3.txt +17 -0
- package/cli/patterns/fixtures/gt/A4.txt +44 -0
- package/cli/patterns/fixtures/gt/A5.txt +32 -0
- package/cli/patterns/fixtures/gt/A6.txt +15 -0
- package/cli/patterns/fixtures/gt/A7.txt +79 -0
- package/cli/patterns/fixtures/gt/A8.txt +41 -0
- package/cli/patterns/fixtures/gt/A9.txt +42 -0
- package/cli/patterns/fixtures/gt/B1.txt +11 -0
- package/cli/patterns/fixtures/gt/B10.txt +41 -0
- package/cli/patterns/fixtures/gt/B11.txt +7 -0
- package/cli/patterns/fixtures/gt/B2.txt +19 -0
- package/cli/patterns/fixtures/gt/B3.txt +70 -0
- package/cli/patterns/fixtures/gt/B4.txt +55 -0
- package/cli/patterns/fixtures/gt/B5.txt +21 -0
- package/cli/patterns/fixtures/gt/B6.txt +15 -0
- package/cli/patterns/fixtures/gt/B7.txt +24 -0
- package/cli/patterns/fixtures/gt/B8.txt +40 -0
- package/cli/patterns/fixtures/gt/B9.txt +18 -0
- package/cli/patterns/fixtures/gt/C1.txt +26 -0
- package/cli/patterns/fixtures/gt/C2.txt +33 -0
- package/cli/patterns/fixtures/gt/C3.txt +26 -0
- package/cli/patterns/fixtures/gt/C4.txt +7 -0
- package/cli/patterns/fixtures/gt/C5.txt +29 -0
- package/cli/patterns/fixtures/gt/C6.txt +7 -0
- package/cli/patterns/fixtures/gt/C7.txt +18 -0
- package/cli/patterns/fixtures/gt/labels.json +1837 -0
- package/cli/patterns/gt-build.js +55 -0
- package/cli/patterns/gt-locations.js +76 -0
- package/cli/patterns/gt-resolve.js +66 -0
- package/cli/patterns/gt-score-cli.js +80 -0
- package/cli/patterns/gt-score.js +188 -0
- package/cli/patterns/gt-text.js +79 -0
- package/cli/pillars-wizard.js +53 -24
- package/cli/pillars-write-guard.js +4 -1
- package/cli/postinstall.js +22 -19
- package/cli/project-detector.js +60 -35
- package/cli/project-markers.js +42 -0
- package/cli/project-scope.js +20 -0
- package/cli/read-revision.js +70 -0
- package/cli/reader-cards-gate.js +29 -0
- package/cli/reader-cards.js +153 -0
- package/cli/reader-cli.js +45 -18
- package/cli/reader-format.js +48 -0
- package/cli/reader-logic.js +128 -250
- package/cli/reader.js +210 -221
- package/cli/request-context.js +9 -0
- package/cli/result-status.js +23 -0
- package/cli/rules.js +81 -0
- package/cli/scaffold.js +80 -51
- package/cli/scan-ignore.js +12 -0
- package/cli/search-args.js +102 -0
- package/cli/search-ast-module.js +103 -0
- package/cli/search-ast.js +75 -112
- package/cli/search-commands-blast.js +70 -0
- package/cli/search-commands-graph.js +57 -105
- package/cli/search-commands-hazards.js +105 -0
- package/cli/search-commands-literal.js +102 -0
- package/cli/search-commands-semantic.js +39 -27
- package/cli/search-commands.js +93 -186
- package/cli/search-db.js +52 -252
- package/cli/search-debug.js +13 -0
- package/cli/search-graph-edges.js +112 -0
- package/cli/search-index-meta.js +66 -0
- package/cli/search-index-write.js +153 -0
- package/cli/search-literal-files.js +64 -0
- package/cli/search-literal.js +150 -0
- package/cli/search-output.js +88 -0
- package/cli/search-queries-graph.js +120 -193
- package/cli/search-queries-semantic.js +41 -14
- package/cli/search-queries-similar.js +2 -1
- package/cli/search-queries.js +46 -21
- package/cli/search-query-view.js +67 -0
- package/cli/search-rank.js +54 -0
- package/cli/search-replace-blocks.js +120 -0
- package/cli/search-resolve.js +52 -0
- package/cli/search-root.js +78 -0
- package/cli/search-scan.js +102 -0
- package/cli/search-schema-ddl.js +172 -0
- package/cli/search-schema.js +135 -220
- package/cli/search-session.js +11 -0
- package/cli/search-sync-paths.js +78 -0
- package/cli/search-sync-plan.js +63 -0
- package/cli/search-sync-rows.js +96 -0
- package/cli/search-sync.js +128 -0
- package/cli/search-tokenizer.js +8 -4
- package/cli/search.d.ts +26 -5
- package/cli/search.js +156 -410
- package/cli/sfc/component-resolver.js +96 -0
- package/cli/sfc/import-coverage.js +24 -0
- package/cli/sfc/module-aliases.js +102 -0
- package/cli/sfc/script-asts.js +51 -0
- package/cli/sfc/sfc-metadata.js +104 -0
- package/cli/sfc/sfc-parse.js +101 -0
- package/cli/sfc/svelte-parse.js +46 -0
- package/cli/sfc/template-walk.js +78 -0
- package/cli/sfc-scripts.js +60 -0
- package/cli/share-consent.js +49 -0
- package/cli/share-outcome.js +57 -0
- package/cli/silence-warnings.js +2 -1
- package/cli/source-parse.js +130 -0
- package/cli/spec-isolated-home.js +17 -0
- package/cli/spec-support/import-trace.mjs +22 -0
- package/cli/spec-support/run-cli.js +58 -0
- package/cli/sqlite-memory.js +47 -0
- package/cli/status-command.js +107 -0
- package/cli/symbol-locator.js +121 -0
- package/cli/team/agent-identity.js +58 -0
- package/cli/team/audit-run-adoption.js +117 -0
- package/cli/team/audit-run-bypass.js +177 -0
- package/cli/team/audit-run-calls.js +108 -0
- package/cli/team/audit-run-db.js +181 -0
- package/cli/team/audit-run-identity.js +80 -0
- package/cli/team/audit-run-invocations.js +130 -0
- package/cli/team/audit-run-protocol.js +258 -0
- package/cli/team/audit-run-render.js +107 -0
- package/cli/team/audit-run-shas.js +179 -0
- package/cli/team/audit-run.js +203 -0
- package/cli/team/claim-ignore-deps.js +16 -0
- package/cli/team/coordination-busy.js +164 -0
- package/cli/team/coordination-db.js +85 -0
- package/cli/team/coordination-fixture.js +53 -0
- package/cli/team/coordination-repos.js +72 -0
- package/cli/team/coordination-root.js +161 -0
- package/cli/team/coordination-target.js +114 -0
- package/cli/team/dispatch-templates/dispatch-v1.js +228 -0
- package/cli/team/edit-shas.js +45 -0
- package/cli/team/lease-activity.js +130 -0
- package/cli/team/lease-cap.js +67 -0
- package/cli/team/lease-contention.js +30 -0
- package/cli/team/lease-key.js +46 -0
- package/cli/team/lease-lapse.js +83 -0
- package/cli/team/lease-reacquire.js +99 -0
- package/cli/team/lease-renew.js +97 -0
- package/cli/team/lease-roots.js +30 -0
- package/cli/team/lease-waiter-notice.js +48 -0
- package/cli/team/staged-leases.js +64 -0
- package/cli/team/task-completion-output.js +78 -0
- package/cli/team/task-detail-sections.js +86 -0
- package/cli/team/task-list-view.js +10 -1
- package/cli/team/task-ref.js +73 -0
- package/cli/team/task-target.js +53 -0
- package/cli/team/task-tier.js +17 -0
- package/cli/team/team-brief.js +78 -0
- package/cli/team/team-commands-board.js +118 -0
- package/cli/team/team-commands-dispatch.js +85 -0
- package/cli/team/team-commands-lock-staged.js +87 -0
- package/cli/team/team-commands-lock-views.js +144 -0
- package/cli/team/team-commands-lock.js +115 -26
- package/cli/team/team-commands-migrate.js +171 -0
- package/cli/team/team-commands-profile.js +44 -0
- package/cli/team/team-commands-repo.js +114 -0
- package/cli/team/team-commands-task.js +312 -0
- package/cli/team/team-commands-tokens.js +57 -0
- package/cli/team/team-commands-triage.js +43 -0
- package/cli/team/team-commands-vds.js +2 -1
- package/cli/team/team-commands.js +108 -463
- package/cli/team/team-db-agents.js +12 -6
- package/cli/team/team-db-feed.js +25 -13
- package/cli/team/team-db-lock-promotion.js +95 -51
- package/cli/team/team-db-locks.js +167 -35
- package/cli/team/team-db-mailbox.js +15 -8
- package/cli/team/team-db-readonly.js +76 -0
- package/cli/team/team-db-task-helpers.js +68 -19
- package/cli/team/team-db-tasks.js +21 -9
- package/cli/team/team-db-transaction.js +20 -5
- package/cli/team/team-db.js +11 -4
- package/cli/team/team-dispatch-batches.js +271 -0
- package/cli/team/team-dispatch-prompts.js +152 -0
- package/cli/team/team-dispatch-render.js +154 -0
- package/cli/team/team-dispatch-run-cli.js +154 -0
- package/cli/team/team-dispatch-runs.js +155 -0
- package/cli/team/team-dispatch-script.js +67 -0
- package/cli/team/team-dispatch-select.js +220 -0
- package/cli/team/team-dispatch-v2-fixture.js +62 -0
- package/cli/team/team-dispatch-v2.js +207 -0
- package/cli/team/team-dispatch.js +229 -0
- package/cli/team/team-dispatcher-authority.js +43 -0
- package/cli/team/team-flags.js +222 -48
- package/cli/team/team-format.js +80 -26
- package/cli/team/team-handoff-hint.js +9 -0
- package/cli/team/team-migrate-agents.js +52 -0
- package/cli/team/team-migrate-apply.js +178 -0
- package/cli/team/team-migrate-junk.js +55 -0
- package/cli/team/team-migrate-metadata.js +80 -0
- package/cli/team/team-migrate-paths.js +50 -0
- package/cli/team/team-migrate-plan.js +85 -0
- package/cli/team/team-migrate-report.js +89 -0
- package/cli/team/team-migrate-tables.js +85 -0
- package/cli/team/team-migrate.js +193 -0
- package/cli/team/team-needs.js +99 -0
- package/cli/team/team-profile-format.js +126 -0
- package/cli/team/team-profile.js +144 -0
- package/cli/team/team-projects-coordinator.js +54 -33
- package/cli/team/team-projects-format.js +8 -4
- package/cli/team/team-projects-memory.js +6 -3
- package/cli/team/team-projects.js +2 -1
- package/cli/team/team-release-train.js +2 -1
- package/cli/team/team-route.js +132 -0
- package/cli/team/team-schema-repo.js +48 -0
- package/cli/team/team-schema-usage.js +25 -0
- package/cli/team/team-schema-vds.js +7 -3
- package/cli/team/team-schema.js +24 -4
- package/cli/team/team-task-close.js +132 -0
- package/cli/team/team-task-guard.js +24 -0
- package/cli/team/team-task-handoff.js +122 -0
- package/cli/team/team-task-ownership.js +74 -0
- package/cli/team/team-task-rules.js +21 -0
- package/cli/team/team-task-uncommitted.js +49 -0
- package/cli/team/team-telemetry.js +44 -32
- package/cli/team/team-tokens.js +4 -1
- package/cli/team/team-triage-generate.js +212 -0
- package/cli/team/team-triage-log.js +11 -0
- package/cli/team/team-triage-verify.js +153 -0
- package/cli/team/team-triage.js +92 -339
- package/cli/team/team-vds.js +2 -1
- package/cli/team/usage-compute.js +70 -0
- package/cli/team/usage-pricing.js +62 -0
- package/cli/team/usage-reader.js +106 -0
- package/cli/team/usage-render.js +72 -0
- package/cli/team/usage-store.js +56 -0
- package/cli/team/usage-transcript.js +127 -0
- package/cli/team/write-lock-guard.js +48 -0
- package/cli/telemetry/call-ledger.js +264 -0
- package/cli/telemetry/call-schema.js +53 -0
- package/cli/telemetry/savings-dbs.js +111 -0
- package/cli/telemetry/savings-render.js +68 -0
- package/cli/telemetry/savings-report.js +101 -0
- package/cli/telemetry/savings-routing.js +66 -0
- package/cli/telemetry/savings-tooling.js +140 -0
- package/cli/terminal.js +38 -40
- package/cli/tesseract-manifesto.js +2 -17
- package/cli/tesseract.js +8 -21
- package/cli/test-audit.js +218 -0
- package/cli/test-changes.js +60 -0
- package/cli/test-command.js +201 -0
- package/cli/test-depth.js +43 -0
- package/cli/test-failures.js +170 -0
- package/cli/test-graph-open.js +150 -0
- package/cli/test-graph.js +188 -0
- package/cli/test-lanes.js +117 -0
- package/cli/test-output.js +155 -0
- package/cli/test-paths.js +51 -0
- package/cli/test-profile.js +64 -0
- package/cli/test-report.js +112 -0
- package/cli/test-run.js +53 -0
- package/cli/test-scope.js +55 -0
- package/cli/test-select.js +107 -0
- package/cli/test-slots.js +276 -0
- package/cli/test-workers.js +45 -0
- package/cli/test-workspace.js +83 -0
- package/cli/theme.js +6 -3
- package/cli/timers.js +6 -0
- package/cli/trend.js +10 -5
- package/cli/tsconfig-shape.js +20 -0
- package/cli/tty-banner.js +11 -0
- package/cli/typecheck-audit.js +146 -0
- package/cli/typecheck-command.js +94 -0
- package/cli/typecheck-sandbox.js +93 -0
- package/cli/ui-actions-codebase.js +20 -7
- package/cli/ui-actions-helpers.js +9 -0
- package/cli/ui-actions-studio.js +11 -7
- package/cli/ui-actions-tasks.js +3 -2
- package/cli/ui-actions-vds.js +2 -1
- package/cli/ui-actions.js +4 -2
- package/cli/ui-attention.js +28 -12
- package/cli/ui-auth-hosts.js +46 -0
- package/cli/ui-auth.js +89 -0
- package/cli/ui-client-cert.js +2 -1
- package/cli/ui-client-filetree.js +2 -2
- package/cli/ui-db-studio.js +23 -33
- package/cli/ui-dev-watcher.js +2 -1
- package/cli/ui-forum-data.js +45 -46
- package/cli/ui-forum-topics.js +6 -3
- package/cli/ui-fresh-index.js +11 -0
- package/cli/ui-handlers.js +6 -6
- package/cli/ui-html.js +6 -12
- package/cli/ui-index.html +3 -3
- package/cli/ui-route-helpers.js +10 -0
- package/cli/ui-server-routes.js +15 -17
- package/cli/ui-server.js +49 -50
- package/cli/ui-sql-guard.js +76 -0
- package/cli/ui-sql-mask.js +61 -0
- package/cli/ui-sse.js +5 -4
- package/cli/ui-template-filetree.js +4 -4
- package/cli/ui-template-kanban.js +4 -7
- package/cli/verify-changed.js +43 -0
- package/cli/verify-helpers.js +21 -207
- package/cli/verify-lint.js +54 -20
- package/cli/verify-report.js +117 -0
- package/cli/verify-steps.js +71 -0
- package/cli/verify.js +111 -372
- package/cli/wait-command.js +147 -0
- package/cli/workspace-run.js +153 -0
- package/cli/workspace.js +147 -0
- package/cli/write-append.js +28 -0
- package/library/node-js/is-path-inside/entry.json +57 -0
- package/library/node-js/is-path-inside/negative/path-scope.js.txt +13 -0
- package/library/node-js/is-path-inside/piece.js +15 -0
- package/library/node-js/is-path-inside/piece.spec.js +38 -0
- package/library/node-js/read-json-or/entry.json +70 -0
- package/library/node-js/read-json-or/negative/ratchet.js.txt +14 -0
- package/library/node-js/read-json-or/negative/workspace.js.txt +8 -0
- package/library/node-js/read-json-or/piece.js +17 -0
- package/library/node-js/read-json-or/piece.spec.js +36 -0
- package/library/vue-ts/nullable-timer-handle/ambient.d.ts +5 -0
- package/library/vue-ts/nullable-timer-handle/entry.json +84 -0
- package/library/vue-ts/nullable-timer-handle/negative/const-alias.ts.txt +17 -0
- package/library/vue-ts/nullable-timer-handle/negative/inline-guard.ts.txt +15 -0
- package/library/vue-ts/nullable-timer-handle/piece.spec.js +48 -0
- package/library/vue-ts/nullable-timer-handle/piece.ts +41 -0
- package/package.json +9 -3
- package/scripts/check-framework-generation.mjs +32 -12
- package/scripts/direct-run.mjs +9 -0
- package/scripts/pre-commit.sh +48 -74
- package/scripts/publish-both.mjs +24 -16
- package/scripts/publish-summary.mjs +14 -0
- package/scripts/postinstall.mjs +0 -27
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
// Audit feed: flat, dashboard-ready rows built from .chemx/history.json and .chemx/status.json.
|
|
2
|
+
// The builders are pure (they take parsed data); readAuditFeed reads the files. Nothing here
|
|
3
|
+
// runs an audit. Every row carries ruleset/scoreModel so consumers can flag scores that a
|
|
4
|
+
// rules change makes incomparable.
|
|
5
|
+
import { getAuditHistory } from './history.js';
|
|
6
|
+
import { readAuditStatus } from './status-file.js';
|
|
7
|
+
|
|
8
|
+
export const FEED_VIEWS = ['history', 'pillars', 'scopes'];
|
|
9
|
+
|
|
10
|
+
const orNull = (value) => value ?? null;
|
|
11
|
+
|
|
12
|
+
const isInScope = (rowScope, scope) => {
|
|
13
|
+
const hasScopeFilter = typeof scope === 'string' && scope.length > 0;
|
|
14
|
+
if (!hasScopeFilter) return true;
|
|
15
|
+
const isExact = rowScope === scope;
|
|
16
|
+
const isNested = typeof rowScope === 'string' && rowScope.startsWith(`${scope}/`);
|
|
17
|
+
return isExact || isNested;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const isSince = (timestamp, since) => {
|
|
21
|
+
const hasSince = Boolean(since);
|
|
22
|
+
if (!hasSince) return true;
|
|
23
|
+
return new Date(timestamp).getTime() >= new Date(since).getTime();
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const matchesFilters = (snapshot, { scope, since, fullOnly = false } = {}) => {
|
|
27
|
+
const isPartialExcluded = fullOnly && Boolean(snapshot.isPartial);
|
|
28
|
+
if (isPartialExcluded) return false;
|
|
29
|
+
return isInScope(orNull(snapshot.scope), scope) && isSince(snapshot.timestamp, since);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const runIdentity = (snapshot) => ({
|
|
33
|
+
runId: orNull(snapshot.id),
|
|
34
|
+
timestamp: orNull(snapshot.timestamp),
|
|
35
|
+
scope: orNull(snapshot.scope),
|
|
36
|
+
isPartial: Boolean(snapshot.isPartial),
|
|
37
|
+
ruleset: orNull(snapshot.ruleset)
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
const toHistoryRow = (snapshot) => {
|
|
41
|
+
const { health = {}, aiSlop = {}, metrics = {}, violations = {}, monoliths = {} } = snapshot;
|
|
42
|
+
return {
|
|
43
|
+
...runIdentity(snapshot),
|
|
44
|
+
scoreModel: orNull(snapshot.scoreModel),
|
|
45
|
+
healthScore: orNull(health.score),
|
|
46
|
+
grade: orNull(health.grade),
|
|
47
|
+
aiSlopScore: orNull(aiSlop.score),
|
|
48
|
+
aiSlopGrade: orNull(aiSlop.grade),
|
|
49
|
+
files: orNull(metrics.scannedFiles),
|
|
50
|
+
loc: orNull(metrics.totalLoc),
|
|
51
|
+
violations: orNull(violations.total),
|
|
52
|
+
critical: orNull(violations.critical),
|
|
53
|
+
high: orNull(violations.high),
|
|
54
|
+
medium: orNull(violations.medium),
|
|
55
|
+
low: orNull(violations.low),
|
|
56
|
+
monoliths: orNull(monoliths.total)
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const historyRows = (history = [], filters = {}) =>
|
|
61
|
+
history.filter((snapshot) => matchesFilters(snapshot, filters)).map(toHistoryRow);
|
|
62
|
+
|
|
63
|
+
export const pillarRows = (history = [], filters = {}) =>
|
|
64
|
+
history
|
|
65
|
+
.filter((snapshot) => matchesFilters(snapshot, filters))
|
|
66
|
+
.flatMap((snapshot) => Object.entries(snapshot.pillars ?? {}).map(([pillar, data]) => ({
|
|
67
|
+
...runIdentity(snapshot),
|
|
68
|
+
pillar,
|
|
69
|
+
status: orNull(data.status),
|
|
70
|
+
violations: orNull(data.violations),
|
|
71
|
+
critical: orNull(data.critical)
|
|
72
|
+
})));
|
|
73
|
+
|
|
74
|
+
const newestFullRunByScope = (history) => {
|
|
75
|
+
const byScope = new Map();
|
|
76
|
+
for (const snapshot of history) {
|
|
77
|
+
const hasScope = typeof snapshot.scope === 'string';
|
|
78
|
+
const isFullRun = hasScope && !snapshot.isPartial;
|
|
79
|
+
if (isFullRun) byScope.set(snapshot.scope, snapshot);
|
|
80
|
+
}
|
|
81
|
+
return byScope;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const countRunsByScope = (history) => {
|
|
85
|
+
const counts = new Map();
|
|
86
|
+
for (const snapshot of history) counts.set(snapshot.scope, (counts.get(snapshot.scope) ?? 0) + 1);
|
|
87
|
+
return counts;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
const toScopeRow = (scope, run, entry, runCount) => {
|
|
91
|
+
const runRow = run ? toHistoryRow(run) : null;
|
|
92
|
+
const gate = entry?.gate ?? {};
|
|
93
|
+
return {
|
|
94
|
+
scope,
|
|
95
|
+
runs: runCount,
|
|
96
|
+
runId: orNull(runRow?.runId),
|
|
97
|
+
lastFullRunAt: orNull(runRow?.timestamp),
|
|
98
|
+
ruleset: orNull(runRow?.ruleset ?? entry?.ruleset),
|
|
99
|
+
scoreModel: orNull(runRow?.scoreModel ?? entry?.scoreModel),
|
|
100
|
+
healthScore: orNull(runRow?.healthScore ?? entry?.health?.score),
|
|
101
|
+
grade: orNull(runRow?.grade ?? entry?.health?.grade),
|
|
102
|
+
aiSlopScore: orNull(runRow?.aiSlopScore),
|
|
103
|
+
files: orNull(runRow?.files),
|
|
104
|
+
loc: orNull(runRow?.loc),
|
|
105
|
+
violations: orNull(runRow?.violations),
|
|
106
|
+
critical: orNull(runRow?.critical ?? entry?.hazards?.critical),
|
|
107
|
+
high: orNull(runRow?.high ?? entry?.hazards?.high),
|
|
108
|
+
medium: orNull(runRow?.medium ?? entry?.hazards?.medium),
|
|
109
|
+
low: orNull(runRow?.low ?? entry?.hazards?.low),
|
|
110
|
+
monoliths: orNull(runRow?.monoliths),
|
|
111
|
+
gatePassing: orNull(gate.isPassing),
|
|
112
|
+
gateBasis: orNull(gate.basis),
|
|
113
|
+
gateRegressions: orNull(gate.regressions),
|
|
114
|
+
coverageAstPct: orNull(entry?.coverage?.astPct),
|
|
115
|
+
statusUpdatedAt: orNull(entry?.updatedAt),
|
|
116
|
+
statusIsPartial: Boolean(entry?.isPartialScan)
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
export const scopeRows = (history = [], status = null, filters = {}) => {
|
|
121
|
+
const statusScopes = status?.scopes ?? {};
|
|
122
|
+
const fullRuns = newestFullRunByScope(history);
|
|
123
|
+
const runCounts = countRunsByScope(history);
|
|
124
|
+
const scopes = new Set([...fullRuns.keys(), ...Object.keys(statusScopes)]);
|
|
125
|
+
for (const snapshot of history) {
|
|
126
|
+
const hasScope = typeof snapshot.scope === 'string';
|
|
127
|
+
if (hasScope) scopes.add(snapshot.scope);
|
|
128
|
+
}
|
|
129
|
+
return [...scopes]
|
|
130
|
+
.filter((scope) => isInScope(scope, filters.scope))
|
|
131
|
+
.sort()
|
|
132
|
+
.map((scope) => toScopeRow(scope, fullRuns.get(scope), statusScopes[scope], runCounts.get(scope) ?? 0));
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
const VIEW_BUILDERS = {
|
|
136
|
+
history: (history, _status, filters) => historyRows(history, filters),
|
|
137
|
+
pillars: (history, _status, filters) => pillarRows(history, filters),
|
|
138
|
+
scopes: (history, status, filters) => scopeRows(history, status, filters)
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
export const readAuditFeed = (view, { cwd = process.cwd(), ...filters } = {}) => {
|
|
142
|
+
const build = VIEW_BUILDERS[view];
|
|
143
|
+
const isKnownView = typeof build === 'function';
|
|
144
|
+
if (!isKnownView) throw new Error(`Unknown audit feed view "${view}". Use one of: ${FEED_VIEWS.join(', ')}.`);
|
|
145
|
+
return build(getAuditHistory(cwd), readAuditStatus(cwd), filters);
|
|
146
|
+
};
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one definition of "does this change add hazards beyond the baseline?" (#2546).
|
|
3
|
+
*
|
|
4
|
+
* The ratchet (chemx-ratchet.json) counts violations per rule at every severity and
|
|
5
|
+
* fails a rule whose count rises. This module applies the same rule to a change: for
|
|
6
|
+
* each file, a rule whose violation count is higher after the change than before it
|
|
7
|
+
* is an increase, at any severity. The staged-delta pre-commit gate, task done and
|
|
8
|
+
* the patch/write introducedViolations report all call it, and
|
|
9
|
+
* gate-parity.spec.js proves the verdicts match a ratchet verdict on the same change.
|
|
10
|
+
*
|
|
11
|
+
* Guarantee: a change that adds no violations of any rule passes. A legacy file with
|
|
12
|
+
* existing hazards is not blocked by them, only by new ones. Not covered: a hazard
|
|
13
|
+
* that moves between rules in the same count, which is neutral per rule.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const SEVERITY_ORDER = ['LOW', 'MEDIUM', 'HIGH', 'CRITICAL'];
|
|
17
|
+
|
|
18
|
+
const severityRank = (severity) => SEVERITY_ORDER.indexOf(severity);
|
|
19
|
+
|
|
20
|
+
export const countByRule = (violations = []) => {
|
|
21
|
+
const counts = new Map();
|
|
22
|
+
for (const v of violations) counts.set(v.rule, (counts.get(v.rule) ?? 0) + 1);
|
|
23
|
+
return counts;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const highestSeverity = (violations) => {
|
|
27
|
+
const ranked = violations.map((v) => v.severity);
|
|
28
|
+
return ranked.reduce((top, s) => (severityRank(s) > severityRank(top) ? s : top), 'LOW');
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/** Violations of one rule in `after` that have no same-hazard counterpart in `before`, capped at the count rise. */
|
|
32
|
+
const newSitesForRule = (rule, before, after, rise) => {
|
|
33
|
+
const unmatched = new Map();
|
|
34
|
+
for (const v of before.filter((b) => b.rule === rule)) unmatched.set(v.hazard, (unmatched.get(v.hazard) ?? 0) + 1);
|
|
35
|
+
const fresh = [];
|
|
36
|
+
for (const v of after.filter((a) => a.rule === rule)) {
|
|
37
|
+
const remaining = unmatched.get(v.hazard) ?? 0;
|
|
38
|
+
const isMatched = remaining > 0;
|
|
39
|
+
unmatched.set(v.hazard, isMatched ? remaining - 1 : 0);
|
|
40
|
+
if (!isMatched) fresh.push(v);
|
|
41
|
+
}
|
|
42
|
+
const isExact = fresh.length === rise;
|
|
43
|
+
return isExact ? fresh : fresh.slice(-rise);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Per-rule increases between two violation lists of the same file.
|
|
48
|
+
*
|
|
49
|
+
* @returns {{ rule: string, severity: string, before: number, after: number, sites: object[] }[]} sites are the new violation objects themselves
|
|
50
|
+
*/
|
|
51
|
+
export const diffViolations = (beforeViolations = [], afterViolations = []) => {
|
|
52
|
+
const before = countByRule(beforeViolations);
|
|
53
|
+
const after = countByRule(afterViolations);
|
|
54
|
+
const increases = [];
|
|
55
|
+
for (const [rule, count] of after.entries()) {
|
|
56
|
+
const was = before.get(rule) ?? 0;
|
|
57
|
+
const rise = count - was;
|
|
58
|
+
const isIncrease = rise > 0;
|
|
59
|
+
if (!isIncrease) continue;
|
|
60
|
+
const sites = newSitesForRule(rule, beforeViolations, afterViolations, rise);
|
|
61
|
+
const severity = highestSeverity(afterViolations.filter((v) => v.rule === rule));
|
|
62
|
+
increases.push({ rule, severity, before: was, after: count, sites });
|
|
63
|
+
}
|
|
64
|
+
return increases;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/** The individual violations a change introduced, for the patch/write report. */
|
|
68
|
+
export const introducedViolationsOf = (beforeViolations, afterViolations) =>
|
|
69
|
+
diffViolations(beforeViolations, afterViolations).flatMap((increase) => increase.sites);
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* @param {{ file: string, renamedFrom?: string, before: object[], after: object[] }[]} changes
|
|
73
|
+
* @returns {{ isPassing: boolean, files: { file: string, increases: object[] }[] }}
|
|
74
|
+
*/
|
|
75
|
+
export const evaluateChanges = (changes) => {
|
|
76
|
+
const files = [];
|
|
77
|
+
for (const change of changes) {
|
|
78
|
+
const increases = diffViolations(change.before, change.after);
|
|
79
|
+
const hasIncreases = increases.length > 0;
|
|
80
|
+
if (!hasIncreases) continue;
|
|
81
|
+
const renamed = change.renamedFrom ? { renamedFrom: change.renamedFrom } : {};
|
|
82
|
+
files.push({ file: change.file, ...renamed, increases });
|
|
83
|
+
}
|
|
84
|
+
return { isPassing: files.length === 0, files };
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
/** One `RULE@file:line [SEVERITY]` entry per new site, the exact list the hook prints. */
|
|
88
|
+
export const formatSites = (fileEntry) =>
|
|
89
|
+
fileEntry.increases.flatMap((increase) =>
|
|
90
|
+
increase.sites.map((site) => `${increase.rule}@${fileEntry.file}:${site.line} [${site.severity}]`)
|
|
91
|
+
);
|
|
@@ -1,30 +1,52 @@
|
|
|
1
|
-
import { readRatchet, evaluateRatchet } from './ratchet.js';
|
|
1
|
+
import { readRatchet, evaluateRatchet, recordAdoptedRules } from './ratchet.js';
|
|
2
2
|
|
|
3
3
|
const RATCHET_STATUSES = new Set(['pass', 'fail', 'invalid']);
|
|
4
4
|
|
|
5
5
|
const isSevereViolation = (v) => v.severity === 'CRITICAL' || v.severity === 'HIGH';
|
|
6
6
|
|
|
7
|
+
const describeAdoption = (adopted) => {
|
|
8
|
+
const hasAdopted = adopted.length > 0;
|
|
9
|
+
if (!hasAdopted) return null;
|
|
10
|
+
const names = adopted.map((a) => `${a.rule}=${a.current}`).join(', ');
|
|
11
|
+
return `New or revised rules recorded as baseline (not gated this run): ${names}`;
|
|
12
|
+
};
|
|
13
|
+
|
|
7
14
|
export const evaluateGateVerdict = ({ violations, ratchetEval }) => {
|
|
15
|
+
const adopted = ratchetEval.adopted ?? [];
|
|
8
16
|
const isRatchetBasis = RATCHET_STATUSES.has(ratchetEval.status);
|
|
9
17
|
if (isRatchetBasis) {
|
|
10
18
|
return {
|
|
11
19
|
isPassing: ratchetEval.status === 'pass',
|
|
12
20
|
basis: 'ratchet',
|
|
13
21
|
regressions: ratchetEval.regressions,
|
|
14
|
-
|
|
22
|
+
adopted,
|
|
23
|
+
note: ratchetEval.message ?? describeAdoption(adopted)
|
|
15
24
|
};
|
|
16
25
|
}
|
|
17
26
|
const hasSevereViolation = violations.some(isSevereViolation);
|
|
18
|
-
return { isPassing: !hasSevereViolation, basis: 'severity', regressions: [], note: ratchetEval.message ?? null };
|
|
27
|
+
return { isPassing: !hasSevereViolation, basis: 'severity', regressions: [], adopted: [], note: ratchetEval.message ?? null };
|
|
19
28
|
};
|
|
20
29
|
|
|
21
30
|
const PARTIAL_SCAN_EVAL = {
|
|
22
31
|
status: 'partial',
|
|
23
32
|
regressions: [],
|
|
33
|
+
adopted: [],
|
|
24
34
|
message: 'Partial scan (--git, --changed, or --fast): the ratchet applies to full scans only; using severity gate.'
|
|
25
35
|
};
|
|
26
36
|
|
|
37
|
+
const persistAdoption = (projectRoot, scope, ratchetEval) => {
|
|
38
|
+
const hasAdopted = ratchetEval.adopted?.length > 0;
|
|
39
|
+
const shouldPersist = hasAdopted || ratchetEval.isStale === true;
|
|
40
|
+
if (!shouldPersist) return;
|
|
41
|
+
try {
|
|
42
|
+
recordAdoptedRules(projectRoot, { scope, adopted: ratchetEval.adopted });
|
|
43
|
+
} catch (err) {
|
|
44
|
+
ratchetEval.message = `Could not record new-rule baselines: ${err.message}`;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
27
48
|
export const computeGateVerdict = ({ projectRoot, scope, violations, isPartialScan = false }) => {
|
|
28
49
|
const ratchetEval = isPartialScan ? PARTIAL_SCAN_EVAL : evaluateRatchet(readRatchet(projectRoot), { scope, violations });
|
|
50
|
+
if (!isPartialScan) persistAdoption(projectRoot, scope, ratchetEval);
|
|
29
51
|
return evaluateGateVerdict({ violations, ratchetEval });
|
|
30
52
|
};
|
package/cli/audit/history.d.ts
CHANGED
|
@@ -3,6 +3,10 @@ import type { MolecularHealthScore, CodebaseMetrics, PillarStatus, ContextTokenA
|
|
|
3
3
|
export interface AuditSnapshot {
|
|
4
4
|
readonly id: string;
|
|
5
5
|
readonly timestamp: string;
|
|
6
|
+
/** Audited directory relative to the project root ('.' for the root); null or absent on older entries. */
|
|
7
|
+
readonly scope?: string | null;
|
|
8
|
+
/** True for --fast and --git audits, which check only part of the scope. */
|
|
9
|
+
readonly isPartial?: boolean;
|
|
6
10
|
readonly health: MolecularHealthScore;
|
|
7
11
|
readonly metrics: CodebaseMetrics;
|
|
8
12
|
readonly violations: {
|
|
@@ -59,11 +63,19 @@ export interface SaveSnapshotResult {
|
|
|
59
63
|
}
|
|
60
64
|
|
|
61
65
|
export declare function ensureChemxDir(cwd?: string): string;
|
|
62
|
-
export
|
|
66
|
+
export interface SnapshotScope {
|
|
67
|
+
readonly scope?: string | null;
|
|
68
|
+
readonly isPartial?: boolean;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export declare const HISTORY_PER_SCOPE: number;
|
|
72
|
+
export declare const HISTORY_TOTAL: number;
|
|
73
|
+
export declare function trimAuditHistory<T extends { readonly scope?: string | null }>(history: readonly T[], limits?: { perScope?: number; total?: number }): T[];
|
|
74
|
+
export declare function createSnapshotFromReport(report: AuditReport, scopeInfo?: SnapshotScope): AuditSnapshot;
|
|
63
75
|
export declare function getAuditHistory(cwd?: string): AuditSnapshot[];
|
|
64
76
|
export declare function getAuditBaseline(cwd?: string): AuditSnapshot | null;
|
|
65
77
|
export declare function setAuditBaseline(snapshot: AuditSnapshot, cwd?: string): AuditSnapshot;
|
|
66
|
-
export declare function saveAuditSnapshot(report: AuditReport, cwd?: string): SaveSnapshotResult;
|
|
78
|
+
export declare function saveAuditSnapshot(report: AuditReport, cwd?: string, scopeInfo?: SnapshotScope): SaveSnapshotResult;
|
|
67
79
|
export declare function calculateTransformationDelta(beforeSnapshot: AuditSnapshot, afterSnapshot: AuditSnapshot): TransformationDelta;
|
|
68
80
|
export declare function formatTransformationTerminal(beforeSnapshot: AuditSnapshot, afterSnapshot: AuditSnapshot): string;
|
|
69
81
|
export declare function formatHistoryTimelineTerminal(history: readonly AuditSnapshot[]): string;
|