gitnexus 1.6.10-rc.21 → 1.6.10-rc.211
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/README.md +212 -22
- package/dist/_shared/graph/types.d.ts +27 -8
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/index.d.ts +4 -3
- package/dist/_shared/index.d.ts.map +1 -1
- package/dist/_shared/index.js +1 -1
- package/dist/_shared/index.js.map +1 -1
- package/dist/_shared/integrations/circuit-breaker.d.ts.map +1 -1
- package/dist/_shared/integrations/circuit-breaker.js.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts +19 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.js +23 -10
- package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
- package/dist/_shared/language-detection.d.ts.map +1 -1
- package/dist/_shared/lbug/schema-constants.d.ts +2 -2
- package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
- package/dist/_shared/lbug/schema-constants.js +3 -0
- package/dist/_shared/lbug/schema-constants.js.map +1 -1
- package/dist/_shared/scope-resolution/callable-flow-site.d.ts +110 -0
- package/dist/_shared/scope-resolution/callable-flow-site.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/callable-flow-site.js +11 -0
- package/dist/_shared/scope-resolution/callable-flow-site.js.map +1 -0
- package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +6 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.js +316 -37
- package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
- package/dist/_shared/scope-resolution/parsed-file.d.ts +7 -0
- package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts +124 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
- package/dist/_shared/scope-resolution/registries/lookup-core.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/registries/lookup-core.js +58 -2
- package/dist/_shared/scope-resolution/registries/lookup-core.js.map +1 -1
- package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -1
- package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/scope-tree.js.map +1 -1
- package/dist/_shared/scope-resolution/symbol-definition.d.ts +47 -0
- package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/types.d.ts +297 -5
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +10 -2
- package/dist/cli/ai-context.js +128 -61
- package/dist/cli/analyze-config.d.ts +1 -1
- package/dist/cli/analyze-options.d.ts +131 -0
- package/dist/cli/analyze-options.js +1 -0
- package/dist/cli/analyze.d.ts +25 -114
- package/dist/cli/analyze.js +194 -36
- package/dist/cli/cli-message.d.ts +1 -1
- package/dist/cli/detect-changes-format.js +19 -2
- package/dist/cli/doctor.d.ts +23 -0
- package/dist/cli/doctor.js +72 -9
- package/dist/cli/editor-targets.js +6 -0
- package/dist/cli/eval-server.d.ts +23 -1
- package/dist/cli/eval-server.js +128 -9
- package/dist/cli/format-symbol.d.ts +15 -0
- package/dist/cli/format-symbol.js +17 -0
- package/dist/cli/generated-skill.d.ts +17 -0
- package/dist/cli/generated-skill.js +1 -0
- package/dist/cli/group.js +23 -2
- package/dist/cli/help-i18n.js +3 -0
- package/dist/cli/i18n/en.d.ts +17 -8
- package/dist/cli/i18n/en.js +19 -8
- package/dist/cli/i18n/resources.d.ts +26 -8
- package/dist/cli/i18n/zh-CN.d.ts +9 -0
- package/dist/cli/i18n/zh-CN.js +17 -8
- package/dist/cli/index.js +16 -9
- package/dist/cli/lazy-action.d.ts +7 -0
- package/dist/cli/lazy-action.js +27 -0
- package/dist/cli/mcp.js +6 -3
- package/dist/cli/resolve-invocation.d.ts +7 -3
- package/dist/cli/resolve-invocation.js +7 -3
- package/dist/cli/setup.d.ts +8 -0
- package/dist/cli/setup.js +30 -7
- package/dist/cli/skill-gen.d.ts +1 -6
- package/dist/cli/skill-gen.js +88 -18
- package/dist/cli/standard-skills.d.ts +76 -0
- package/dist/cli/standard-skills.js +45 -0
- package/dist/cli/status.d.ts +4 -1
- package/dist/cli/status.js +57 -4
- package/dist/cli/tool.d.ts +1 -0
- package/dist/cli/tool.js +75 -7
- package/dist/cli/uninstall.js +7 -2
- package/dist/cli/wiki.d.ts +1 -0
- package/dist/cli/wiki.js +59 -10
- package/dist/config/ignore-service.d.ts +2 -0
- package/dist/config/ignore-service.js +31 -4
- package/dist/core/analysis-features.d.ts +21 -0
- package/dist/core/analysis-features.js +59 -0
- package/dist/core/analyzer-identity.d.ts +154 -0
- package/dist/core/analyzer-identity.js +2158 -0
- package/dist/core/augmentation/engine.js +95 -76
- package/dist/core/embedding-checkpoint.d.ts +143 -0
- package/dist/core/embedding-checkpoint.js +221 -0
- package/dist/core/embedding-count.d.ts +61 -0
- package/dist/core/embedding-count.js +69 -0
- package/dist/core/embeddings/ast-utils.js +9 -1
- package/dist/core/embeddings/embedder.d.ts +3 -2
- package/dist/core/embeddings/embedder.js +8 -5
- package/dist/core/embeddings/embedding-identity.d.ts +11 -0
- package/dist/core/embeddings/embedding-identity.js +24 -0
- package/dist/core/embeddings/embedding-pipeline.d.ts +24 -1
- package/dist/core/embeddings/embedding-pipeline.js +341 -19
- package/dist/core/embeddings/http-client.d.ts +10 -2
- package/dist/core/embeddings/http-client.js +282 -47
- package/dist/core/embeddings/node-module-compat.d.ts +4 -2
- package/dist/core/embeddings/node-module-compat.js +4 -2
- package/dist/core/embeddings/onnxruntime-common-resolver.js +5 -5
- package/dist/core/embeddings/onnxruntime-node-resolver.js +2 -2
- package/dist/core/embeddings/runtime-install.js +1 -1
- package/dist/core/git-staleness.js +1 -1
- package/dist/core/graph/graph.js +3 -0
- package/dist/core/graph/import-cycles.d.ts +194 -3
- package/dist/core/graph/import-cycles.js +522 -73
- package/dist/core/graph/types.d.ts +18 -0
- package/dist/core/group/bridge-db.js +5 -27
- package/dist/core/group/cross-impact.d.ts +21 -0
- package/dist/core/group/cross-impact.js +128 -15
- package/dist/core/group/cross-trace.js +27 -16
- package/dist/core/group/extractors/http-patterns/java.js +91 -14
- package/dist/core/group/extractors/http-patterns/node.js +19 -0
- package/dist/core/group/extractors/http-patterns/types.d.ts +8 -0
- package/dist/core/group/extractors/http-route-extractor.d.ts +1 -0
- package/dist/core/group/extractors/http-route-extractor.js +122 -48
- package/dist/core/group/extractors/include-extractor.js +20 -2
- package/dist/core/group/extractors/manifest-extractor.d.ts +1 -1
- package/dist/core/group/extractors/manifest-extractor.js +7 -7
- package/dist/core/group/service.js +10 -1
- package/dist/core/group/storage.js +2 -33
- package/dist/core/group/types.d.ts +18 -0
- package/dist/core/incremental/subgraph-extract.d.ts +9 -6
- package/dist/core/incremental/subgraph-extract.js +33 -10
- package/dist/core/index-freshness.d.ts +80 -0
- package/dist/core/index-freshness.js +120 -0
- package/dist/core/ingestion/call-processor.d.ts +13 -1
- package/dist/core/ingestion/call-processor.js +110 -3
- package/dist/core/ingestion/cfg/callee-cell-format.d.ts +42 -0
- package/dist/core/ingestion/cfg/callee-cell-format.js +42 -0
- package/dist/core/ingestion/cfg/emit.d.ts +8 -23
- package/dist/core/ingestion/cfg/emit.js +9 -23
- package/dist/core/ingestion/class-extractors/configs/go.js +10 -5
- package/dist/core/ingestion/class-extractors/configs/jvm.js +29 -0
- package/dist/core/ingestion/cluster-enricher.js +8 -4
- package/dist/core/ingestion/cobol/cobol-preprocessor.js +1 -1
- package/dist/core/ingestion/community-processor.d.ts +21 -3
- package/dist/core/ingestion/community-processor.js +88 -83
- package/dist/core/ingestion/di-extractors/index.d.ts +22 -34
- package/dist/core/ingestion/di-extractors/index.js +17 -18
- package/dist/core/ingestion/di-extractors/spring.d.ts +27 -5
- package/dist/core/ingestion/di-extractors/spring.js +87 -3
- package/dist/core/ingestion/di-extractors/types.d.ts +60 -0
- package/dist/core/ingestion/di-extractors/types.js +15 -0
- package/dist/core/ingestion/emit-references.js +4 -0
- package/dist/core/ingestion/filesystem-walker.js +16 -12
- package/dist/core/ingestion/finalize-orchestrator.js +1 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +9 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.js +41 -0
- package/dist/core/ingestion/frameworks/spring/annotation-arguments.d.ts +13 -0
- package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +227 -0
- package/dist/core/ingestion/frameworks/spring/aop-candidates.d.ts +15 -0
- package/dist/core/ingestion/frameworks/spring/aop-candidates.js +85 -0
- package/dist/core/ingestion/frameworks/spring/aop.d.ts +118 -0
- package/dist/core/ingestion/frameworks/spring/aop.js +476 -0
- package/dist/core/ingestion/frameworks/spring/auto-configuration.d.ts +8 -0
- package/dist/core/ingestion/frameworks/spring/auto-configuration.js +16 -0
- package/dist/core/ingestion/frameworks/spring/bean-candidates.d.ts +30 -0
- package/dist/core/ingestion/frameworks/spring/bean-candidates.js +182 -0
- package/dist/core/ingestion/frameworks/spring/bean-catalog.d.ts +12 -0
- package/dist/core/ingestion/frameworks/spring/bean-catalog.js +27 -0
- package/dist/core/ingestion/frameworks/spring/bean-factories.d.ts +33 -0
- package/dist/core/ingestion/frameworks/spring/bean-factories.js +65 -0
- package/dist/core/ingestion/frameworks/spring/conditionals.d.ts +25 -0
- package/dist/core/ingestion/frameworks/spring/conditionals.js +319 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.d.ts +24 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.js +115 -0
- package/dist/core/ingestion/frameworks/spring/di-metadata.d.ts +48 -0
- package/dist/core/ingestion/frameworks/spring/di-metadata.js +379 -0
- package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +28 -0
- package/dist/core/ingestion/frameworks/spring/non-http-handlers.js +152 -0
- package/dist/core/ingestion/frameworks/spring/resource-injection.d.ts +5 -0
- package/dist/core/ingestion/frameworks/spring/resource-injection.js +91 -0
- package/dist/core/ingestion/import-resolvers/configs/csharp.js +5 -1
- package/dist/core/ingestion/import-resolvers/configs/swift.js +13 -0
- package/dist/core/ingestion/import-resolvers/csharp.d.ts +9 -1
- package/dist/core/ingestion/import-resolvers/csharp.js +234 -27
- package/dist/core/ingestion/import-resolvers/go.d.ts +11 -1
- package/dist/core/ingestion/import-resolvers/go.js +44 -17
- package/dist/core/ingestion/import-resolvers/jvm.d.ts +2 -2
- package/dist/core/ingestion/import-resolvers/node-workspace-packages.d.ts +90 -0
- package/dist/core/ingestion/import-resolvers/node-workspace-packages.js +428 -0
- package/dist/core/ingestion/import-resolvers/package-dir-index.d.ts +124 -0
- package/dist/core/ingestion/import-resolvers/package-dir-index.js +223 -0
- package/dist/core/ingestion/import-resolvers/pass-cache.d.ts +50 -0
- package/dist/core/ingestion/import-resolvers/pass-cache.js +60 -0
- package/dist/core/ingestion/import-resolvers/per-file-set.d.ts +71 -0
- package/dist/core/ingestion/import-resolvers/per-file-set.js +11 -0
- package/dist/core/ingestion/import-resolvers/php.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/php.js +27 -8
- package/dist/core/ingestion/import-resolvers/python-file-index.d.ts +201 -0
- package/dist/core/ingestion/import-resolvers/python-file-index.js +302 -0
- package/dist/core/ingestion/import-resolvers/python.js +25 -6
- package/dist/core/ingestion/import-resolvers/ruby.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/rust.d.ts +2 -2
- package/dist/core/ingestion/import-resolvers/standard.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/types.d.ts +1 -12
- package/dist/core/ingestion/import-resolvers/utils.d.ts +65 -6
- package/dist/core/ingestion/import-resolvers/utils.js +215 -36
- package/dist/core/ingestion/import-resolvers/workspace-file-index.d.ts +72 -0
- package/dist/core/ingestion/import-resolvers/workspace-file-index.js +58 -0
- package/dist/core/ingestion/language-config.d.ts +20 -1
- package/dist/core/ingestion/language-config.js +18 -23
- package/dist/core/ingestion/language-provider.d.ts +133 -7
- package/dist/core/ingestion/languages/c/captures.js +63 -0
- package/dist/core/ingestion/languages/c/import-target.js +12 -16
- package/dist/core/ingestion/languages/c/query.js +17 -0
- package/dist/core/ingestion/languages/c/scope-resolver.js +26 -19
- package/dist/core/ingestion/languages/c/static-linkage.js +12 -16
- package/dist/core/ingestion/languages/c-cpp.js +13 -0
- package/dist/core/ingestion/languages/cobol/captures.js +93 -0
- package/dist/core/ingestion/languages/cobol/scope-resolver.js +34 -20
- package/dist/core/ingestion/languages/cobol.js +13 -0
- package/dist/core/ingestion/languages/cpp/adl.d.ts +2 -2
- package/dist/core/ingestion/languages/cpp/adl.js +67 -44
- package/dist/core/ingestion/languages/cpp/captures.js +222 -3
- package/dist/core/ingestion/languages/cpp/file-local-linkage.js +11 -15
- package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +28 -8
- package/dist/core/ingestion/languages/cpp/inline-namespaces.js +242 -68
- package/dist/core/ingestion/languages/cpp/interpret.d.ts +2 -0
- package/dist/core/ingestion/languages/cpp/interpret.js +126 -6
- package/dist/core/ingestion/languages/cpp/query.js +106 -0
- package/dist/core/ingestion/languages/cpp/scope-resolver.js +62 -20
- package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +2 -15
- package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +18 -10
- package/dist/core/ingestion/languages/csharp/captures.js +44 -0
- package/dist/core/ingestion/languages/csharp/import-target.js +46 -72
- package/dist/core/ingestion/languages/csharp/namespace-siblings.js +5 -1
- package/dist/core/ingestion/languages/csharp/query.js +25 -5
- package/dist/core/ingestion/languages/csharp/scope-resolver.js +75 -2
- package/dist/core/ingestion/languages/dart/captures.d.ts +10 -0
- package/dist/core/ingestion/languages/dart/captures.js +686 -16
- package/dist/core/ingestion/languages/dart/extension-type-preprocess.d.ts +7 -0
- package/dist/core/ingestion/languages/dart/extension-type-preprocess.js +30 -0
- package/dist/core/ingestion/languages/dart/import-target.js +32 -9
- package/dist/core/ingestion/languages/dart/index.d.ts +1 -1
- package/dist/core/ingestion/languages/dart/index.js +1 -1
- package/dist/core/ingestion/languages/dart/query.js +98 -1
- package/dist/core/ingestion/languages/dart/scope-resolver.js +14 -3
- package/dist/core/ingestion/languages/dart/simple-hooks.js +9 -0
- package/dist/core/ingestion/languages/dart.js +8 -1
- package/dist/core/ingestion/languages/go/captures.js +142 -3
- package/dist/core/ingestion/languages/go/generic-type-parameters.d.ts +31 -0
- package/dist/core/ingestion/languages/go/generic-type-parameters.js +140 -0
- package/dist/core/ingestion/languages/go/import-target.d.ts +3 -10
- package/dist/core/ingestion/languages/go/import-target.js +34 -30
- package/dist/core/ingestion/languages/go/index.d.ts +1 -1
- package/dist/core/ingestion/languages/go/interface-impls.d.ts +9 -1
- package/dist/core/ingestion/languages/go/interface-impls.js +693 -87
- package/dist/core/ingestion/languages/go/interpret.d.ts +2 -0
- package/dist/core/ingestion/languages/go/interpret.js +22 -8
- package/dist/core/ingestion/languages/go/method-owners.js +31 -12
- package/dist/core/ingestion/languages/go/package-clause.d.ts +46 -0
- package/dist/core/ingestion/languages/go/package-clause.js +75 -0
- package/dist/core/ingestion/languages/go/package-siblings.js +7 -11
- package/dist/core/ingestion/languages/go/query.js +56 -3
- package/dist/core/ingestion/languages/go/scope-resolver.js +39 -0
- package/dist/core/ingestion/languages/go.js +9 -0
- package/dist/core/ingestion/languages/java/analysis-features.d.ts +7 -0
- package/dist/core/ingestion/languages/java/analysis-features.js +25 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +38 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.js +124 -0
- package/dist/core/ingestion/languages/java/captures.d.ts +4 -3
- package/dist/core/ingestion/languages/java/captures.js +321 -49
- package/dist/core/ingestion/languages/java/import-target.d.ts +49 -9
- package/dist/core/ingestion/languages/java/import-target.js +68 -88
- package/dist/core/ingestion/languages/java/interpret.js +3 -2
- package/dist/core/ingestion/languages/java/module-resolution.d.ts +62 -0
- package/dist/core/ingestion/languages/java/module-resolution.js +142 -0
- package/dist/core/ingestion/languages/java/package-facts.d.ts +5 -0
- package/dist/core/ingestion/languages/java/package-facts.js +9 -0
- package/dist/core/ingestion/languages/java/package-siblings.d.ts +3 -16
- package/dist/core/ingestion/languages/java/package-siblings.js +8 -147
- package/dist/core/ingestion/languages/java/query.js +39 -3
- package/dist/core/ingestion/languages/java/record-components.d.ts +14 -0
- package/dist/core/ingestion/languages/java/record-components.js +185 -0
- package/dist/core/ingestion/languages/java/scope-resolver.js +35 -2
- package/dist/core/ingestion/languages/java/spring-aop.d.ts +12 -0
- package/dist/core/ingestion/languages/java/spring-aop.js +49 -0
- package/dist/core/ingestion/languages/java/spring-bean-metadata.d.ts +2 -0
- package/dist/core/ingestion/languages/java/spring-bean-metadata.js +8 -0
- package/dist/core/ingestion/languages/java/spring-conditionals.d.ts +11 -0
- package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
- package/dist/core/ingestion/languages/java/spring-config-bindings.d.ts +23 -0
- package/dist/core/ingestion/languages/java/spring-config-bindings.js +215 -0
- package/dist/core/ingestion/languages/java/spring-di.d.ts +20 -0
- package/dist/core/ingestion/languages/java/spring-di.js +160 -0
- package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +7 -0
- package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +32 -0
- package/dist/core/ingestion/languages/java.js +76 -3
- package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
- package/dist/core/ingestion/languages/javascript/captures.js +278 -4
- package/dist/core/ingestion/languages/javascript/import-target.d.ts +17 -21
- package/dist/core/ingestion/languages/javascript/import-target.js +24 -41
- package/dist/core/ingestion/languages/javascript/index.d.ts +54 -5
- package/dist/core/ingestion/languages/javascript/index.js +54 -5
- package/dist/core/ingestion/languages/javascript/query.d.ts +1 -0
- package/dist/core/ingestion/languages/javascript/query.js +232 -5
- package/dist/core/ingestion/languages/javascript/scope-resolver.js +12 -0
- package/dist/core/ingestion/languages/javascript/simple-hooks.js +2 -1
- package/dist/core/ingestion/languages/jvm/package-facts.d.ts +35 -0
- package/dist/core/ingestion/languages/jvm/package-facts.js +40 -0
- package/dist/core/ingestion/languages/jvm/package-siblings.d.ts +14 -0
- package/dist/core/ingestion/languages/jvm/package-siblings.js +197 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +40 -3
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +111 -8
- package/dist/core/ingestion/languages/kotlin/captures.js +112 -0
- package/dist/core/ingestion/languages/kotlin/import-target.d.ts +8 -1
- package/dist/core/ingestion/languages/kotlin/import-target.js +20 -123
- package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
- package/dist/core/ingestion/languages/kotlin/index.js +1 -0
- package/dist/core/ingestion/languages/kotlin/module-resolution.d.ts +22 -0
- package/dist/core/ingestion/languages/kotlin/module-resolution.js +108 -0
- package/dist/core/ingestion/languages/kotlin/package-facts.d.ts +5 -0
- package/dist/core/ingestion/languages/kotlin/package-facts.js +9 -0
- package/dist/core/ingestion/languages/kotlin/package-siblings.d.ts +4 -0
- package/dist/core/ingestion/languages/kotlin/package-siblings.js +8 -0
- package/dist/core/ingestion/languages/kotlin/query.js +47 -2
- package/dist/core/ingestion/languages/kotlin/scope-resolver.js +36 -3
- package/dist/core/ingestion/languages/kotlin/spring-aop.d.ts +12 -0
- package/dist/core/ingestion/languages/kotlin/spring-aop.js +64 -0
- package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.d.ts +2 -0
- package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.js +8 -0
- package/dist/core/ingestion/languages/kotlin/spring-conditionals.d.ts +12 -0
- package/dist/core/ingestion/languages/kotlin/spring-conditionals.js +49 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +20 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.js +299 -0
- package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +10 -0
- package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +41 -0
- package/dist/core/ingestion/languages/kotlin.js +5 -6
- package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
- package/dist/core/ingestion/languages/php/captures.js +359 -51
- package/dist/core/ingestion/languages/php/import-decomposer.js +12 -0
- package/dist/core/ingestion/languages/php/import-target.d.ts +2 -1
- package/dist/core/ingestion/languages/php/import-target.js +229 -7
- package/dist/core/ingestion/languages/php/interpret.js +10 -0
- package/dist/core/ingestion/languages/php/query.js +31 -0
- package/dist/core/ingestion/languages/php/scope-resolver.js +1 -1
- package/dist/core/ingestion/languages/python/arity-metadata.d.ts +1 -0
- package/dist/core/ingestion/languages/python/arity-metadata.js +1 -0
- package/dist/core/ingestion/languages/python/captures.d.ts +3 -4
- package/dist/core/ingestion/languages/python/captures.js +53 -5
- package/dist/core/ingestion/languages/python/import-decomposer.js +22 -1
- package/dist/core/ingestion/languages/python/import-target.d.ts +42 -1
- package/dist/core/ingestion/languages/python/import-target.js +277 -91
- package/dist/core/ingestion/languages/python/index.d.ts +1 -1
- package/dist/core/ingestion/languages/python/index.js +1 -1
- package/dist/core/ingestion/languages/python/interpret.d.ts +52 -0
- package/dist/core/ingestion/languages/python/interpret.js +249 -3
- package/dist/core/ingestion/languages/python/query.js +9 -0
- package/dist/core/ingestion/languages/python/receiver-binding.d.ts +17 -2
- package/dist/core/ingestion/languages/python/receiver-binding.js +192 -2
- package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
- package/dist/core/ingestion/languages/python/simple-hooks.d.ts +5 -5
- package/dist/core/ingestion/languages/python/simple-hooks.js +9 -5
- package/dist/core/ingestion/languages/ruby/captures.js +200 -0
- package/dist/core/ingestion/languages/ruby/import-target.js +7 -5
- package/dist/core/ingestion/languages/ruby/query.js +93 -0
- package/dist/core/ingestion/languages/ruby/scope-resolver.js +2 -0
- package/dist/core/ingestion/languages/ruby/simple-hooks.d.ts +1 -1
- package/dist/core/ingestion/languages/ruby/simple-hooks.js +22 -1
- package/dist/core/ingestion/languages/rust/captures.js +52 -1
- package/dist/core/ingestion/languages/rust/interpret.js +18 -0
- package/dist/core/ingestion/languages/rust/method-owners.js +11 -1
- package/dist/core/ingestion/languages/rust/module-path.d.ts +126 -0
- package/dist/core/ingestion/languages/rust/module-path.js +214 -0
- package/dist/core/ingestion/languages/rust/qualified-call.d.ts +41 -0
- package/dist/core/ingestion/languages/rust/qualified-call.js +481 -0
- package/dist/core/ingestion/languages/rust/query.js +48 -6
- package/dist/core/ingestion/languages/rust/range-binding.d.ts +1 -11
- package/dist/core/ingestion/languages/rust/range-binding.js +149 -63
- package/dist/core/ingestion/languages/rust/scope-resolver.js +21 -2
- package/dist/core/ingestion/languages/rust.js +17 -0
- package/dist/core/ingestion/languages/swift/captures.js +99 -3
- package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.d.ts +48 -0
- package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.js +253 -0
- package/dist/core/ingestion/languages/swift/import-target.js +4 -9
- package/dist/core/ingestion/languages/swift/query.js +17 -0
- package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +8 -0
- package/dist/core/ingestion/languages/swift/receiver-binding.js +6 -2
- package/dist/core/ingestion/languages/swift.js +2 -0
- package/dist/core/ingestion/languages/typescript/captures.d.ts +90 -1
- package/dist/core/ingestion/languages/typescript/captures.js +288 -5
- package/dist/core/ingestion/languages/typescript/cjs-export-assignment.d.ts +134 -0
- package/dist/core/ingestion/languages/typescript/cjs-export-assignment.js +523 -0
- package/dist/core/ingestion/languages/typescript/cjs-module-exports.d.ts +54 -0
- package/dist/core/ingestion/languages/typescript/cjs-module-exports.js +191 -0
- package/dist/core/ingestion/languages/typescript/file-candidates.d.ts +29 -0
- package/dist/core/ingestion/languages/typescript/file-candidates.js +70 -0
- package/dist/core/ingestion/languages/typescript/import-decomposer.d.ts +28 -1
- package/dist/core/ingestion/languages/typescript/import-decomposer.js +125 -10
- package/dist/core/ingestion/languages/typescript/import-target.d.ts +25 -37
- package/dist/core/ingestion/languages/typescript/import-target.js +24 -26
- package/dist/core/ingestion/languages/typescript/interpret.d.ts +21 -1
- package/dist/core/ingestion/languages/typescript/interpret.js +45 -5
- package/dist/core/ingestion/languages/typescript/module-resolution.d.ts +48 -0
- package/dist/core/ingestion/languages/typescript/module-resolution.js +171 -0
- package/dist/core/ingestion/languages/typescript/nuxt-auto-imports.js +2 -1
- package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
- package/dist/core/ingestion/languages/typescript/query.js +340 -14
- package/dist/core/ingestion/languages/typescript/receiver-binding.d.ts +17 -0
- package/dist/core/ingestion/languages/typescript/receiver-binding.js +27 -0
- package/dist/core/ingestion/languages/typescript/scope-resolver.js +27 -40
- package/dist/core/ingestion/languages/typescript/simple-hooks.d.ts +0 -10
- package/dist/core/ingestion/languages/typescript/simple-hooks.js +22 -22
- package/dist/core/ingestion/languages/typescript/tsconfig.d.ts +59 -0
- package/dist/core/ingestion/languages/typescript/tsconfig.js +291 -0
- package/dist/core/ingestion/languages/typescript.js +87 -1
- package/dist/core/ingestion/languages/vue/import-target.d.ts +6 -22
- package/dist/core/ingestion/languages/vue/import-target.js +11 -47
- package/dist/core/ingestion/languages/vue/scope-resolver.js +4 -2
- package/dist/core/ingestion/local-symbol-pruner.js +11 -11
- package/dist/core/ingestion/method-extractors/configs/csharp.js +1 -0
- package/dist/core/ingestion/method-extractors/generic.js +1 -0
- package/dist/core/ingestion/method-types.d.ts +16 -0
- package/dist/core/ingestion/parsing-processor.js +32 -1
- package/dist/core/ingestion/pipeline-phases/di.d.ts +8 -33
- package/dist/core/ingestion/pipeline-phases/di.js +275 -157
- package/dist/core/ingestion/pipeline-phases/index.d.ts +3 -0
- package/dist/core/ingestion/pipeline-phases/index.js +3 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +158 -3
- package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +11 -2
- package/dist/core/ingestion/pipeline-phases/processes.js +102 -7
- package/dist/core/ingestion/pipeline-phases/routes.js +56 -10
- package/dist/core/ingestion/pipeline-phases/spring-aop.d.ts +34 -0
- package/dist/core/ingestion/pipeline-phases/spring-aop.js +439 -0
- package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +34 -0
- package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +255 -0
- package/dist/core/ingestion/pipeline-phases/spring-config.d.ts +37 -0
- package/dist/core/ingestion/pipeline-phases/spring-config.js +433 -0
- package/dist/core/ingestion/pipeline-phases/types.d.ts +7 -0
- package/dist/core/ingestion/pipeline.d.ts +27 -3
- package/dist/core/ingestion/pipeline.js +62 -12
- package/dist/core/ingestion/process-processor.d.ts +109 -2
- package/dist/core/ingestion/process-processor.js +464 -52
- package/dist/core/ingestion/resolve-references.d.ts +6 -1
- package/dist/core/ingestion/resolve-references.js +78 -6
- package/dist/core/ingestion/route-extractors/data-route-table.d.ts +25 -0
- package/dist/core/ingestion/route-extractors/data-route-table.js +864 -0
- package/dist/core/ingestion/route-extractors/dispatch-guard.d.ts +96 -0
- package/dist/core/ingestion/route-extractors/dispatch-guard.js +1184 -0
- package/dist/core/ingestion/route-extractors/spring-shared.d.ts +11 -0
- package/dist/core/ingestion/route-extractors/spring-shared.js +89 -0
- package/dist/core/ingestion/route-extractors/spring.js +109 -24
- package/dist/core/ingestion/scope-extractor-bridge.js +9 -1
- package/dist/core/ingestion/scope-extractor.d.ts +22 -7
- package/dist/core/ingestion/scope-extractor.js +617 -59
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +381 -22
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +7 -7
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +8 -7
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +15 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +53 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +275 -41
- package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +123 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +171 -17
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +56 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +130 -32
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +30 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +46 -3
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +64 -0
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +1233 -0
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +107 -5
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +590 -33
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +19 -4
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +160 -4
- package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.d.ts +34 -0
- package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.js +62 -0
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +64 -0
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +118 -0
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +109 -8
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +931 -92
- package/dist/core/ingestion/scope-resolution/passes/return-shape-members.d.ts +58 -0
- package/dist/core/ingestion/scope-resolution/passes/return-shape-members.js +458 -0
- package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.d.ts +180 -0
- package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.js +418 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +34 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +82 -38
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +61 -1
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +384 -48
- package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +112 -2
- package/dist/core/ingestion/scope-resolution/resolution-outcome.js +38 -1
- package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +25 -3
- package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +36 -16
- package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +210 -9
- package/dist/core/ingestion/scope-resolution/scope/walkers.js +968 -56
- package/dist/core/ingestion/scope-resolution/summary-maps.d.ts +28 -0
- package/dist/core/ingestion/scope-resolution/summary-maps.js +50 -0
- package/dist/core/ingestion/scope-resolution/undecided-satisfaction.d.ts +55 -0
- package/dist/core/ingestion/scope-resolution/undecided-satisfaction.js +37 -0
- package/dist/core/ingestion/scope-resolution/unresolved-receivers.d.ts +109 -0
- package/dist/core/ingestion/scope-resolution/unresolved-receivers.js +204 -0
- package/dist/core/ingestion/scope-resolution/utils/definition-id.d.ts +13 -0
- package/dist/core/ingestion/scope-resolution/utils/definition-id.js +19 -0
- package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.d.ts +171 -0
- package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.js +218 -0
- package/dist/core/ingestion/scope-resolution/workspace-index-types.d.ts +34 -0
- package/dist/core/ingestion/scope-resolution/workspace-index-types.js +15 -0
- package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +7 -20
- package/dist/core/ingestion/taint/typescript-model.js +34 -2
- package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
- package/dist/core/ingestion/tree-sitter-queries.js +688 -5
- package/dist/core/ingestion/type-env.js +11 -7
- package/dist/core/ingestion/type-extractors/jvm.js +17 -2
- package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
- package/dist/core/ingestion/type-extractors/shared.js +16 -0
- package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
- package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
- package/dist/core/ingestion/type-extractors/typescript.js +26 -0
- package/dist/core/ingestion/utils/ast-helpers.d.ts +311 -14
- package/dist/core/ingestion/utils/ast-helpers.js +745 -48
- package/dist/core/ingestion/utils/call-analysis.d.ts +27 -22
- package/dist/core/ingestion/utils/call-analysis.js +202 -7
- package/dist/core/ingestion/utils/callable-flow-captures.d.ts +153 -0
- package/dist/core/ingestion/utils/callable-flow-captures.js +928 -0
- package/dist/core/ingestion/utils/callable-labels.d.ts +25 -0
- package/dist/core/ingestion/utils/callable-labels.js +31 -0
- package/dist/core/ingestion/utils/effective-ram.d.ts +40 -0
- package/dist/core/ingestion/utils/effective-ram.js +58 -0
- package/dist/core/ingestion/utils/line-base.d.ts +14 -0
- package/dist/core/ingestion/utils/line-base.js +14 -0
- package/dist/core/ingestion/utils/method-props.d.ts +27 -4
- package/dist/core/ingestion/utils/method-props.js +29 -4
- package/dist/core/ingestion/utils/receiver-chain-captures.d.ts +31 -0
- package/dist/core/ingestion/utils/receiver-chain-captures.js +57 -0
- package/dist/core/ingestion/utils/receiver-chain-codec.d.ts +89 -0
- package/dist/core/ingestion/utils/receiver-chain-codec.js +182 -0
- package/dist/core/ingestion/utils/scope-tree-walk.d.ts +22 -0
- package/dist/core/ingestion/utils/scope-tree-walk.js +33 -0
- package/dist/core/ingestion/utils/template-arguments.d.ts +96 -0
- package/dist/core/ingestion/utils/template-arguments.js +196 -0
- package/dist/core/ingestion/utils/type-parameters.d.ts +49 -0
- package/dist/core/ingestion/utils/type-parameters.js +206 -0
- package/dist/core/ingestion/workers/callable-id.d.ts +72 -0
- package/dist/core/ingestion/workers/callable-id.js +116 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
- package/dist/core/ingestion/workers/parse-worker.js +409 -39
- package/dist/core/ingestion/workers/worker-pool.d.ts +34 -27
- package/dist/core/ingestion/workers/worker-pool.js +133 -25
- package/dist/core/lbug/csv-generator.d.ts +27 -0
- package/dist/core/lbug/csv-generator.js +80 -17
- package/dist/core/lbug/extension-load-error.d.ts +2 -2
- package/dist/core/lbug/extension-load-error.js +44 -27
- package/dist/core/lbug/extension-loader.d.ts +29 -0
- package/dist/core/lbug/extension-loader.js +32 -7
- package/dist/core/lbug/graph-emit-sink.d.ts +264 -0
- package/dist/core/lbug/graph-emit-sink.js +581 -0
- package/dist/core/lbug/lbug-adapter.d.ts +337 -3
- package/dist/core/lbug/lbug-adapter.js +772 -67
- package/dist/core/lbug/lbug-config.d.ts +93 -6
- package/dist/core/lbug/lbug-config.js +269 -9
- package/dist/core/lbug/native-check.d.ts +39 -0
- package/dist/core/lbug/native-check.js +323 -46
- package/dist/core/lbug/pdg-emit-sink.d.ts +13 -4
- package/dist/core/lbug/pdg-emit-sink.js +21 -111
- package/dist/core/lbug/pool-adapter.d.ts +23 -1
- package/dist/core/lbug/pool-adapter.js +115 -7
- package/dist/core/lbug/query-batch.d.ts +75 -0
- package/dist/core/lbug/query-batch.js +102 -0
- package/dist/core/lbug/rel-pair-routing.d.ts +160 -2
- package/dist/core/lbug/rel-pair-routing.js +228 -10
- package/dist/core/lbug/schema.d.ts +162 -3
- package/dist/core/lbug/schema.js +392 -157
- package/dist/core/lbug/sidecar-recovery.d.ts +1 -0
- package/dist/core/lbug/sidecar-recovery.js +1 -1
- package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
- package/dist/core/lbug/sync-csv-writer.js +108 -0
- package/dist/core/lbug/wal-checkpoint-driver.js +3 -0
- package/dist/core/platform/capabilities.d.ts +0 -1
- package/dist/core/platform/capabilities.js +12 -7
- package/dist/core/run-analyze.d.ts +150 -3
- package/dist/core/run-analyze.js +1562 -151
- package/dist/core/search/bm25-index.d.ts +11 -0
- package/dist/core/search/bm25-index.js +60 -26
- package/dist/core/search/fts-indexes.d.ts +167 -2
- package/dist/core/search/fts-indexes.js +264 -10
- package/dist/core/wiki/graph-queries.js +145 -112
- package/dist/core/wiki/llm-client.d.ts +37 -5
- package/dist/core/wiki/llm-client.js +88 -17
- package/dist/core/wiki/prompts.d.ts +19 -0
- package/dist/core/wiki/prompts.js +20 -1
- package/dist/lib/utils.d.ts +113 -0
- package/dist/lib/utils.js +185 -0
- package/dist/mcp/http-transport.d.ts +5 -0
- package/dist/mcp/http-transport.js +19 -5
- package/dist/mcp/local/aop-metadata.d.ts +77 -0
- package/dist/mcp/local/aop-metadata.js +227 -0
- package/dist/mcp/local/bean-metadata.d.ts +3 -0
- package/dist/mcp/local/bean-metadata.js +46 -0
- package/dist/mcp/local/local-backend.d.ts +167 -6
- package/dist/mcp/local/local-backend.js +1756 -405
- package/dist/mcp/local/path-predicate.d.ts +19 -0
- package/dist/mcp/local/path-predicate.js +21 -0
- package/dist/mcp/local/pdg-impact.d.ts +132 -10
- package/dist/mcp/local/pdg-impact.js +391 -98
- package/dist/mcp/output-budget.d.ts +5 -0
- package/dist/mcp/output-budget.js +52 -0
- package/dist/mcp/read-only-policy.d.ts +12 -0
- package/dist/mcp/read-only-policy.js +102 -0
- package/dist/mcp/repository-policy.d.ts +35 -0
- package/dist/mcp/repository-policy.js +333 -0
- package/dist/mcp/resources.js +34 -7
- package/dist/mcp/server.d.ts +5 -2
- package/dist/mcp/server.js +48 -18
- package/dist/mcp/tools.d.ts +8 -8
- package/dist/mcp/tools.js +91 -20
- package/dist/server/analyze-job.d.ts +40 -2
- package/dist/server/analyze-job.js +30 -2
- package/dist/server/analyze-launch.d.ts +1 -1
- package/dist/server/analyze-launch.js +79 -10
- package/dist/server/analyze-worker-core.d.ts +3 -2
- package/dist/server/analyze-worker-core.js +15 -3
- package/dist/server/analyze-worker-ipc.d.ts +1 -1
- package/dist/server/analyze-worker-ipc.js +4 -0
- package/dist/server/analyze-worker-protocol.d.ts +59 -0
- package/dist/server/analyze-worker-protocol.js +1 -0
- package/dist/server/analyze-worker.d.ts +1 -17
- package/dist/server/analyze-worker.js +29 -6
- package/dist/server/api.d.ts +2 -11
- package/dist/server/api.js +200 -155
- package/dist/server/embed-run-outcome.d.ts +89 -0
- package/dist/server/embed-run-outcome.js +88 -0
- package/dist/server/git-clone.js +6 -2
- package/dist/server/mcp-http.d.ts +1 -1
- package/dist/server/mcp-http.js +4 -2
- package/dist/server/middleware.d.ts +116 -9
- package/dist/server/middleware.js +291 -22
- package/dist/server/sse-progress.d.ts +41 -0
- package/dist/server/sse-progress.js +125 -0
- package/dist/server/upload-ingest.js +2 -1
- package/dist/server/validation.js +2 -1
- package/dist/storage/branch-index.d.ts +11 -6
- package/dist/storage/branch-index.js +15 -7
- package/dist/storage/file-hash.js +2 -2
- package/dist/storage/fs-atomic.d.ts +25 -0
- package/dist/storage/fs-atomic.js +42 -0
- package/dist/storage/git.d.ts +165 -0
- package/dist/storage/git.js +352 -3
- package/dist/storage/index-lock.d.ts +83 -0
- package/dist/storage/index-lock.js +654 -0
- package/dist/storage/parse-cache.js +482 -1
- package/dist/storage/parsedfile-store.d.ts +8 -0
- package/dist/storage/parsedfile-store.js +235 -1
- package/dist/storage/repo-manager.d.ts +29 -309
- package/dist/storage/repo-manager.js +187 -165
- package/dist/storage/repo-meta.d.ts +530 -0
- package/dist/storage/repo-meta.js +100 -0
- package/dist/types/pipeline.d.ts +37 -0
- package/hooks/antigravity/gitnexus-antigravity-hook.cjs +1 -1
- package/hooks/claude/gitnexus-hook.cjs +1 -1
- package/hooks/claude/resolve-analyze-cmd.cjs +80 -13
- package/package.json +20 -12
- package/scripts/cross-platform-shard.ts +143 -0
- package/scripts/cross-platform-tests.ts +94 -0
- package/scripts/ensure-fts.ts +14 -3
- package/scripts/run-cross-platform.ts +36 -10
- package/scripts/sync-plugin-manifests.mjs +192 -0
- package/skills/gitnexus-cli.md +3 -3
- package/skills/gitnexus-debugging.md +37 -7
- package/skills/gitnexus-exploring.md +26 -4
- package/skills/gitnexus-impact-analysis.md +71 -10
- package/skills/gitnexus-lfg/README.md +55 -0
- package/skills/gitnexus-lfg/SKILL.md +86 -0
- package/skills/gitnexus-plan/README.md +147 -0
- package/skills/gitnexus-plan/SKILL.md +348 -0
- package/skills/gitnexus-plan/references/context-ledger.md +137 -0
- package/skills/gitnexus-plan/references/context-pack.md +126 -0
- package/skills/gitnexus-plan/references/evidence-provenance.md +309 -0
- package/skills/gitnexus-plan/references/pdg-slice.md +109 -0
- package/skills/gitnexus-plan/references/plan-template.md +201 -0
- package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +2366 -0
- package/skills/gitnexus-refactoring.md +48 -5
- package/skills/gitnexus-review/SKILL.md +279 -0
- package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +42 -0
- package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +39 -0
- package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +37 -0
- package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +40 -0
- package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +42 -0
- package/skills/gitnexus-review/ci-personas/ci-security-lens.md +39 -0
- package/skills/gitnexus-taint-analysis.md +13 -7
- package/skills/gitnexus-work/README.md +71 -0
- package/skills/gitnexus-work/SKILL.md +272 -0
- package/skills/gitnexus-work/references/evidence-provenance.md +309 -0
- package/skills/gitnexus-work/scripts/evidence-provenance.mjs +2366 -0
- package/vendor/leiden/utils.cjs +28 -1
- package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
- package/web/assets/__vite-browser-external-bMKyYQkO.js +1 -0
- package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
- package/web/assets/agent-DIzEQ1JJ.js +626 -0
- package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
- package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
- package/web/assets/blockDiagram-54WLDVWM-Dg_hrRWE.js +132 -0
- package/web/assets/{c4Diagram-Y2BXMSZH-DOXVs7-C.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +6 -6
- package/web/assets/chunk-224SPVON-B8gxtXpy.js +1 -0
- package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +127 -0
- package/web/assets/chunk-2SREHG4O-Dip42xOq.js +1 -0
- package/web/assets/chunk-4RFN2BYJ-DHHWuC-n.js +1 -0
- package/web/assets/chunk-66DQ2XMT-CM0xjFAN.js +1 -0
- package/web/assets/chunk-6BELYETK-ChsYtfHW.js +1 -0
- package/web/assets/chunk-6L755F7B-CMhLBxi2.js +1 -0
- package/web/assets/chunk-7CWYLC5S-DRgGkkpF.js +2 -0
- package/web/assets/chunk-A7VWPJGB-B4O3oQdQ.js +1 -0
- package/web/assets/chunk-BI6VK774-D0oaWk8V.js +1 -0
- package/web/assets/chunk-D6VWDJW2-BxcBdZ9c.js +2 -0
- package/web/assets/chunk-DMV4VAQV-Bn6WXDSX.js +4 -0
- package/web/assets/chunk-E5QJAATJ-dh-5CtIV.js +2 -0
- package/web/assets/chunk-EQFTRU2I-1ix7TzW9.js +2 -0
- package/web/assets/chunk-FWYVLQTC-BgDItRzJ.js +1 -0
- package/web/assets/chunk-HNC4WDU7-DoU3KnA7.js +1 -0
- package/web/assets/chunk-L5GCOVLC-CE2w8Nm_.js +161 -0
- package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +321 -0
- package/web/assets/chunk-LORZLZWG-B57uGw2N.js +88 -0
- package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +62 -0
- package/web/assets/chunk-NV3KIAZN-5yvcpMiu.js +1 -0
- package/web/assets/chunk-OIYT25JQ-CQ6KOZGX.js +1 -0
- package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +10 -0
- package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +156 -0
- package/web/assets/chunk-RRFMTAIC-CMN0wcYA.js +1 -0
- package/web/assets/{chunk-RLI5ZMPA-CkXZ0y0U.js → chunk-SATU7PGQ-B1zhgOvc.js} +1 -1
- package/web/assets/chunk-STOV2HOB-GnExfzIX.js +1 -0
- package/web/assets/chunk-SZD42YQK-ijyKKVr1.js +70 -0
- package/web/assets/chunk-TFPGFQPA-Dj6a-0pC.js +231 -0
- package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +2 -0
- package/web/assets/chunk-TZUXEDM2-B7p9AcTw.js +1 -0
- package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +1 -0
- package/web/assets/{chunk-6764PJDD-C7xxk063.js → chunk-VE5CLXGZ-C1vB7wpY.js} +1 -1
- package/web/assets/chunk-VJFVEZTB-CX66F2ep.js +206 -0
- package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +1 -0
- package/web/assets/chunk-WJBAP47W-BckNkuEN.js +1 -0
- package/web/assets/chunk-XNMVGMAZ-Cg_LnPtj.js +1 -0
- package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +1 -0
- package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +1 -0
- package/web/assets/{cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js → cose-bilkent-RZA4XIPR-BHpK4Crp.js} +1 -1
- package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +1 -0
- package/web/assets/cynefinDiagram-TR7LZUCG-C3Iar9lZ.js +62 -0
- package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +4 -0
- package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +30 -0
- package/web/assets/diagram-JCD7PQ7C-DC5-9FRr.js +24 -0
- package/web/assets/diagram-KFBZAVDW-Dfmf_4ti.js +3 -0
- package/web/assets/diagram-L7DVE3PN-GIRyVUtt.js +41 -0
- package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +24 -0
- package/web/assets/ebnfDiagram-DRHRQJWO-D8_CI4ZF.js +1 -0
- package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +85 -0
- package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +1 -0
- package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +1 -0
- package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +292 -0
- package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +1 -0
- package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +106 -0
- package/web/assets/{index-B4eB4dNZ.js → index-BBNl0qfX.js} +51 -51
- package/web/assets/index-CJDpyH-n.css +2 -0
- package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +1 -0
- package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +2 -0
- package/web/assets/{ishikawaDiagram-BNXS4ZKH-BLjivjXL.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +6 -6
- package/web/assets/{journeyDiagram-M6C3CM3L-Cetgs3NH.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +6 -6
- package/web/assets/{kanban-definition-75IXJCU3-DMlCaIpf.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +27 -27
- package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
- package/web/assets/{mindmap-definition-2TDM6QVE-B4GbXQBc.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +29 -29
- package/web/assets/node-Ct_zna8U.js +8 -0
- package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +1 -0
- package/web/assets/pegDiagram-YKIO5C6U-QGeQLEq2.js +1 -0
- package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +1 -0
- package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +39 -0
- package/web/assets/preload-helper-Czpn1I53.js +1 -0
- package/web/assets/{quadrantDiagram-VICAPDV7-B1TQnlm0.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +6 -6
- package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +1 -0
- package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +1 -0
- package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +1 -0
- package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +1 -0
- package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +1 -0
- package/web/assets/railroadDiagram-M77LTMSB-AXu4vxk_.js +1 -0
- package/web/assets/requirementDiagram-RASO5HTO-B-l8InpK.js +84 -0
- package/web/assets/sankeyDiagram-F32LOJ6L-Kd7zjJgX.js +40 -0
- package/web/assets/sdk-CzHHH8tD.js +37 -0
- package/web/assets/sequenceDiagram-URATNSBD-BlcdY9DS.js +162 -0
- package/web/assets/sizeCapture-5GORAGP4-BEqQzsxs.js +1 -0
- package/web/assets/src-C5sx_gMp.js +1 -0
- package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +1 -0
- package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +1 -0
- package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +2 -0
- package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +8 -0
- package/web/assets/timeline-definition-WJXWRH4I-DUfp1R3E.js +120 -0
- package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +1 -0
- package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +1 -0
- package/web/assets/vennDiagram-K3VCMQLI-Bj-FN-XS.js +34 -0
- package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +1 -0
- package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +78 -0
- package/web/assets/xychartDiagram-5VRUVLCW-CK_rbSWE.js +7 -0
- package/web/index.html +17 -15
- package/dist/core/ingestion/languages/python/index-stats.d.ts +0 -18
- package/dist/core/ingestion/languages/python/index-stats.js +0 -25
- package/skills/gitnexus-pr-review.md +0 -163
- package/web/assets/ProcessFlowModal-Dna7GkwO.js +0 -22
- package/web/assets/agent-DNYDy-KA.js +0 -660
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
- package/web/assets/architectureDiagram-UL44E2DR-BU5ZRITg.js +0 -36
- package/web/assets/blockDiagram-7IZFK4PR-Dut1BpTV.js +0 -132
- package/web/assets/chunk-2T2R6R2M-pkw2oXHH.js +0 -4
- package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +0 -1
- package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +0 -321
- package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +0 -159
- package/web/assets/chunk-67TQ5CYL-zxhDWgyF.js +0 -124
- package/web/assets/chunk-7J6CGLKN-AmkN8jJN.js +0 -10
- package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +0 -1
- package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +0 -1
- package/web/assets/chunk-INKRHTLW-D9BM9HWZ.js +0 -70
- package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
- package/web/assets/chunk-KGFNY3KK-tD2F6wxK.js +0 -62
- package/web/assets/chunk-KGYTTC2M-zm6n242I.js +0 -1
- package/web/assets/chunk-KNLZD3CH-BGlP6X9R.js +0 -1
- package/web/assets/chunk-LCXTWHL2-Ba9JK-6F.js +0 -231
- package/web/assets/chunk-LII3EMHJ-EGx-eBIu.js +0 -1
- package/web/assets/chunk-LRIF4GLE-C3_PqUBq.js +0 -1
- package/web/assets/chunk-QA3QBVWF-D4cSJBf6.js +0 -2
- package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
- package/web/assets/chunk-RG4AUYOV-OqBBMwuQ.js +0 -206
- package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
- package/web/assets/chunk-T2UQINTJ-BJusEiGe.js +0 -1
- package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +0 -1
- package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +0 -1
- package/web/assets/chunk-UY5QBCOK-BCpUlARQ.js +0 -1
- package/web/assets/chunk-VU6ZFW4Y-BeXVk45_.js +0 -2
- package/web/assets/chunk-ZXARS5L4-BI_qR2Nm.js +0 -1
- package/web/assets/classDiagram-KGZ6W3CR-D9zSIg0x.js +0 -1
- package/web/assets/classDiagram-v2-72OJOZXJ-D9zSIg0x.js +0 -1
- package/web/assets/dagre-ND4H6XIP-CpcV5kbl.js +0 -4
- package/web/assets/diagram-3NCE3AQN-6SMxBRpj.js +0 -43
- package/web/assets/diagram-GF46GFSD-BZEdNcRZ.js +0 -24
- package/web/assets/diagram-HNR7UZ2L-DxKW2a2Y.js +0 -3
- package/web/assets/diagram-QXG6HAR7-HfTHcXX_.js +0 -24
- package/web/assets/diagram-WEQXMOUZ-CyijUS8r.js +0 -10
- package/web/assets/erDiagram-L5TCEMPS-D0fvpWEX.js +0 -85
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
- package/web/assets/flowDiagram-H6V6AXG4-Bvr9bbhk.js +0 -162
- package/web/assets/ganttDiagram-JCBTUEKG-TzODrLzv.js +0 -292
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
- package/web/assets/gitGraphDiagram-S2ZK5IYY-ONQSwJIY.js +0 -106
- package/web/assets/index-CX_fADmQ.css +0 -2
- package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +0 -1
- package/web/assets/infoDiagram-3YFTVSEB-DIPVUIQ6.js +0 -2
- package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
- package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +0 -1
- package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +0 -1
- package/web/assets/pieDiagram-CU6KROY3-D3YC_xyg.js +0 -30
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
- package/web/assets/requirementDiagram-JXO7QTGE-f8wczLQf.js +0 -84
- package/web/assets/sankeyDiagram-URQDO5SZ-BTxzG5j0.js +0 -40
- package/web/assets/sequenceDiagram-VS2MUI6T-DuamM-IR.js +0 -162
- package/web/assets/src-BNCXICdA.js +0 -1
- package/web/assets/stateDiagram-7D4R322I-Ch2pEUcw.js +0 -1
- package/web/assets/stateDiagram-v2-36443NZ5-7ANuoZLL.js +0 -1
- package/web/assets/timeline-definition-O6YCAMPW-07BR8R8G.js +0 -120
- package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +0 -1
- package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +0 -1
- package/web/assets/vennDiagram-MWXL3ELB-BQX2ossk.js +0 -34
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
- package/web/assets/wardleyDiagram-CUQ6CDDI-CGIJBBiK.js +0 -78
- package/web/assets/xychartDiagram-N2JHSOCM-B3HNMuWp.js +0 -7
- /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Context ledger
|
|
2
|
+
|
|
3
|
+
The ledger is gitnexus-plan's working memory. It exists to make repeated
|
|
4
|
+
investigation impossible-by-discipline: **before every GitNexus call and
|
|
5
|
+
every repo file read, check it.** Keep it as structured notes in your working
|
|
6
|
+
context (or a scratchpad file _outside the repo_ for very long sessions); it
|
|
7
|
+
is never published verbatim — the plan and context pack are distilled from
|
|
8
|
+
it. This skill's own reference files are exempt from ledger bookkeeping.
|
|
9
|
+
|
|
10
|
+
## Schema
|
|
11
|
+
|
|
12
|
+
```yaml
|
|
13
|
+
context_ledger:
|
|
14
|
+
task:
|
|
15
|
+
original_request: ''
|
|
16
|
+
interpreted_goal: ''
|
|
17
|
+
category: '' # Phase 0 classification
|
|
18
|
+
acceptance_criteria: []
|
|
19
|
+
|
|
20
|
+
verified_at_commit:
|
|
21
|
+
'' # target repo HEAD, recorded once in Phase 1;
|
|
22
|
+
# every line citation in the plan pins to it
|
|
23
|
+
|
|
24
|
+
evidence_provenance: {} # required immutable working snapshot; populate
|
|
25
|
+
# exactly from context-pack.md's normative schema
|
|
26
|
+
|
|
27
|
+
index_refresh:
|
|
28
|
+
'' # analyze --index-only runs: command + outcome
|
|
29
|
+
# (or "skipped: <reason>"). Budget is
|
|
30
|
+
# owned by SKILL.md Phase 1: one refresh plus
|
|
31
|
+
# at most one Phase 3 --pdg upgrade per session
|
|
32
|
+
|
|
33
|
+
established_facts: [] # each with its evidence source
|
|
34
|
+
|
|
35
|
+
symbols: # budgets count active (primary/related) only;
|
|
36
|
+
# discards are free — but on budget overflow,
|
|
37
|
+
# discard something before promoting
|
|
38
|
+
- name: ''
|
|
39
|
+
kind: ''
|
|
40
|
+
file: ''
|
|
41
|
+
relevance: 'primary | related | discarded'
|
|
42
|
+
source_verified: false # flipped in Phase 4; required before naming in Proposed Changes
|
|
43
|
+
|
|
44
|
+
files_read:
|
|
45
|
+
- file: ''
|
|
46
|
+
ranges: [] # e.g. ["120-188"]
|
|
47
|
+
purpose: ''
|
|
48
|
+
|
|
49
|
+
gitnexus_queries:
|
|
50
|
+
- query: '' # tool + args
|
|
51
|
+
purpose: '' # the planning question it answers
|
|
52
|
+
conclusion: '' # one line; details stay in working memory
|
|
53
|
+
key_output: '' # one-line raw quote when the plan leans on this result
|
|
54
|
+
|
|
55
|
+
pdg_slices:
|
|
56
|
+
- symbol: ''
|
|
57
|
+
purpose: ''
|
|
58
|
+
conclusion: ''
|
|
59
|
+
|
|
60
|
+
unresolved_questions: []
|
|
61
|
+
assumptions: [] # explicit, carried into plan §12
|
|
62
|
+
decisions: [] # with rationale, carried into plan §6/§7
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Evidence provenance
|
|
66
|
+
|
|
67
|
+
`context-pack.md` is the sole normative emitted field schema, and
|
|
68
|
+
`evidence-provenance.md` plus `../scripts/evidence-provenance.mjs` are the
|
|
69
|
+
normative byte contract and implementation. Keep the helper's exact schema-2
|
|
70
|
+
output in the ledger; do not redefine, abbreviate, or independently reproduce
|
|
71
|
+
its canonicalization here.
|
|
72
|
+
|
|
73
|
+
Build `evidence_provenance` immediately before composing the plan, after all
|
|
74
|
+
source verification, by invoking the helper exactly as described in
|
|
75
|
+
`evidence-provenance.md`. It is a versioned, canonical snapshot of both the
|
|
76
|
+
whole working tree and every path that supports a plan citation:
|
|
77
|
+
|
|
78
|
+
- `global_dirty_digest` is SHA-256 over the helper's versioned, NUL-framed
|
|
79
|
+
records for
|
|
80
|
+
**every dirty repo-relative path**, not only cited paths. Each record includes
|
|
81
|
+
path, state, object kind, every available layer digest, and both endpoints of
|
|
82
|
+
a rename. Overlapping porcelain facts for one path are merged; for example,
|
|
83
|
+
a staged deletion plus a recreated untracked file is `mixed` and retains
|
|
84
|
+
both its Git-backed and untracked layers. States are `staged`, `unstaged`,
|
|
85
|
+
`untracked`, `deleted`, `renamed`, or `mixed`. Exclude only this run's
|
|
86
|
+
normalized repo-relative generated plan path so writing the plan cannot
|
|
87
|
+
invalidate its own evidence; do not exclude the rest of `docs/plans/`.
|
|
88
|
+
- `cited_path_manifest` is sorted by normalized repo-relative path and
|
|
89
|
+
includes every path cited by a `[verified]` claim or named as evidence in
|
|
90
|
+
the context pack. Record clean paths too. A path entry has this shape:
|
|
91
|
+
|
|
92
|
+
```yaml
|
|
93
|
+
- path: 'src/example.ts'
|
|
94
|
+
object_kind: # each layer: regular | symlink | gitlink | directory | absent
|
|
95
|
+
head: 'regular'
|
|
96
|
+
index: 'regular'
|
|
97
|
+
worktree: 'regular'
|
|
98
|
+
untracked: 'absent'
|
|
99
|
+
state: 'clean | staged | unstaged | untracked | deleted | renamed | mixed | absent'
|
|
100
|
+
rename_from: null
|
|
101
|
+
rename_to: null
|
|
102
|
+
head_digest: 'sha256:<hex> | absent'
|
|
103
|
+
index_digest: 'sha256:<hex> | absent'
|
|
104
|
+
worktree_digest: 'sha256:<hex> | absent'
|
|
105
|
+
untracked_digest: 'sha256:<hex> | absent'
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Use Git object contents for HEAD and index digests and filesystem bytes for
|
|
109
|
+
worktree/untracked digests; never confuse an absent layer with an empty file.
|
|
110
|
+
Hash symlink targets as link text and gitlinks as object IDs. If a cited path
|
|
111
|
+
cannot be classified or read, the plan must mark the evidence unavailable
|
|
112
|
+
instead of emitting a digest it did not prove.
|
|
113
|
+
|
|
114
|
+
## Reread rules
|
|
115
|
+
|
|
116
|
+
Do **not** repeat a query or reread a source range unless one of:
|
|
117
|
+
|
|
118
|
+
- the previous result was incomplete for the question at hand;
|
|
119
|
+
- the source is known to have changed (an edit happened);
|
|
120
|
+
- validation exposed a contradiction between graph and source.
|
|
121
|
+
|
|
122
|
+
**Allowed repeats** (deliberate escalations, not violations):
|
|
123
|
+
|
|
124
|
+
- `summaryOnly: true` → full drill-down on the same `impact` target;
|
|
125
|
+
- an `ambiguous` result retried once with `kind` / `file_path` / uid narrowing;
|
|
126
|
+
- the same tool re-run with a changed parameter that answers a _new_ planning
|
|
127
|
+
question (e.g. `pdg_query` `controls` then `flows` on one function).
|
|
128
|
+
|
|
129
|
+
When a repeat is justified, note in the ledger _why_ the earlier entry was
|
|
130
|
+
insufficient. A ledger full of near-duplicate queries is the failure signal —
|
|
131
|
+
stop and plan with what is established.
|
|
132
|
+
|
|
133
|
+
## Discarding
|
|
134
|
+
|
|
135
|
+
Symbols and queries that turned out irrelevant stay in the ledger marked
|
|
136
|
+
`discarded` with a one-line reason. That is what prevents re-walking dead
|
|
137
|
+
ends later in the session.
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Implementation context pack
|
|
2
|
+
|
|
3
|
+
Section 11 of the plan. The stable, machine-readable contract a follow-up
|
|
4
|
+
implementation agent (`gitnexus-work`, or any executor) consumes to start
|
|
5
|
+
work **without repeating the investigation**. Distilled from the ledger;
|
|
6
|
+
every entry traceable to verified evidence.
|
|
7
|
+
|
|
8
|
+
**Compact plans emit the mini-pack** — only: `task_summary`,
|
|
9
|
+
`evidence_provenance`, `files_to_modify`, `tests`,
|
|
10
|
+
`verification_commands`, `pdg_constraints` (only when a slice actually
|
|
11
|
+
ran), `assumptions`, `open_questions`, `avoid`. Full plans emit every
|
|
12
|
+
field. Field semantics are identical in both; `evidence_provenance` is
|
|
13
|
+
mandatory in both forms. `gitnexus-work` treats absent optional fields as
|
|
14
|
+
empty, not as errors.
|
|
15
|
+
|
|
16
|
+
## Schema
|
|
17
|
+
|
|
18
|
+
This is the sole normative emitted `evidence_provenance` field schema. The
|
|
19
|
+
portable byte contract and executable serializer live in
|
|
20
|
+
`evidence-provenance.md` and `../scripts/evidence-provenance.mjs`; sibling
|
|
21
|
+
documents must reference them rather than reimplementing canonical bytes.
|
|
22
|
+
|
|
23
|
+
```yaml
|
|
24
|
+
implementation_context:
|
|
25
|
+
task_summary: ''
|
|
26
|
+
acceptance_criteria: []
|
|
27
|
+
|
|
28
|
+
evidence_provenance:
|
|
29
|
+
schema_version: 2
|
|
30
|
+
head_commit: '' # full commit SHA that source citations pin to
|
|
31
|
+
# normalized repo-relative docs/plans/<date>-gitnexus-plan-<3-5-word-slug>.md;
|
|
32
|
+
# safely written; exact path excluded from global_dirty_digest
|
|
33
|
+
generated_plan_path: ''
|
|
34
|
+
global_dirty_digest:
|
|
35
|
+
algorithm: 'sha256'
|
|
36
|
+
canonicalization: 'gitnexus-evidence-provenance-v2 NUL-framed UTF-8 records'
|
|
37
|
+
value: '' # digest only; do not embed the whole dirty-path manifest
|
|
38
|
+
cited_path_manifest: # sorted by normalized repo-relative path
|
|
39
|
+
- path: ''
|
|
40
|
+
object_kind: # per layer: regular | symlink | gitlink | directory | absent
|
|
41
|
+
head: ''
|
|
42
|
+
index: ''
|
|
43
|
+
worktree: ''
|
|
44
|
+
untracked: ''
|
|
45
|
+
state: 'clean | staged | unstaged | untracked | deleted | renamed | mixed | absent'
|
|
46
|
+
rename_from: null
|
|
47
|
+
rename_to: null
|
|
48
|
+
head_digest: 'sha256:<hex> | absent'
|
|
49
|
+
index_digest: 'sha256:<hex> | absent'
|
|
50
|
+
worktree_digest: 'sha256:<hex> | absent'
|
|
51
|
+
untracked_digest: 'sha256:<hex> | absent'
|
|
52
|
+
|
|
53
|
+
primary_symbols:
|
|
54
|
+
- symbol: ''
|
|
55
|
+
file: ''
|
|
56
|
+
lines: ''
|
|
57
|
+
role: ''
|
|
58
|
+
|
|
59
|
+
related_symbols:
|
|
60
|
+
- symbol: ''
|
|
61
|
+
relationship: '' # CALLS / IMPORTS / EXTENDS / test-of / ...
|
|
62
|
+
relevance: ''
|
|
63
|
+
|
|
64
|
+
execution_path: [] # ordered prose steps, from §2/§5
|
|
65
|
+
|
|
66
|
+
pdg_constraints: # from the PDG slice; empty + note if no layer
|
|
67
|
+
- description: ''
|
|
68
|
+
affected_statements: [] # "<file>:<line>" refs
|
|
69
|
+
implementation_consequence: ''
|
|
70
|
+
|
|
71
|
+
architectural_patterns:
|
|
72
|
+
- pattern: ''
|
|
73
|
+
example_location: '' # repo-relative file (+ symbol)
|
|
74
|
+
usage_guidance: ''
|
|
75
|
+
|
|
76
|
+
files_to_modify:
|
|
77
|
+
- file: ''
|
|
78
|
+
symbols: []
|
|
79
|
+
intended_change: ''
|
|
80
|
+
|
|
81
|
+
tests:
|
|
82
|
+
- file: '' # existing file to update, or new path to create
|
|
83
|
+
scenarios: [] # input → action → expected outcome
|
|
84
|
+
|
|
85
|
+
verification_commands: [] # real commands verified to exist AND be runnable —
|
|
86
|
+
# prefer npm/CI scripts that carry their pre-hooks
|
|
87
|
+
|
|
88
|
+
risks: []
|
|
89
|
+
assumptions: [] # faithful condensation of plan §12 assumptions;
|
|
90
|
+
# each entry names WHAT to check and HOW —
|
|
91
|
+
# gitnexus-work re-verifies them before executing
|
|
92
|
+
open_questions: [] # faithful condensation of plan §12 open questions
|
|
93
|
+
|
|
94
|
+
avoid:
|
|
95
|
+
- 'Do not repeat full repository discovery'
|
|
96
|
+
- 'Do not replace established patterns without evidence'
|
|
97
|
+
# + task-specific prohibitions discovered during planning
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Must not contain
|
|
101
|
+
|
|
102
|
+
- full files;
|
|
103
|
+
- the repository-wide raw dirty-path manifest (store only its canonical
|
|
104
|
+
`global_dirty_digest`; detailed entries are bounded to cited paths);
|
|
105
|
+
- large raw GitNexus responses;
|
|
106
|
+
- unfiltered PDG dumps;
|
|
107
|
+
- duplicate code excerpts (cite `file:line`, don't re-quote);
|
|
108
|
+
- speculative implementation details presented as facts.
|
|
109
|
+
|
|
110
|
+
## Stability contract
|
|
111
|
+
|
|
112
|
+
Field names above are the interface consumed by `gitnexus-work` (fields it
|
|
113
|
+
does not act on directly travel as executor context). Add fields
|
|
114
|
+
freely; do not rename or repurpose existing ones. `assumptions` and `avoid`
|
|
115
|
+
are load-bearing: an executor treats `assumptions` as things to re-verify
|
|
116
|
+
cheaply before relying on them, and `avoid` as hard constraints.
|
|
117
|
+
`evidence_provenance` is also load-bearing: its version, global digest, and
|
|
118
|
+
sorted cited-path manifest let the executor distinguish commit drift from
|
|
119
|
+
staged, unstaged, untracked, deleted, renamed, mixed, or absent working-tree
|
|
120
|
+
evidence. Legacy packs that lack it or use schema 1 require a conservative
|
|
121
|
+
schema-2 re-anchor; they are not interpreted as a clean tree.
|
|
122
|
+
`generated_plan_path` is always normalized, relative to the target repo, and
|
|
123
|
+
scoped to the generated-plan filename shape under `docs/plans/`; schema 2 has
|
|
124
|
+
no external-output representation. An executor must load the plan with the
|
|
125
|
+
helper's descriptor-anchored `read-plan` command and require this field to
|
|
126
|
+
equal the receipt's canonical target-repo-relative path byte-for-byte.
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
# Evidence provenance serializer v2 and safe plan writer
|
|
2
|
+
|
|
3
|
+
This file is the normative byte contract for `evidence_provenance` schema 2.
|
|
4
|
+
The adjacent `scripts/evidence-provenance.mjs` is its executable definition.
|
|
5
|
+
`gitnexus-plan` and `gitnexus-work` carry byte-identical copies so either skill
|
|
6
|
+
can produce the same snapshot without relying on the other skill's install.
|
|
7
|
+
It is also the only supported write boundary for a generated plan. Never
|
|
8
|
+
recreate the digest with an ad-hoc shell pipeline or write the plan destination
|
|
9
|
+
directly.
|
|
10
|
+
|
|
11
|
+
## Invocation
|
|
12
|
+
|
|
13
|
+
From the target repository root, run the helper belonging to the active skill:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
node <skill-dir>/scripts/evidence-provenance.mjs read-plan \
|
|
17
|
+
--repo "$PWD" \
|
|
18
|
+
--generated-plan docs/plans/YYYY-MM-DD-gitnexus-plan-example-change-plan.md
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
`read-plan` is the only supported way to load an existing plan for Deepen or
|
|
22
|
+
execution. It emits a JSON receipt with the canonical `generated_plan_path`,
|
|
23
|
+
`bytes_read`, exact `plan_bytes_base64`, and `plan_digest` (`sha256:<hex>`).
|
|
24
|
+
Decode and consume those exact bytes; do not reopen the lexical path. Retain
|
|
25
|
+
the canonical path and digest together for the complete Deepen session; a
|
|
26
|
+
receipt for one path never authorizes another, even when their bytes match.
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
node <skill-dir>/scripts/evidence-provenance.mjs snapshot \
|
|
30
|
+
--repo "$PWD" \
|
|
31
|
+
--schema-version 2 \
|
|
32
|
+
--generated-plan docs/plans/YYYY-MM-DD-gitnexus-plan-example-change-plan.md \
|
|
33
|
+
--cited src/one.ts \
|
|
34
|
+
--cited test/one.test.ts
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Pass one `--cited` argument for every cited path. The helper emits the complete
|
|
38
|
+
JSON value for `evidence_provenance`; copy that value without rewriting fields.
|
|
39
|
+
`gitnexus-work` passes the plan's `schema_version`, `generated_plan_path`, and
|
|
40
|
+
every path in `cited_path_manifest`. Schema 1 is legacy and deliberately
|
|
41
|
+
rejected, so the executor must conservatively re-anchor it under schema 2.
|
|
42
|
+
|
|
43
|
+
After the snapshot is in the fully composed document, publish its exact UTF-8
|
|
44
|
+
bytes through the same helper:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
node <skill-dir>/scripts/evidence-provenance.mjs write-plan \
|
|
48
|
+
--repo "$PWD" \
|
|
49
|
+
--generated-plan docs/plans/YYYY-MM-DD-gitnexus-plan-example-change-plan.md \
|
|
50
|
+
< /path/to/outside-repo-scratch-plan.md
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
For Deepen only:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
node <skill-dir>/scripts/evidence-provenance.mjs write-plan \
|
|
57
|
+
--repo "$PWD" \
|
|
58
|
+
--generated-plan docs/plans/YYYY-MM-DD-gitnexus-plan-example-change-plan.md \
|
|
59
|
+
--replace \
|
|
60
|
+
--expected-plan-path docs/plans/YYYY-MM-DD-gitnexus-plan-example-change-plan.md \
|
|
61
|
+
--expected-plan-digest 'sha256:<digest-from-read-plan>' \
|
|
62
|
+
< /path/to/outside-repo-scratch-plan.md
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Initial planning never passes `--replace`; an existing destination is an
|
|
66
|
+
error. Deepen mode rewrites the same path by adding `--replace`,
|
|
67
|
+
`--expected-plan-path <generated_plan_path-from-read-plan>`, and
|
|
68
|
+
`--expected-plan-digest <plan_digest-from-that-same-receipt>`. Standard input must be
|
|
69
|
+
valid UTF-8 and at most 16 MiB. A successful write prints a JSON receipt with
|
|
70
|
+
the normalized `generated_plan_path` and `bytes_written`. A successful Deepen
|
|
71
|
+
write also returns `prior_plan_backup_git_path`, a durable Git-admin path for
|
|
72
|
+
the displaced plan. The CLI rejects every option that does not apply to its
|
|
73
|
+
selected command; the direct API likewise requires literal booleans and exact
|
|
74
|
+
digest strings rather than truthy coercion.
|
|
75
|
+
|
|
76
|
+
## Path contract
|
|
77
|
+
|
|
78
|
+
Every Git path and CLI path must be valid UTF-8, already normalized to Unicode
|
|
79
|
+
NFC, and a nonempty POSIX repo-relative path. NUL, backslash, absolute/drive
|
|
80
|
+
paths, empty components, and `.` or `..` components are rejected. The helper
|
|
81
|
+
does not silently repair or alias them. Invalid UTF-8 from Git, non-NFC names,
|
|
82
|
+
unmerged index stages, unsupported Git modes, sockets/devices/FIFOs, unreadable
|
|
83
|
+
objects, symlink traversal in a parent path component, or a repository mutation
|
|
84
|
+
observed during the snapshot fail closed.
|
|
85
|
+
|
|
86
|
+
The generated-plan path is always repo-relative under schema 2. Snapshot
|
|
87
|
+
exclusion and writing require exactly
|
|
88
|
+
`docs/plans/YYYY-MM-DD-gitnexus-plan-<3-5-word-kebab-slug>.md`, including a
|
|
89
|
+
valid calendar date; they cannot target `.git`, source, configuration, or an
|
|
90
|
+
arbitrary repo file. For compatibility with documented and legacy plans,
|
|
91
|
+
`read-plan` accepts normalized files matching `docs/plans/*gitnexus-plan*.md`,
|
|
92
|
+
while retaining the same descriptor-anchored containment checks. That read
|
|
93
|
+
compatibility does not widen the writer. External output has no schema-2
|
|
94
|
+
representation. The snapshot exclusion is one exact normalized path
|
|
95
|
+
comparison. No glob, directory, basename, or `docs/plans/`-wide exclusion is
|
|
96
|
+
permitted. If the exact path is a rename endpoint, only that endpoint record is
|
|
97
|
+
excluded.
|
|
98
|
+
|
|
99
|
+
## Safe existing-plan read contract
|
|
100
|
+
|
|
101
|
+
`read-plan` fails closed unless the host platform can resolve names against a
|
|
102
|
+
held directory descriptor: Linux `/proc/self/fd` with `O_DIRECTORY` and
|
|
103
|
+
`O_NOFOLLOW`, or macOS `O_DIRECTORY`/`O_NOFOLLOW`. Every other platform is
|
|
104
|
+
refused outright — an unverified read is not a degraded read, it is a different,
|
|
105
|
+
racy operation. It resolves the exact Git top-level, opens the
|
|
106
|
+
repository root and every plan parent as held no-follow directory descriptors,
|
|
107
|
+
rejects missing, symlink, non-directory, and escaping parents, and opens the
|
|
108
|
+
leaf with `O_NOFOLLOW`. It reads at most 16 MiB from that held file descriptor,
|
|
109
|
+
requires valid UTF-8, hashes the exact bytes, then proves both the parent chain
|
|
110
|
+
and lexical leaf still name the same held objects before returning its receipt.
|
|
111
|
+
Neither Deepen nor work may parse bytes obtained before or outside this receipt.
|
|
112
|
+
|
|
113
|
+
## Safe generated-plan write contract
|
|
114
|
+
|
|
115
|
+
The writer fails closed unless the host platform offers `O_DIRECTORY` and
|
|
116
|
+
`O_NOFOLLOW`, plus `/proc/self/fd` on Linux. It spawns no interpreter and loads
|
|
117
|
+
no native code: publication is `link(2)`, which is atomic, fails `EEXIST` when
|
|
118
|
+
the destination name is taken, and refuses a symlinked destination without
|
|
119
|
+
following it — the same no-replace guarantee `renameat2(RENAME_NOREPLACE)` and
|
|
120
|
+
`renameatx_np(RENAME_EXCL)` provide, available through `fs.linkSync` on every
|
|
121
|
+
supported platform. The temporary name is unlinked once the link succeeds; the
|
|
122
|
+
published file is the same inode the writer created and verified, so every
|
|
123
|
+
identity check downstream holds by construction. A link that succeeds followed
|
|
124
|
+
by an unlink that fails leaves the plan published and is reported as success,
|
|
125
|
+
because it is one. The plan parent and the
|
|
126
|
+
repository's Git-admin directory must also share a filesystem. It resolves
|
|
127
|
+
the target repository's exact Git top-level, opens that root and every
|
|
128
|
+
destination parent as held no-follow directory descriptors, creates missing
|
|
129
|
+
parents relative to those descriptors, and proves the descriptor and lexical
|
|
130
|
+
chains still identify the same directories at the write boundary. A symlink
|
|
131
|
+
or non-directory parent, an escaping resolved path, a symlink/non-regular final
|
|
132
|
+
target, or a parent swap is an error.
|
|
133
|
+
|
|
134
|
+
The writer creates a random exclusive temporary file relative to the held final
|
|
135
|
+
parent descriptor and keeps its no-follow descriptor open. It writes and
|
|
136
|
+
flushes the bytes, binds the temporary name to the opened inode, and hashes the
|
|
137
|
+
open file before publication. Immediately before publication it revalidates
|
|
138
|
+
the parent and the temporary path, inode, size, and digest. Publication links
|
|
139
|
+
the temporary name to the destination relative to the held directory
|
|
140
|
+
descriptor, which fails rather than replaces if the destination is taken.
|
|
141
|
+
Initial mode therefore cannot overwrite a destination that appears after the
|
|
142
|
+
absent check.
|
|
143
|
+
The writer then flushes the directory and revalidates the committed path by
|
|
144
|
+
opening it with `O_NOFOLLOW`, hashing both the original temporary fd and the
|
|
145
|
+
path-bound fd, and performing a second descriptor-anchored path identity check
|
|
146
|
+
after hashing. A detected mutation or replacement aborts instead of accepting
|
|
147
|
+
mixed-era output.
|
|
148
|
+
|
|
149
|
+
### Linux anchors, macOS verifies
|
|
150
|
+
|
|
151
|
+
The two platforms reach the same destination by different proofs, and the
|
|
152
|
+
difference is real enough to state rather than smooth over.
|
|
153
|
+
|
|
154
|
+
On Linux every name resolves through `/proc/self/fd/<fd>/<child>`, a magic link
|
|
155
|
+
the kernel resolves against the inode the descriptor already holds. The names
|
|
156
|
+
above it are never re-walked, so an attacker who renames a parent between the
|
|
157
|
+
check and the use cannot redirect the operation. The race is impossible, not
|
|
158
|
+
merely detected.
|
|
159
|
+
|
|
160
|
+
macOS has no such path. `/dev/fd/<fd>` is a devfs node, not a magic link: it can
|
|
161
|
+
be opened, but nothing can be resolved through it. `open("/dev/fd/<fd>/child")`
|
|
162
|
+
returns `ENOENT`, and `realpath` of it returns `/dev/fd/<fd>` rather than the
|
|
163
|
+
directory's path — measured on macOS 26, not inferred. Node exposes no `openat`,
|
|
164
|
+
no `dir_fd` parameter, and no FFI, so on macOS the writer resolves names
|
|
165
|
+
lexically with `O_NOFOLLOW` at every component, holds an open descriptor on
|
|
166
|
+
every directory in the chain for the whole operation, and proves before *and*
|
|
167
|
+
after each step that the chain still names exactly the inodes it is holding.
|
|
168
|
+
Holding the descriptors is what makes the recorded inode numbers trustworthy:
|
|
169
|
+
an open descriptor pins its inode, so a freed number cannot be recycled beneath
|
|
170
|
+
the walk.
|
|
171
|
+
|
|
172
|
+
What that buys is detection rather than prevention. A parent swapped inside the
|
|
173
|
+
window between a check and its use is caught by the check that follows, and the
|
|
174
|
+
operation aborts having written nothing — but on Linux it could not have
|
|
175
|
+
happened at all. No published byte escapes verification on either platform.
|
|
176
|
+
|
|
177
|
+
`--replace` accepts only a pre-existing regular file and is reserved for
|
|
178
|
+
Deepen; without it, accidental overwrite is rejected. It also requires the
|
|
179
|
+
exact canonical `generated_plan_path` and `plan_digest` from the same session's
|
|
180
|
+
`read-plan` receipt. The expected path must exactly equal the write
|
|
181
|
+
destination, so identical bytes from one plan cannot authorize another plan.
|
|
182
|
+
Immediately before
|
|
183
|
+
preservation, the writer hashes the still-held prior-plan fd and rejects any
|
|
184
|
+
digest, inode, or path mismatch, including same-inode edits and changes between
|
|
185
|
+
read and write. It then atomically moves the current destination without
|
|
186
|
+
replacement to a random `gitnexus-plan-backups/` file under the resolved
|
|
187
|
+
Git-admin directory and verifies the moved inode and digest against that held
|
|
188
|
+
fd. Only then does it publish the new plan with the same atomic no-replace
|
|
189
|
+
primitive. A destination that reappears at either boundary is left untouched.
|
|
190
|
+
|
|
191
|
+
Every newly created plan or vault directory is fsynced and then fsynced into
|
|
192
|
+
its containing directory. Every cross-directory preservation move fsyncs both
|
|
193
|
+
its source and destination directories before success or a recovery path is
|
|
194
|
+
reported. After temporary bytes exist, a failed publication or verification preserves
|
|
195
|
+
every available prior, displaced, unpublished, or intended plan in that
|
|
196
|
+
Git-admin vault before reporting failure. Each reported recovery is reopened
|
|
197
|
+
from a freshly resolved Git root and verified before the error names it as
|
|
198
|
+
`git-path:gitnexus-plan-backups/<random-name>`. Resolve that value with
|
|
199
|
+
`git rev-parse --git-path gitnexus-plan-backups/<random-name>`; never interpret
|
|
200
|
+
it as a repo-relative working-tree path. This remains valid if the held plan
|
|
201
|
+
parent was renamed after publication. The writer never reports recovery
|
|
202
|
+
through a stale lexical parent and never performs an identity-check-then-unlink
|
|
203
|
+
rollback that could delete a racer's replacement. Read-only or unsupported
|
|
204
|
+
checkouts produce a blocking error. Callers must not bypass the helper,
|
|
205
|
+
redirect to an external path, or weaken these checks.
|
|
206
|
+
|
|
207
|
+
## Canonical bytes
|
|
208
|
+
|
|
209
|
+
The `global_dirty_digest.value` is lowercase SHA-256 (without a `sha256:`
|
|
210
|
+
prefix) over this byte stream. All textual values are their exact UTF-8 bytes.
|
|
211
|
+
`NUL` below is one `0x00` byte.
|
|
212
|
+
|
|
213
|
+
1. Prefix fields, each followed by NUL, then one additional NUL:
|
|
214
|
+
`gitnexus-evidence-provenance`, `schema_version`, `2`.
|
|
215
|
+
2. Zero or more records sorted by unsigned lexicographic comparison of the
|
|
216
|
+
normalized path's UTF-8 bytes. Locale and filesystem order are forbidden.
|
|
217
|
+
3. Each record is `record` + NUL, then the following fixed-order sequence of
|
|
218
|
+
`field-name` + NUL + `field-value` + NUL pairs, then one additional NUL:
|
|
219
|
+
`path`, `state`, `head_kind`, `index_kind`, `worktree_kind`,
|
|
220
|
+
`untracked_kind`, `rename_from`, `rename_to`, `head_digest`,
|
|
221
|
+
`index_digest`, `worktree_digest`, `untracked_digest`.
|
|
222
|
+
4. The literal `absent` represents every unavailable rename endpoint, object
|
|
223
|
+
kind, and layer digest in canonical bytes. It is never an empty string.
|
|
224
|
+
|
|
225
|
+
The schema's canonicalization literal is exactly
|
|
226
|
+
`gitnexus-evidence-provenance-v2 NUL-framed UTF-8 records`. The fixed field
|
|
227
|
+
count plus the extra NUL after prefix/record makes framing unambiguous; values
|
|
228
|
+
cannot contain NUL. Duplicate normalized paths are rejected.
|
|
229
|
+
|
|
230
|
+
## Records, renames, and states
|
|
231
|
+
|
|
232
|
+
The raw dirty set comes from Git porcelain v2 with NUL termination, all
|
|
233
|
+
untracked files, submodule inspection enabled, a fixed 50% rename threshold,
|
|
234
|
+
and both `diff.renameLimit=0` and `status.renameLimit=0`, so repository config
|
|
235
|
+
cannot cap rename candidates. Raw porcelain facts that share a path are merged
|
|
236
|
+
into one canonical record. A rename contributes two endpoint facts:
|
|
237
|
+
|
|
238
|
+
- old endpoint: `path=<old>`, `rename_from=absent`, `rename_to=<new>`;
|
|
239
|
+
- new endpoint: `path=<new>`, `rename_from=<old>`, `rename_to=absent`.
|
|
240
|
+
|
|
241
|
+
Both normally have state `renamed`; record sorting, not old/new role,
|
|
242
|
+
determines order. A worktree-dirty rename destination or any endpoint that also
|
|
243
|
+
has another fact is `mixed`, with rename metadata retained. When either endpoint
|
|
244
|
+
is cited, the cited manifest expands to include both.
|
|
245
|
+
|
|
246
|
+
Ordinary `XY` status maps to `mixed` when index and worktree columns are both
|
|
247
|
+
dirty, otherwise `deleted` for a deletion, `staged` for index-only change, and
|
|
248
|
+
`unstaged` for worktree-only change. `?` is `untracked`. Multiple distinct
|
|
249
|
+
facts for the same path become `mixed`; a staged deletion plus a recreated file
|
|
250
|
+
therefore retains HEAD/index facts while the filesystem object is recorded in
|
|
251
|
+
the untracked layer. `? child/` is Git's embedded-directory marker: the trailing
|
|
252
|
+
slash is removed before path normalization and `child` is materialized as one
|
|
253
|
+
bounded directory object. A cited path outside the dirty set is `clean`,
|
|
254
|
+
`untracked` when it exists only outside Git layers, or `absent` when no layer
|
|
255
|
+
exists.
|
|
256
|
+
|
|
257
|
+
## Object and digest rules
|
|
258
|
+
|
|
259
|
+
Every present layer digest is `sha256:<lowercase-hex>`:
|
|
260
|
+
|
|
261
|
+
- HEAD regular/symlink: SHA-256 of the exact Git blob bytes. HEAD directory:
|
|
262
|
+
SHA-256 of the exact raw Git tree bytes. HEAD gitlink: SHA-256 of the ASCII
|
|
263
|
+
object ID stored by the tree.
|
|
264
|
+
- Index regular/symlink: SHA-256 of the stage-0 Git blob bytes. Index gitlink:
|
|
265
|
+
SHA-256 of its ASCII object ID. The index has no directory layer. Any
|
|
266
|
+
non-stage-0 entry is rejected.
|
|
267
|
+
- Tracked worktree regular: raw file bytes, opened without following symlinks.
|
|
268
|
+
Symlink: raw link-target bytes. Gitlink: ASCII object ID at the checked-out
|
|
269
|
+
nested HEAD, but only after `rev-parse --show-toplevel` proves that the
|
|
270
|
+
directory itself is the nested repository root, `HEAD` resolves there, and
|
|
271
|
+
porcelain v2 reports no staged, unstaged, untracked, or ignored nested changes. The
|
|
272
|
+
same root, HEAD, and clean-status proof is repeated by the mutation guard. A
|
|
273
|
+
dirty, empty, uninitialized, or parent-falling-through gitlink fails closed.
|
|
274
|
+
Directory: the v1 directory stream described below.
|
|
275
|
+
- A path absent from both HEAD and index places the filesystem object in the
|
|
276
|
+
`untracked` layer and marks `worktree` absent. A Git-backed path places it in
|
|
277
|
+
`worktree` and marks `untracked` absent. A missing layer uses literal
|
|
278
|
+
`absent` for both kind and digest; an empty file is the SHA-256 of zero bytes.
|
|
279
|
+
|
|
280
|
+
Filesystem directory bytes use prefix fields
|
|
281
|
+
`gitnexus-evidence-directory`, `schema_version`, `1`, the same NUL framing,
|
|
282
|
+
and recursive entries sorted by unsigned UTF-8 relative-path bytes. Each entry
|
|
283
|
+
has fixed fields `path`, `kind`, `digest`. A single bottom-up filesystem walk
|
|
284
|
+
visits each node once and returns each child digest plus the flattened subtree
|
|
285
|
+
needed to preserve those canonical bytes; links are never followed. When the
|
|
286
|
+
directory is proven to be an exact nested Git top-level, only its administrative
|
|
287
|
+
`.git` entry is excluded. Every other child, including working files and nested
|
|
288
|
+
directories, remains evidence.
|
|
289
|
+
|
|
290
|
+
Each directory object is bounded to 10,000 visited entries, depth 256, and 256
|
|
291
|
+
MiB of regular-file content. Exceeding a bound fails closed. These bounds apply
|
|
292
|
+
independently to each top-level directory object materialized by a record.
|
|
293
|
+
|
|
294
|
+
HEAD objects are read only from the full object ID captured at snapshot start;
|
|
295
|
+
the symbolic `HEAD` name is never re-resolved for layers. Index layers are
|
|
296
|
+
parsed from one captured stage-0 listing. The helper guards the corresponding
|
|
297
|
+
HEAD/ref/reflog controls and raw index file, compares the captured listing at
|
|
298
|
+
the end, and rejects ordinary A-to-B-to-A mutations instead of accepting
|
|
299
|
+
mixed-era layers.
|
|
300
|
+
|
|
301
|
+
Regular files are read through an `O_NOFOLLOW` descriptor with before/after
|
|
302
|
+
identity checks. Symlinks use lstat/readlink/lstat; directories record identity
|
|
303
|
+
before and after their inventory. The helper also compares raw porcelain-v2
|
|
304
|
+
status and HEAD at the start and end, then rechecks filesystem guards. An
|
|
305
|
+
absent cited path holds a no-follow descriptor for the nearest existing parent
|
|
306
|
+
and records the first missing component or leaf; that anchored absence is
|
|
307
|
+
checked both before and after the final Git status pass, so a newly created
|
|
308
|
+
ignored path cannot evade porcelain. Any observed race rejects the snapshot
|
|
309
|
+
rather than emitting mixed-era evidence.
|