open-wiki-spec 0.1.0
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 +294 -0
- package/bin/open-wiki-spec.js +2 -0
- package/dist/cli/commands/apply.d.ts +3 -0
- package/dist/cli/commands/apply.d.ts.map +1 -0
- package/dist/cli/commands/apply.js +60 -0
- package/dist/cli/commands/apply.js.map +1 -0
- package/dist/cli/commands/archive.d.ts +20 -0
- package/dist/cli/commands/archive.d.ts.map +1 -0
- package/dist/cli/commands/archive.js +87 -0
- package/dist/cli/commands/archive.js.map +1 -0
- package/dist/cli/commands/continue.d.ts +6 -0
- package/dist/cli/commands/continue.d.ts.map +1 -0
- package/dist/cli/commands/continue.js +35 -0
- package/dist/cli/commands/continue.js.map +1 -0
- package/dist/cli/commands/formatters.d.ts +9 -0
- package/dist/cli/commands/formatters.d.ts.map +1 -0
- package/dist/cli/commands/formatters.js +55 -0
- package/dist/cli/commands/formatters.js.map +1 -0
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +36 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/list.d.ts +28 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +85 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts +6 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/migrate.js +103 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/commands/propose.d.ts +3 -0
- package/dist/cli/commands/propose.d.ts.map +1 -0
- package/dist/cli/commands/propose.js +64 -0
- package/dist/cli/commands/propose.js.map +1 -0
- package/dist/cli/commands/query.d.ts +3 -0
- package/dist/cli/commands/query.d.ts.map +1 -0
- package/dist/cli/commands/query.js +62 -0
- package/dist/cli/commands/query.js.map +1 -0
- package/dist/cli/commands/status.d.ts +30 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +144 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/verify.d.ts +3 -0
- package/dist/cli/commands/verify.d.ts.map +1 -0
- package/dist/cli/commands/verify.js +38 -0
- package/dist/cli/commands/verify.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +40 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init/init-engine.d.ts +6 -0
- package/dist/cli/init/init-engine.d.ts.map +1 -0
- package/dist/cli/init/init-engine.js +107 -0
- package/dist/cli/init/init-engine.js.map +1 -0
- package/dist/cli/init/meta-files.d.ts +9 -0
- package/dist/cli/init/meta-files.d.ts.map +1 -0
- package/dist/cli/init/meta-files.js +156 -0
- package/dist/cli/init/meta-files.js.map +1 -0
- package/dist/cli/init/skill-generator.d.ts +11 -0
- package/dist/cli/init/skill-generator.d.ts.map +1 -0
- package/dist/cli/init/skill-generator.js +753 -0
- package/dist/cli/init/skill-generator.js.map +1 -0
- package/dist/cli/init/types.d.ts +27 -0
- package/dist/cli/init/types.d.ts.map +1 -0
- package/dist/cli/init/types.js +5 -0
- package/dist/cli/init/types.js.map +1 -0
- package/dist/cli/vault-discovery.d.ts +9 -0
- package/dist/cli/vault-discovery.d.ts.map +1 -0
- package/dist/cli/vault-discovery.js +31 -0
- package/dist/cli/vault-discovery.js.map +1 -0
- package/dist/core/config/index.d.ts +2 -0
- package/dist/core/config/index.d.ts.map +1 -0
- package/dist/core/config/index.js +3 -0
- package/dist/core/config/index.js.map +1 -0
- package/dist/core/index/build.d.ts +10 -0
- package/dist/core/index/build.d.ts.map +1 -0
- package/dist/core/index/build.js +190 -0
- package/dist/core/index/build.js.map +1 -0
- package/dist/core/index/index.d.ts +7 -0
- package/dist/core/index/index.d.ts.map +1 -0
- package/dist/core/index/index.js +7 -0
- package/dist/core/index/index.js.map +1 -0
- package/dist/core/index/resolve.d.ts +41 -0
- package/dist/core/index/resolve.d.ts.map +1 -0
- package/dist/core/index/resolve.js +63 -0
- package/dist/core/index/resolve.js.map +1 -0
- package/dist/core/index/reverse.d.ts +7 -0
- package/dist/core/index/reverse.d.ts.map +1 -0
- package/dist/core/index/reverse.js +24 -0
- package/dist/core/index/reverse.js.map +1 -0
- package/dist/core/index/scan.d.ts +16 -0
- package/dist/core/index/scan.d.ts.map +1 -0
- package/dist/core/index/scan.js +19 -0
- package/dist/core/index/scan.js.map +1 -0
- package/dist/core/index/schema-version.d.ts +5 -0
- package/dist/core/index/schema-version.d.ts.map +1 -0
- package/dist/core/index/schema-version.js +19 -0
- package/dist/core/index/schema-version.js.map +1 -0
- package/dist/core/index/validate.d.ts +14 -0
- package/dist/core/index/validate.d.ts.map +1 -0
- package/dist/core/index/validate.js +77 -0
- package/dist/core/index/validate.js.map +1 -0
- package/dist/core/migrate/change-converter.d.ts +18 -0
- package/dist/core/migrate/change-converter.d.ts.map +1 -0
- package/dist/core/migrate/change-converter.js +475 -0
- package/dist/core/migrate/change-converter.js.map +1 -0
- package/dist/core/migrate/index.d.ts +8 -0
- package/dist/core/migrate/index.d.ts.map +1 -0
- package/dist/core/migrate/index.js +7 -0
- package/dist/core/migrate/index.js.map +1 -0
- package/dist/core/migrate/migrate.d.ts +15 -0
- package/dist/core/migrate/migrate.d.ts.map +1 -0
- package/dist/core/migrate/migrate.js +149 -0
- package/dist/core/migrate/migrate.js.map +1 -0
- package/dist/core/migrate/scanner.d.ts +10 -0
- package/dist/core/migrate/scanner.d.ts.map +1 -0
- package/dist/core/migrate/scanner.js +188 -0
- package/dist/core/migrate/scanner.js.map +1 -0
- package/dist/core/migrate/source-converter.d.ts +6 -0
- package/dist/core/migrate/source-converter.d.ts.map +1 -0
- package/dist/core/migrate/source-converter.js +63 -0
- package/dist/core/migrate/source-converter.js.map +1 -0
- package/dist/core/migrate/spec-converter.d.ts +16 -0
- package/dist/core/migrate/spec-converter.d.ts.map +1 -0
- package/dist/core/migrate/spec-converter.js +157 -0
- package/dist/core/migrate/spec-converter.js.map +1 -0
- package/dist/core/migrate/system-inferrer.d.ts +23 -0
- package/dist/core/migrate/system-inferrer.d.ts.map +1 -0
- package/dist/core/migrate/system-inferrer.js +118 -0
- package/dist/core/migrate/system-inferrer.js.map +1 -0
- package/dist/core/migrate/types.d.ts +125 -0
- package/dist/core/migrate/types.d.ts.map +1 -0
- package/dist/core/migrate/types.js +5 -0
- package/dist/core/migrate/types.js.map +1 -0
- package/dist/core/parser/delta-summary-parser.d.ts +10 -0
- package/dist/core/parser/delta-summary-parser.d.ts.map +1 -0
- package/dist/core/parser/delta-summary-parser.js +101 -0
- package/dist/core/parser/delta-summary-parser.js.map +1 -0
- package/dist/core/parser/frontmatter-parser.d.ts +21 -0
- package/dist/core/parser/frontmatter-parser.d.ts.map +1 -0
- package/dist/core/parser/frontmatter-parser.js +87 -0
- package/dist/core/parser/frontmatter-parser.js.map +1 -0
- package/dist/core/parser/index.d.ts +9 -0
- package/dist/core/parser/index.d.ts.map +1 -0
- package/dist/core/parser/index.js +8 -0
- package/dist/core/parser/index.js.map +1 -0
- package/dist/core/parser/note-parser.d.ts +9 -0
- package/dist/core/parser/note-parser.d.ts.map +1 -0
- package/dist/core/parser/note-parser.js +106 -0
- package/dist/core/parser/note-parser.js.map +1 -0
- package/dist/core/parser/requirement-parser.d.ts +13 -0
- package/dist/core/parser/requirement-parser.d.ts.map +1 -0
- package/dist/core/parser/requirement-parser.js +127 -0
- package/dist/core/parser/requirement-parser.js.map +1 -0
- package/dist/core/parser/section-parser.d.ts +15 -0
- package/dist/core/parser/section-parser.d.ts.map +1 -0
- package/dist/core/parser/section-parser.js +90 -0
- package/dist/core/parser/section-parser.js.map +1 -0
- package/dist/core/parser/task-parser.d.ts +9 -0
- package/dist/core/parser/task-parser.d.ts.map +1 -0
- package/dist/core/parser/task-parser.js +35 -0
- package/dist/core/parser/task-parser.js.map +1 -0
- package/dist/core/parser/types.d.ts +94 -0
- package/dist/core/parser/types.d.ts.map +1 -0
- package/dist/core/parser/types.js +2 -0
- package/dist/core/parser/types.js.map +1 -0
- package/dist/core/parser/wikilink-parser.d.ts +19 -0
- package/dist/core/parser/wikilink-parser.d.ts.map +1 -0
- package/dist/core/parser/wikilink-parser.js +74 -0
- package/dist/core/parser/wikilink-parser.js.map +1 -0
- package/dist/core/retrieval/classify.d.ts +11 -0
- package/dist/core/retrieval/classify.d.ts.map +1 -0
- package/dist/core/retrieval/classify.js +92 -0
- package/dist/core/retrieval/classify.js.map +1 -0
- package/dist/core/retrieval/constants.d.ts +49 -0
- package/dist/core/retrieval/constants.d.ts.map +1 -0
- package/dist/core/retrieval/constants.js +29 -0
- package/dist/core/retrieval/constants.js.map +1 -0
- package/dist/core/retrieval/graph-expand.d.ts +7 -0
- package/dist/core/retrieval/graph-expand.d.ts.map +1 -0
- package/dist/core/retrieval/graph-expand.js +20 -0
- package/dist/core/retrieval/graph-expand.js.map +1 -0
- package/dist/core/retrieval/helpers.d.ts +15 -0
- package/dist/core/retrieval/helpers.d.ts.map +1 -0
- package/dist/core/retrieval/helpers.js +36 -0
- package/dist/core/retrieval/helpers.js.map +1 -0
- package/dist/core/retrieval/index.d.ts +11 -0
- package/dist/core/retrieval/index.d.ts.map +1 -0
- package/dist/core/retrieval/index.js +9 -0
- package/dist/core/retrieval/index.js.map +1 -0
- package/dist/core/retrieval/lexical.d.ts +8 -0
- package/dist/core/retrieval/lexical.d.ts.map +1 -0
- package/dist/core/retrieval/lexical.js +107 -0
- package/dist/core/retrieval/lexical.js.map +1 -0
- package/dist/core/retrieval/retrieve.d.ts +16 -0
- package/dist/core/retrieval/retrieve.d.ts.map +1 -0
- package/dist/core/retrieval/retrieve.js +58 -0
- package/dist/core/retrieval/retrieve.js.map +1 -0
- package/dist/core/retrieval/scoring.d.ts +14 -0
- package/dist/core/retrieval/scoring.d.ts.map +1 -0
- package/dist/core/retrieval/scoring.js +169 -0
- package/dist/core/retrieval/scoring.js.map +1 -0
- package/dist/core/retrieval/warnings.d.ts +16 -0
- package/dist/core/retrieval/warnings.d.ts.map +1 -0
- package/dist/core/retrieval/warnings.js +73 -0
- package/dist/core/retrieval/warnings.js.map +1 -0
- package/dist/core/schema/base.schema.d.ts +31 -0
- package/dist/core/schema/base.schema.d.ts.map +1 -0
- package/dist/core/schema/base.schema.js +32 -0
- package/dist/core/schema/base.schema.js.map +1 -0
- package/dist/core/schema/change.schema.d.ts +96 -0
- package/dist/core/schema/change.schema.d.ts.map +1 -0
- package/dist/core/schema/change.schema.js +64 -0
- package/dist/core/schema/change.schema.js.map +1 -0
- package/dist/core/schema/decision.schema.d.ts +33 -0
- package/dist/core/schema/decision.schema.d.ts.map +1 -0
- package/dist/core/schema/decision.schema.js +19 -0
- package/dist/core/schema/decision.schema.js.map +1 -0
- package/dist/core/schema/delta-summary.d.ts +57 -0
- package/dist/core/schema/delta-summary.d.ts.map +1 -0
- package/dist/core/schema/delta-summary.js +38 -0
- package/dist/core/schema/delta-summary.js.map +1 -0
- package/dist/core/schema/feature.schema.d.ts +40 -0
- package/dist/core/schema/feature.schema.d.ts.map +1 -0
- package/dist/core/schema/feature.schema.js +25 -0
- package/dist/core/schema/feature.schema.js.map +1 -0
- package/dist/core/schema/frontmatter.d.ts +207 -0
- package/dist/core/schema/frontmatter.d.ts.map +1 -0
- package/dist/core/schema/frontmatter.js +23 -0
- package/dist/core/schema/frontmatter.js.map +1 -0
- package/dist/core/schema/index.d.ts +235 -0
- package/dist/core/schema/index.d.ts.map +1 -0
- package/dist/core/schema/index.js +52 -0
- package/dist/core/schema/index.js.map +1 -0
- package/dist/core/schema/query.schema.d.ts +39 -0
- package/dist/core/schema/query.schema.d.ts.map +1 -0
- package/dist/core/schema/query.schema.js +20 -0
- package/dist/core/schema/query.schema.js.map +1 -0
- package/dist/core/schema/requirement.d.ts +69 -0
- package/dist/core/schema/requirement.d.ts.map +1 -0
- package/dist/core/schema/requirement.js +35 -0
- package/dist/core/schema/requirement.js.map +1 -0
- package/dist/core/schema/source.schema.d.ts +33 -0
- package/dist/core/schema/source.schema.d.ts.map +1 -0
- package/dist/core/schema/source.schema.js +24 -0
- package/dist/core/schema/source.schema.js.map +1 -0
- package/dist/core/schema/system.schema.d.ts +27 -0
- package/dist/core/schema/system.schema.d.ts.map +1 -0
- package/dist/core/schema/system.schema.js +17 -0
- package/dist/core/schema/system.schema.js.map +1 -0
- package/dist/core/schema/templates.d.ts +14 -0
- package/dist/core/schema/templates.d.ts.map +1 -0
- package/dist/core/schema/templates.js +220 -0
- package/dist/core/schema/templates.js.map +1 -0
- package/dist/core/schema/validation-constants.d.ts +5 -0
- package/dist/core/schema/validation-constants.d.ts.map +1 -0
- package/dist/core/schema/validation-constants.js +5 -0
- package/dist/core/schema/validation-constants.js.map +1 -0
- package/dist/core/sequencing/analyze.d.ts +13 -0
- package/dist/core/sequencing/analyze.d.ts.map +1 -0
- package/dist/core/sequencing/analyze.js +107 -0
- package/dist/core/sequencing/analyze.js.map +1 -0
- package/dist/core/sequencing/index.d.ts +8 -0
- package/dist/core/sequencing/index.d.ts.map +1 -0
- package/dist/core/sequencing/index.js +8 -0
- package/dist/core/sequencing/index.js.map +1 -0
- package/dist/core/sequencing/ordering.d.ts +11 -0
- package/dist/core/sequencing/ordering.d.ts.map +1 -0
- package/dist/core/sequencing/ordering.js +148 -0
- package/dist/core/sequencing/ordering.js.map +1 -0
- package/dist/core/sequencing/out-of-order-detector.d.ts +9 -0
- package/dist/core/sequencing/out-of-order-detector.d.ts.map +1 -0
- package/dist/core/sequencing/out-of-order-detector.js +42 -0
- package/dist/core/sequencing/out-of-order-detector.js.map +1 -0
- package/dist/core/sequencing/priority-queue.d.ts +18 -0
- package/dist/core/sequencing/priority-queue.d.ts.map +1 -0
- package/dist/core/sequencing/priority-queue.js +31 -0
- package/dist/core/sequencing/priority-queue.js.map +1 -0
- package/dist/core/sequencing/requirement-conflict-detector.d.ts +9 -0
- package/dist/core/sequencing/requirement-conflict-detector.d.ts.map +1 -0
- package/dist/core/sequencing/requirement-conflict-detector.js +90 -0
- package/dist/core/sequencing/requirement-conflict-detector.js.map +1 -0
- package/dist/core/sequencing/stale-detector.d.ts +9 -0
- package/dist/core/sequencing/stale-detector.d.ts.map +1 -0
- package/dist/core/sequencing/stale-detector.js +49 -0
- package/dist/core/sequencing/stale-detector.js.map +1 -0
- package/dist/core/sequencing/touches-analyzer.d.ts +8 -0
- package/dist/core/sequencing/touches-analyzer.d.ts.map +1 -0
- package/dist/core/sequencing/touches-analyzer.js +91 -0
- package/dist/core/sequencing/touches-analyzer.js.map +1 -0
- package/dist/core/vault/index.d.ts +2 -0
- package/dist/core/vault/index.d.ts.map +1 -0
- package/dist/core/vault/index.js +3 -0
- package/dist/core/vault/index.js.map +1 -0
- package/dist/core/workflow/apply/apply.d.ts +17 -0
- package/dist/core/workflow/apply/apply.d.ts.map +1 -0
- package/dist/core/workflow/apply/apply.js +302 -0
- package/dist/core/workflow/apply/apply.js.map +1 -0
- package/dist/core/workflow/apply/delta-parser.d.ts +11 -0
- package/dist/core/workflow/apply/delta-parser.d.ts.map +1 -0
- package/dist/core/workflow/apply/delta-parser.js +164 -0
- package/dist/core/workflow/apply/delta-parser.js.map +1 -0
- package/dist/core/workflow/apply/feature-updater.d.ts +12 -0
- package/dist/core/workflow/apply/feature-updater.d.ts.map +1 -0
- package/dist/core/workflow/apply/feature-updater.js +75 -0
- package/dist/core/workflow/apply/feature-updater.js.map +1 -0
- package/dist/core/workflow/apply/index.d.ts +7 -0
- package/dist/core/workflow/apply/index.d.ts.map +1 -0
- package/dist/core/workflow/apply/index.js +6 -0
- package/dist/core/workflow/apply/index.js.map +1 -0
- package/dist/core/workflow/apply/stale-checker.d.ts +17 -0
- package/dist/core/workflow/apply/stale-checker.d.ts.map +1 -0
- package/dist/core/workflow/apply/stale-checker.js +99 -0
- package/dist/core/workflow/apply/stale-checker.js.map +1 -0
- package/dist/core/workflow/apply/types.d.ts +112 -0
- package/dist/core/workflow/apply/types.d.ts.map +1 -0
- package/dist/core/workflow/apply/types.js +2 -0
- package/dist/core/workflow/apply/types.js.map +1 -0
- package/dist/core/workflow/apply/verify-apply.d.ts +16 -0
- package/dist/core/workflow/apply/verify-apply.d.ts.map +1 -0
- package/dist/core/workflow/apply/verify-apply.js +81 -0
- package/dist/core/workflow/apply/verify-apply.js.map +1 -0
- package/dist/core/workflow/continue/continue.d.ts +17 -0
- package/dist/core/workflow/continue/continue.d.ts.map +1 -0
- package/dist/core/workflow/continue/continue.js +213 -0
- package/dist/core/workflow/continue/continue.js.map +1 -0
- package/dist/core/workflow/continue/decision-promoter.d.ts +20 -0
- package/dist/core/workflow/continue/decision-promoter.d.ts.map +1 -0
- package/dist/core/workflow/continue/decision-promoter.js +36 -0
- package/dist/core/workflow/continue/decision-promoter.js.map +1 -0
- package/dist/core/workflow/continue/index.d.ts +6 -0
- package/dist/core/workflow/continue/index.d.ts.map +1 -0
- package/dist/core/workflow/continue/index.js +5 -0
- package/dist/core/workflow/continue/index.js.map +1 -0
- package/dist/core/workflow/continue/next-action.d.ts +13 -0
- package/dist/core/workflow/continue/next-action.d.ts.map +1 -0
- package/dist/core/workflow/continue/next-action.js +129 -0
- package/dist/core/workflow/continue/next-action.js.map +1 -0
- package/dist/core/workflow/continue/section-checker.d.ts +18 -0
- package/dist/core/workflow/continue/section-checker.d.ts.map +1 -0
- package/dist/core/workflow/continue/section-checker.js +114 -0
- package/dist/core/workflow/continue/section-checker.js.map +1 -0
- package/dist/core/workflow/continue/types.d.ts +113 -0
- package/dist/core/workflow/continue/types.d.ts.map +1 -0
- package/dist/core/workflow/continue/types.js +2 -0
- package/dist/core/workflow/continue/types.js.map +1 -0
- package/dist/core/workflow/index.d.ts +11 -0
- package/dist/core/workflow/index.d.ts.map +1 -0
- package/dist/core/workflow/index.js +12 -0
- package/dist/core/workflow/index.js.map +1 -0
- package/dist/core/workflow/propose/index.d.ts +6 -0
- package/dist/core/workflow/propose/index.d.ts.map +1 -0
- package/dist/core/workflow/propose/index.js +5 -0
- package/dist/core/workflow/propose/index.js.map +1 -0
- package/dist/core/workflow/propose/note-creator.d.ts +35 -0
- package/dist/core/workflow/propose/note-creator.d.ts.map +1 -0
- package/dist/core/workflow/propose/note-creator.js +178 -0
- package/dist/core/workflow/propose/note-creator.js.map +1 -0
- package/dist/core/workflow/propose/prerequisites.d.ts +17 -0
- package/dist/core/workflow/propose/prerequisites.d.ts.map +1 -0
- package/dist/core/workflow/propose/prerequisites.js +78 -0
- package/dist/core/workflow/propose/prerequisites.js.map +1 -0
- package/dist/core/workflow/propose/propose.d.ts +13 -0
- package/dist/core/workflow/propose/propose.d.ts.map +1 -0
- package/dist/core/workflow/propose/propose.js +204 -0
- package/dist/core/workflow/propose/propose.js.map +1 -0
- package/dist/core/workflow/propose/query-normalizer.d.ts +7 -0
- package/dist/core/workflow/propose/query-normalizer.d.ts.map +1 -0
- package/dist/core/workflow/propose/query-normalizer.js +77 -0
- package/dist/core/workflow/propose/query-normalizer.js.map +1 -0
- package/dist/core/workflow/propose/types.d.ts +71 -0
- package/dist/core/workflow/propose/types.d.ts.map +1 -0
- package/dist/core/workflow/propose/types.js +2 -0
- package/dist/core/workflow/propose/types.js.map +1 -0
- package/dist/core/workflow/query/index.d.ts +6 -0
- package/dist/core/workflow/query/index.d.ts.map +1 -0
- package/dist/core/workflow/query/index.js +5 -0
- package/dist/core/workflow/query/index.js.map +1 -0
- package/dist/core/workflow/query/noteworthiness.d.ts +14 -0
- package/dist/core/workflow/query/noteworthiness.d.ts.map +1 -0
- package/dist/core/workflow/query/noteworthiness.js +48 -0
- package/dist/core/workflow/query/noteworthiness.js.map +1 -0
- package/dist/core/workflow/query/query-note-creator.d.ts +13 -0
- package/dist/core/workflow/query/query-note-creator.d.ts.map +1 -0
- package/dist/core/workflow/query/query-note-creator.js +168 -0
- package/dist/core/workflow/query/query-note-creator.js.map +1 -0
- package/dist/core/workflow/query/query-search.d.ts +19 -0
- package/dist/core/workflow/query/query-search.d.ts.map +1 -0
- package/dist/core/workflow/query/query-search.js +252 -0
- package/dist/core/workflow/query/query-search.js.map +1 -0
- package/dist/core/workflow/query/query.d.ts +18 -0
- package/dist/core/workflow/query/query.d.ts.map +1 -0
- package/dist/core/workflow/query/query.js +29 -0
- package/dist/core/workflow/query/query.js.map +1 -0
- package/dist/core/workflow/query/types.d.ts +67 -0
- package/dist/core/workflow/query/types.d.ts.map +1 -0
- package/dist/core/workflow/query/types.js +2 -0
- package/dist/core/workflow/query/types.js.map +1 -0
- package/dist/core/workflow/verify/coherence.d.ts +30 -0
- package/dist/core/workflow/verify/coherence.d.ts.map +1 -0
- package/dist/core/workflow/verify/coherence.js +206 -0
- package/dist/core/workflow/verify/coherence.js.map +1 -0
- package/dist/core/workflow/verify/completeness.d.ts +24 -0
- package/dist/core/workflow/verify/completeness.d.ts.map +1 -0
- package/dist/core/workflow/verify/completeness.js +172 -0
- package/dist/core/workflow/verify/completeness.js.map +1 -0
- package/dist/core/workflow/verify/correctness.d.ts +38 -0
- package/dist/core/workflow/verify/correctness.d.ts.map +1 -0
- package/dist/core/workflow/verify/correctness.js +352 -0
- package/dist/core/workflow/verify/correctness.js.map +1 -0
- package/dist/core/workflow/verify/index.d.ts +7 -0
- package/dist/core/workflow/verify/index.d.ts.map +1 -0
- package/dist/core/workflow/verify/index.js +6 -0
- package/dist/core/workflow/verify/index.js.map +1 -0
- package/dist/core/workflow/verify/vault-integrity.d.ts +45 -0
- package/dist/core/workflow/verify/vault-integrity.d.ts.map +1 -0
- package/dist/core/workflow/verify/vault-integrity.js +141 -0
- package/dist/core/workflow/verify/vault-integrity.js.map +1 -0
- package/dist/core/workflow/verify/verify.d.ts +23 -0
- package/dist/core/workflow/verify/verify.d.ts.map +1 -0
- package/dist/core/workflow/verify/verify.js +122 -0
- package/dist/core/workflow/verify/verify.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/types/delta.d.ts +17 -0
- package/dist/types/delta.d.ts.map +1 -0
- package/dist/types/delta.js +2 -0
- package/dist/types/delta.js.map +1 -0
- package/dist/types/frontmatter.d.ts +51 -0
- package/dist/types/frontmatter.d.ts.map +1 -0
- package/dist/types/frontmatter.js +2 -0
- package/dist/types/frontmatter.js.map +1 -0
- package/dist/types/index-record.d.ts +46 -0
- package/dist/types/index-record.d.ts.map +1 -0
- package/dist/types/index-record.js +2 -0
- package/dist/types/index-record.js.map +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/next-action.d.ts +10 -0
- package/dist/types/next-action.d.ts.map +1 -0
- package/dist/types/next-action.js +2 -0
- package/dist/types/next-action.js.map +1 -0
- package/dist/types/notes.d.ts +9 -0
- package/dist/types/notes.d.ts.map +1 -0
- package/dist/types/notes.js +2 -0
- package/dist/types/notes.js.map +1 -0
- package/dist/types/requirement.d.ts +19 -0
- package/dist/types/requirement.d.ts.map +1 -0
- package/dist/types/requirement.js +2 -0
- package/dist/types/requirement.js.map +1 -0
- package/dist/types/retrieval.d.ts +32 -0
- package/dist/types/retrieval.d.ts.map +1 -0
- package/dist/types/retrieval.js +2 -0
- package/dist/types/retrieval.js.map +1 -0
- package/dist/types/sequencing.d.ts +83 -0
- package/dist/types/sequencing.d.ts.map +1 -0
- package/dist/types/sequencing.js +2 -0
- package/dist/types/sequencing.js.map +1 -0
- package/dist/types/task.d.ts +7 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +2 -0
- package/dist/types/task.js.map +1 -0
- package/dist/types/verify.d.ts +23 -0
- package/dist/types/verify.d.ts.map +1 -0
- package/dist/types/verify.js +2 -0
- package/dist/types/verify.js.map +1 -0
- package/dist/utils/hash.d.ts +6 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +9 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/id-generator.d.ts +17 -0
- package/dist/utils/id-generator.d.ts.map +1 -0
- package/dist/utils/id-generator.js +24 -0
- package/dist/utils/id-generator.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/normalize.d.ts +11 -0
- package/dist/utils/normalize.d.ts.map +1 -0
- package/dist/utils/normalize.js +15 -0
- package/dist/utils/normalize.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Correctness dimension checks.
|
|
3
|
+
* Operation validation matrix, stale detection, status transitions, schema match, drift.
|
|
4
|
+
*/
|
|
5
|
+
import type { VaultIndex, IndexRecord } from '../../../types/index.js';
|
|
6
|
+
import type { VerifyIssue } from '../../../types/verify.js';
|
|
7
|
+
/**
|
|
8
|
+
* Run the operation validation matrix for a Change's Delta Summary.
|
|
9
|
+
* Pre-apply: checks preconditions (requirement must/must not exist).
|
|
10
|
+
* Post-apply: checks postconditions (requirement state after apply).
|
|
11
|
+
*/
|
|
12
|
+
export declare function runOperationValidationMatrix(change: IndexRecord, index: VaultIndex): VerifyIssue[];
|
|
13
|
+
/**
|
|
14
|
+
* Check for stale base_fingerprint values in Delta Summary entries.
|
|
15
|
+
* A stale base means another Change was applied since this Delta Summary was written.
|
|
16
|
+
*/
|
|
17
|
+
export declare function checkStaleBase(change: IndexRecord, index: VaultIndex): VerifyIssue[];
|
|
18
|
+
/**
|
|
19
|
+
* Check status transition validity.
|
|
20
|
+
* Validates that prerequisites are met for the current status.
|
|
21
|
+
*/
|
|
22
|
+
export declare function checkStatusTransition(change: IndexRecord, index: VaultIndex): VerifyIssue[];
|
|
23
|
+
/**
|
|
24
|
+
* Check that a note's schema_version matches the declared vault schema version.
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Check schema version consistency at the vault level.
|
|
28
|
+
* Note: The index build copies the vault's schema version onto every record,
|
|
29
|
+
* so per-record comparison is always a no-op. Instead, we surface index-level
|
|
30
|
+
* schema_mismatch warnings (e.g., missing schema.md).
|
|
31
|
+
*/
|
|
32
|
+
export declare function checkSchemaVersionMatch(_note: IndexRecord, _declaredVersion: string, index?: VaultIndex): VerifyIssue[];
|
|
33
|
+
/**
|
|
34
|
+
* Check drift between Delta Summary and current Feature state based on Change status.
|
|
35
|
+
* Drift is acceptable during active work but is an error for applied Changes.
|
|
36
|
+
*/
|
|
37
|
+
export declare function checkDriftForStatus(change: IndexRecord, index: VaultIndex, coveredByMatrix?: Set<string>): VerifyIssue[];
|
|
38
|
+
//# sourceMappingURL=correctness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"correctness.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/verify/correctness.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,GAAG,WAAW,EAAE,CAkKlG;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,GAAG,WAAW,EAAE,CA4CpF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,GAAG,WAAW,EAAE,CAoC3F;AAED;;GAEG;AACH;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,WAAW,EAAE,CAYvH;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,UAAU,EACjB,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC5B,WAAW,EAAE,CAiEf"}
|
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run the operation validation matrix for a Change's Delta Summary.
|
|
3
|
+
* Pre-apply: checks preconditions (requirement must/must not exist).
|
|
4
|
+
* Post-apply: checks postconditions (requirement state after apply).
|
|
5
|
+
*/
|
|
6
|
+
export function runOperationValidationMatrix(change, index) {
|
|
7
|
+
const issues = [];
|
|
8
|
+
for (const entry of change.delta_summary) {
|
|
9
|
+
if (entry.target_type !== 'requirement')
|
|
10
|
+
continue;
|
|
11
|
+
const featureRecord = index.records.get(entry.target_note_id);
|
|
12
|
+
if (!featureRecord) {
|
|
13
|
+
issues.push({
|
|
14
|
+
dimension: 'correctness',
|
|
15
|
+
severity: 'error',
|
|
16
|
+
code: 'INVALID_FRONTMATTER_REF',
|
|
17
|
+
message: `Delta references non-existent Feature "${entry.target_note_id}"`,
|
|
18
|
+
note_id: change.id,
|
|
19
|
+
note_path: change.path,
|
|
20
|
+
suggestion: 'Check the target_note_id in the Delta Summary entry.',
|
|
21
|
+
});
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
const existingReqs = new Map(featureRecord.requirements.map((r) => [r.name, r]));
|
|
25
|
+
if (change.status === 'applied') {
|
|
26
|
+
// Post-apply validation
|
|
27
|
+
switch (entry.op) {
|
|
28
|
+
case 'ADDED':
|
|
29
|
+
if (!existingReqs.has(entry.target_name)) {
|
|
30
|
+
issues.push({
|
|
31
|
+
dimension: 'correctness',
|
|
32
|
+
severity: 'error',
|
|
33
|
+
code: 'DELTA_MISMATCH_ADDED',
|
|
34
|
+
message: `ADDED requirement "${entry.target_name}" not found in Feature after apply`,
|
|
35
|
+
note_id: change.id,
|
|
36
|
+
note_path: change.path,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
break;
|
|
40
|
+
case 'MODIFIED': {
|
|
41
|
+
const req = existingReqs.get(entry.target_name);
|
|
42
|
+
if (!req) {
|
|
43
|
+
issues.push({
|
|
44
|
+
dimension: 'correctness',
|
|
45
|
+
severity: 'error',
|
|
46
|
+
code: 'DELTA_MISMATCH_MODIFIED',
|
|
47
|
+
message: `MODIFIED requirement "${entry.target_name}" not found in Feature after apply`,
|
|
48
|
+
note_id: change.id,
|
|
49
|
+
note_path: change.path,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
else if (entry.base_fingerprint && req.content_hash === entry.base_fingerprint) {
|
|
53
|
+
issues.push({
|
|
54
|
+
dimension: 'correctness',
|
|
55
|
+
severity: 'warning',
|
|
56
|
+
code: 'MODIFIED_NO_CHANGE',
|
|
57
|
+
message: `MODIFIED requirement "${entry.target_name}" content_hash unchanged after apply`,
|
|
58
|
+
note_id: change.id,
|
|
59
|
+
note_path: change.path,
|
|
60
|
+
suggestion: 'The requirement content was not actually changed. Consider removing this MODIFIED entry.',
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
case 'REMOVED':
|
|
66
|
+
if (existingReqs.has(entry.target_name)) {
|
|
67
|
+
issues.push({
|
|
68
|
+
dimension: 'correctness',
|
|
69
|
+
severity: 'error',
|
|
70
|
+
code: 'DELTA_MISMATCH_REMOVED',
|
|
71
|
+
message: `REMOVED requirement "${entry.target_name}" still exists in Feature after apply`,
|
|
72
|
+
note_id: change.id,
|
|
73
|
+
note_path: change.path,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
break;
|
|
77
|
+
case 'RENAMED':
|
|
78
|
+
if (existingReqs.has(entry.target_name)) {
|
|
79
|
+
issues.push({
|
|
80
|
+
dimension: 'correctness',
|
|
81
|
+
severity: 'error',
|
|
82
|
+
code: 'DELTA_MISMATCH_RENAMED',
|
|
83
|
+
message: `RENAMED old name "${entry.target_name}" still exists in Feature`,
|
|
84
|
+
note_id: change.id,
|
|
85
|
+
note_path: change.path,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
if (entry.new_name && !existingReqs.has(entry.new_name)) {
|
|
89
|
+
issues.push({
|
|
90
|
+
dimension: 'correctness',
|
|
91
|
+
severity: 'error',
|
|
92
|
+
code: 'DELTA_MISMATCH_RENAMED',
|
|
93
|
+
message: `RENAMED new name "${entry.new_name}" not found in Feature`,
|
|
94
|
+
note_id: change.id,
|
|
95
|
+
note_path: change.path,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
// Pre-apply validation (proposed/planned/in_progress)
|
|
103
|
+
switch (entry.op) {
|
|
104
|
+
case 'ADDED':
|
|
105
|
+
if (existingReqs.has(entry.target_name)) {
|
|
106
|
+
issues.push({
|
|
107
|
+
dimension: 'correctness',
|
|
108
|
+
severity: 'error',
|
|
109
|
+
code: 'DELTA_MISMATCH_ADDED',
|
|
110
|
+
message: `ADDED requirement "${entry.target_name}" already exists in Feature (pre-apply)`,
|
|
111
|
+
note_id: change.id,
|
|
112
|
+
note_path: change.path,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
break;
|
|
116
|
+
case 'MODIFIED':
|
|
117
|
+
if (!existingReqs.has(entry.target_name)) {
|
|
118
|
+
issues.push({
|
|
119
|
+
dimension: 'correctness',
|
|
120
|
+
severity: 'error',
|
|
121
|
+
code: 'DELTA_MISMATCH_MODIFIED',
|
|
122
|
+
message: `MODIFIED requirement "${entry.target_name}" does not exist in Feature (pre-apply)`,
|
|
123
|
+
note_id: change.id,
|
|
124
|
+
note_path: change.path,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
break;
|
|
128
|
+
case 'REMOVED':
|
|
129
|
+
if (!existingReqs.has(entry.target_name)) {
|
|
130
|
+
issues.push({
|
|
131
|
+
dimension: 'correctness',
|
|
132
|
+
severity: 'error',
|
|
133
|
+
code: 'DELTA_MISMATCH_REMOVED',
|
|
134
|
+
message: `REMOVED requirement "${entry.target_name}" does not exist in Feature (pre-apply)`,
|
|
135
|
+
note_id: change.id,
|
|
136
|
+
note_path: change.path,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
break;
|
|
140
|
+
case 'RENAMED':
|
|
141
|
+
if (!existingReqs.has(entry.target_name)) {
|
|
142
|
+
issues.push({
|
|
143
|
+
dimension: 'correctness',
|
|
144
|
+
severity: 'error',
|
|
145
|
+
code: 'DELTA_MISMATCH_RENAMED',
|
|
146
|
+
message: `RENAMED old name "${entry.target_name}" does not exist in Feature`,
|
|
147
|
+
note_id: change.id,
|
|
148
|
+
note_path: change.path,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
if (entry.new_name && existingReqs.has(entry.new_name)) {
|
|
152
|
+
issues.push({
|
|
153
|
+
dimension: 'correctness',
|
|
154
|
+
severity: 'error',
|
|
155
|
+
code: 'DELTA_MISMATCH_RENAMED',
|
|
156
|
+
message: `RENAMED new name "${entry.new_name}" already exists in Feature`,
|
|
157
|
+
note_id: change.id,
|
|
158
|
+
note_path: change.path,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return issues;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Check for stale base_fingerprint values in Delta Summary entries.
|
|
169
|
+
* A stale base means another Change was applied since this Delta Summary was written.
|
|
170
|
+
*/
|
|
171
|
+
export function checkStaleBase(change, index) {
|
|
172
|
+
const issues = [];
|
|
173
|
+
for (const entry of change.delta_summary) {
|
|
174
|
+
if (entry.op === 'ADDED')
|
|
175
|
+
continue;
|
|
176
|
+
if (entry.base_fingerprint === null) {
|
|
177
|
+
issues.push({
|
|
178
|
+
dimension: 'correctness',
|
|
179
|
+
severity: 'warning',
|
|
180
|
+
code: 'STALE_BASE',
|
|
181
|
+
message: `${entry.op} entry for "${entry.target_name}" has no base_fingerprint`,
|
|
182
|
+
note_id: change.id,
|
|
183
|
+
note_path: change.path,
|
|
184
|
+
suggestion: 'Add a base_fingerprint to track requirement content at the time of writing.',
|
|
185
|
+
});
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
// Migrated entries skip stale check (original base unknown)
|
|
189
|
+
if (entry.base_fingerprint === 'migrated') {
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
const featureRecord = index.records.get(entry.target_note_id);
|
|
193
|
+
if (!featureRecord)
|
|
194
|
+
continue; // Caught by ref resolution
|
|
195
|
+
const currentReq = featureRecord.requirements.find((r) => r.name === entry.target_name);
|
|
196
|
+
if (!currentReq)
|
|
197
|
+
continue; // Caught by operation validation
|
|
198
|
+
if (currentReq.content_hash !== entry.base_fingerprint) {
|
|
199
|
+
issues.push({
|
|
200
|
+
dimension: 'correctness',
|
|
201
|
+
severity: 'error',
|
|
202
|
+
code: 'STALE_BASE',
|
|
203
|
+
message: `${entry.op} "${entry.target_name}": base_fingerprint mismatch. Expected ${entry.base_fingerprint}, current is ${currentReq.content_hash}. Another Change may have been applied since this Delta Summary was written.`,
|
|
204
|
+
note_id: change.id,
|
|
205
|
+
note_path: change.path,
|
|
206
|
+
suggestion: 'Re-read the current Feature requirement and update the Delta Summary base_fingerprint.',
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return issues;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Check status transition validity.
|
|
214
|
+
* Validates that prerequisites are met for the current status.
|
|
215
|
+
*/
|
|
216
|
+
export function checkStatusTransition(change, index) {
|
|
217
|
+
const issues = [];
|
|
218
|
+
if (change.status === 'planned') {
|
|
219
|
+
const missing = checkPlannedPrerequisites(change);
|
|
220
|
+
if (missing.length > 0) {
|
|
221
|
+
issues.push({
|
|
222
|
+
dimension: 'correctness',
|
|
223
|
+
severity: 'error',
|
|
224
|
+
code: 'INVALID_STATUS_TRANSITION',
|
|
225
|
+
message: `Change "${change.id}" is "planned" but missing prerequisites: ${missing.join(', ')}`,
|
|
226
|
+
note_id: change.id,
|
|
227
|
+
note_path: change.path,
|
|
228
|
+
suggestion: 'Fill in the missing sections before transitioning to planned.',
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
if (change.status === 'in_progress') {
|
|
233
|
+
for (const dep of change.depends_on) {
|
|
234
|
+
const depRecord = index.records.get(dep);
|
|
235
|
+
if (depRecord && depRecord.status !== 'applied') {
|
|
236
|
+
issues.push({
|
|
237
|
+
dimension: 'correctness',
|
|
238
|
+
severity: 'error',
|
|
239
|
+
code: 'BROKEN_DEPENDS_ON',
|
|
240
|
+
message: `Change "${change.id}" is "in_progress" but depends_on "${dep}" is "${depRecord.status}"`,
|
|
241
|
+
note_id: change.id,
|
|
242
|
+
note_path: change.path,
|
|
243
|
+
suggestion: `Wait for "${dep}" to be applied before starting implementation.`,
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return issues;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Check that a note's schema_version matches the declared vault schema version.
|
|
252
|
+
*/
|
|
253
|
+
/**
|
|
254
|
+
* Check schema version consistency at the vault level.
|
|
255
|
+
* Note: The index build copies the vault's schema version onto every record,
|
|
256
|
+
* so per-record comparison is always a no-op. Instead, we surface index-level
|
|
257
|
+
* schema_mismatch warnings (e.g., missing schema.md).
|
|
258
|
+
*/
|
|
259
|
+
export function checkSchemaVersionMatch(_note, _declaredVersion, index) {
|
|
260
|
+
if (!index)
|
|
261
|
+
return [];
|
|
262
|
+
return index.warnings
|
|
263
|
+
.filter((w) => w.type === 'schema_mismatch')
|
|
264
|
+
.map((w) => ({
|
|
265
|
+
dimension: 'correctness',
|
|
266
|
+
severity: 'error',
|
|
267
|
+
code: 'SCHEMA_MISMATCH',
|
|
268
|
+
message: w.message,
|
|
269
|
+
note_path: w.note_path,
|
|
270
|
+
suggestion: 'Create or fix wiki/00-meta/schema.md with a valid schema_version field.',
|
|
271
|
+
}));
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Check drift between Delta Summary and current Feature state based on Change status.
|
|
275
|
+
* Drift is acceptable during active work but is an error for applied Changes.
|
|
276
|
+
*/
|
|
277
|
+
export function checkDriftForStatus(change, index, coveredByMatrix) {
|
|
278
|
+
const issues = [];
|
|
279
|
+
if (change.delta_summary.length === 0)
|
|
280
|
+
return issues;
|
|
281
|
+
for (const entry of change.delta_summary) {
|
|
282
|
+
if (entry.target_type !== 'requirement')
|
|
283
|
+
continue;
|
|
284
|
+
// Skip entries already covered by operation validation matrix
|
|
285
|
+
const entryKey = `${entry.target_note_id}::${entry.target_name}`;
|
|
286
|
+
if (coveredByMatrix?.has(entryKey))
|
|
287
|
+
continue;
|
|
288
|
+
const featureRecord = index.records.get(entry.target_note_id);
|
|
289
|
+
if (!featureRecord)
|
|
290
|
+
continue;
|
|
291
|
+
const existingReq = featureRecord.requirements.find((r) => r.name === entry.target_name);
|
|
292
|
+
switch (change.status) {
|
|
293
|
+
case 'proposed':
|
|
294
|
+
case 'planned':
|
|
295
|
+
case 'in_progress':
|
|
296
|
+
// Drift is expected/tolerated during active work
|
|
297
|
+
break;
|
|
298
|
+
case 'applied':
|
|
299
|
+
if (entry.op === 'ADDED' && !existingReq) {
|
|
300
|
+
issues.push({
|
|
301
|
+
dimension: 'correctness',
|
|
302
|
+
severity: 'error',
|
|
303
|
+
code: 'EXCESSIVE_DRIFT',
|
|
304
|
+
message: `Change "${change.id}" is applied but ADDED requirement "${entry.target_name}" is missing from Feature "${entry.target_note_id}"`,
|
|
305
|
+
note_id: change.id,
|
|
306
|
+
note_path: change.path,
|
|
307
|
+
suggestion: 'Either the Feature was not updated during apply, or the requirement was subsequently removed.',
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
if (entry.op === 'REMOVED' && existingReq) {
|
|
311
|
+
issues.push({
|
|
312
|
+
dimension: 'correctness',
|
|
313
|
+
severity: 'error',
|
|
314
|
+
code: 'EXCESSIVE_DRIFT',
|
|
315
|
+
message: `Change "${change.id}" is applied but REMOVED requirement "${entry.target_name}" still exists in Feature "${entry.target_note_id}"`,
|
|
316
|
+
note_id: change.id,
|
|
317
|
+
note_path: change.path,
|
|
318
|
+
suggestion: 'The Feature was not updated during apply. Re-run apply or update manually.',
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
if (entry.op === 'MODIFIED' && existingReq) {
|
|
322
|
+
if (entry.base_fingerprint && existingReq.content_hash === entry.base_fingerprint) {
|
|
323
|
+
issues.push({
|
|
324
|
+
dimension: 'correctness',
|
|
325
|
+
severity: 'error',
|
|
326
|
+
code: 'EXCESSIVE_DRIFT',
|
|
327
|
+
message: `Change "${change.id}" is applied but MODIFIED requirement "${entry.target_name}" content_hash is unchanged in Feature "${entry.target_note_id}"`,
|
|
328
|
+
note_id: change.id,
|
|
329
|
+
note_path: change.path,
|
|
330
|
+
suggestion: 'The requirement was not actually modified during apply.',
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
break;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return issues;
|
|
338
|
+
}
|
|
339
|
+
/** Check hard prerequisites for planned status */
|
|
340
|
+
function checkPlannedPrerequisites(change) {
|
|
341
|
+
const missing = [];
|
|
342
|
+
if (!change.headings.includes('Why'))
|
|
343
|
+
missing.push('Why section');
|
|
344
|
+
if (change.delta_summary.length === 0)
|
|
345
|
+
missing.push('Delta Summary');
|
|
346
|
+
if (change.tasks.length === 0)
|
|
347
|
+
missing.push('Tasks');
|
|
348
|
+
if (!change.headings.includes('Validation'))
|
|
349
|
+
missing.push('Validation section');
|
|
350
|
+
return missing;
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=correctness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"correctness.js","sourceRoot":"","sources":["../../../../src/core/workflow/verify/correctness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { verify } from './verify.js';
|
|
2
|
+
export type { VerifyOptions } from './verify.js';
|
|
3
|
+
export { checkFeatureCompleteness, checkChangeCompleteness, checkMinimumSections, } from './completeness.js';
|
|
4
|
+
export { runOperationValidationMatrix, checkStaleBase, checkStatusTransition, checkSchemaVersionMatch, checkDriftForStatus, } from './correctness.js';
|
|
5
|
+
export { checkConflictsViaSequencing, checkDescriptionConsistency, checkDecisionConsistency, checkDependsOnConsistency, } from './coherence.js';
|
|
6
|
+
export { duplicateIdCheck, missingIdCheck, unresolvedWikilinkCheck, ambiguousAliasCheck, orphanNoteCheck, archivePlacementCheck, invalidFrontmatterTypeCheck, resolveLink, } from './vault-integrity.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/verify/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,4BAA4B,EAC5B,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,2BAA2B,EAC3B,WAAW,GACZ,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { verify } from './verify.js';
|
|
2
|
+
export { checkFeatureCompleteness, checkChangeCompleteness, checkMinimumSections, } from './completeness.js';
|
|
3
|
+
export { runOperationValidationMatrix, checkStaleBase, checkStatusTransition, checkSchemaVersionMatch, checkDriftForStatus, } from './correctness.js';
|
|
4
|
+
export { checkConflictsViaSequencing, checkDescriptionConsistency, checkDecisionConsistency, checkDependsOnConsistency, } from './coherence.js';
|
|
5
|
+
export { duplicateIdCheck, missingIdCheck, unresolvedWikilinkCheck, ambiguousAliasCheck, orphanNoteCheck, archivePlacementCheck, invalidFrontmatterTypeCheck, resolveLink, } from './vault-integrity.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/workflow/verify/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,4BAA4B,EAC5B,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,2BAA2B,EAC3B,WAAW,GACZ,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vault-wide structural integrity checks.
|
|
3
|
+
* These checks detect fundamental problems with vault structure
|
|
4
|
+
* that may affect other verification dimensions.
|
|
5
|
+
*/
|
|
6
|
+
import type { VaultIndex, IndexRecord } from '../../../types/index.js';
|
|
7
|
+
import type { VerifyIssue } from '../../../types/verify.js';
|
|
8
|
+
/**
|
|
9
|
+
* Convert index warnings of type 'duplicate_id' to VerifyIssues.
|
|
10
|
+
* Duplicate ids are already detected during index build.
|
|
11
|
+
*/
|
|
12
|
+
export declare function duplicateIdCheck(index: VaultIndex): VerifyIssue[];
|
|
13
|
+
/**
|
|
14
|
+
* Convert index warnings of type 'missing_id' to VerifyIssues.
|
|
15
|
+
*/
|
|
16
|
+
export declare function missingIdCheck(index: VaultIndex): VerifyIssue[];
|
|
17
|
+
/**
|
|
18
|
+
* Check for unresolved wikilinks in all notes.
|
|
19
|
+
* Wikilinks are resolved during index build; unresolved ones are recorded
|
|
20
|
+
* as index warnings of type 'unresolved_wikilink'. We surface those here.
|
|
21
|
+
*/
|
|
22
|
+
export declare function unresolvedWikilinkCheck(index: VaultIndex): VerifyIssue[];
|
|
23
|
+
/**
|
|
24
|
+
* Convert index warnings of type 'ambiguous_alias' to VerifyIssues.
|
|
25
|
+
*/
|
|
26
|
+
export declare function ambiguousAliasCheck(index: VaultIndex): VerifyIssue[];
|
|
27
|
+
/**
|
|
28
|
+
* Check for orphan notes (notes with no incoming or outgoing links).
|
|
29
|
+
* Meta files are excluded from this check.
|
|
30
|
+
*/
|
|
31
|
+
export declare function orphanNoteCheck(index: VaultIndex): VerifyIssue[];
|
|
32
|
+
/**
|
|
33
|
+
* Check for notes in 99-archive/ that don't have 'applied' status.
|
|
34
|
+
*/
|
|
35
|
+
export declare function archivePlacementCheck(index: VaultIndex): VerifyIssue[];
|
|
36
|
+
/**
|
|
37
|
+
* Convert index warnings of type 'invalid_frontmatter' to VerifyIssues.
|
|
38
|
+
*/
|
|
39
|
+
export declare function invalidFrontmatterTypeCheck(index: VaultIndex): VerifyIssue[];
|
|
40
|
+
/**
|
|
41
|
+
* Resolve a wikilink target against the vault index.
|
|
42
|
+
* Checks id, title, and aliases.
|
|
43
|
+
*/
|
|
44
|
+
export declare function resolveLink(index: VaultIndex, link: string): IndexRecord | undefined;
|
|
45
|
+
//# sourceMappingURL=vault-integrity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-integrity.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/verify/vault-integrity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,EAAE,CAWjE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,EAAE,CAW/D;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,EAAE,CAWxE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,EAAE,CAWpE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,EAAE,CAiBhE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,EAAE,CAiBtE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,EAAE,CAW5E;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAYpF"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert index warnings of type 'duplicate_id' to VerifyIssues.
|
|
3
|
+
* Duplicate ids are already detected during index build.
|
|
4
|
+
*/
|
|
5
|
+
export function duplicateIdCheck(index) {
|
|
6
|
+
return index.warnings
|
|
7
|
+
.filter((w) => w.type === 'duplicate_id')
|
|
8
|
+
.map((w) => ({
|
|
9
|
+
dimension: 'vault_integrity',
|
|
10
|
+
severity: 'error',
|
|
11
|
+
code: 'DUPLICATE_ID',
|
|
12
|
+
message: w.message,
|
|
13
|
+
note_path: w.note_path,
|
|
14
|
+
suggestion: 'Each note must have a unique id. Rename one of the duplicates.',
|
|
15
|
+
}));
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Convert index warnings of type 'missing_id' to VerifyIssues.
|
|
19
|
+
*/
|
|
20
|
+
export function missingIdCheck(index) {
|
|
21
|
+
return index.warnings
|
|
22
|
+
.filter((w) => w.type === 'missing_id')
|
|
23
|
+
.map((w) => ({
|
|
24
|
+
dimension: 'vault_integrity',
|
|
25
|
+
severity: 'error',
|
|
26
|
+
code: 'MISSING_ID',
|
|
27
|
+
message: w.message,
|
|
28
|
+
note_path: w.note_path,
|
|
29
|
+
suggestion: 'Every note must have a unique id field in its frontmatter.',
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Check for unresolved wikilinks in all notes.
|
|
34
|
+
* Wikilinks are resolved during index build; unresolved ones are recorded
|
|
35
|
+
* as index warnings of type 'unresolved_wikilink'. We surface those here.
|
|
36
|
+
*/
|
|
37
|
+
export function unresolvedWikilinkCheck(index) {
|
|
38
|
+
return index.warnings
|
|
39
|
+
.filter((w) => w.type === 'unresolved_wikilink')
|
|
40
|
+
.map((w) => ({
|
|
41
|
+
dimension: 'vault_integrity',
|
|
42
|
+
severity: 'error',
|
|
43
|
+
code: 'UNRESOLVED_WIKILINK',
|
|
44
|
+
message: w.message,
|
|
45
|
+
note_path: w.note_path,
|
|
46
|
+
suggestion: 'Create the missing note or fix the wikilink target.',
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Convert index warnings of type 'ambiguous_alias' to VerifyIssues.
|
|
51
|
+
*/
|
|
52
|
+
export function ambiguousAliasCheck(index) {
|
|
53
|
+
return index.warnings
|
|
54
|
+
.filter((w) => w.type === 'ambiguous_alias')
|
|
55
|
+
.map((w) => ({
|
|
56
|
+
dimension: 'vault_integrity',
|
|
57
|
+
severity: 'error',
|
|
58
|
+
code: 'AMBIGUOUS_ALIAS',
|
|
59
|
+
message: w.message,
|
|
60
|
+
note_path: w.note_path,
|
|
61
|
+
suggestion: 'Each alias must resolve to exactly one note. Remove or rename the duplicate alias.',
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Check for orphan notes (notes with no incoming or outgoing links).
|
|
66
|
+
* Meta files are excluded from this check.
|
|
67
|
+
*/
|
|
68
|
+
export function orphanNoteCheck(index) {
|
|
69
|
+
const issues = [];
|
|
70
|
+
for (const record of index.records.values()) {
|
|
71
|
+
if (record.path.startsWith('wiki/00-meta/'))
|
|
72
|
+
continue;
|
|
73
|
+
if (record.links_in.length === 0 && record.links_out.length === 0) {
|
|
74
|
+
issues.push({
|
|
75
|
+
dimension: 'vault_integrity',
|
|
76
|
+
severity: 'warning',
|
|
77
|
+
code: 'ORPHAN_NOTE',
|
|
78
|
+
message: `Note "${record.title}" (${record.path}) has no incoming or outgoing links`,
|
|
79
|
+
note_id: record.id,
|
|
80
|
+
note_path: record.path,
|
|
81
|
+
suggestion: 'Add wikilinks to connect this note to the vault graph.',
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return issues;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Check for notes in 99-archive/ that don't have 'applied' status.
|
|
89
|
+
*/
|
|
90
|
+
export function archivePlacementCheck(index) {
|
|
91
|
+
const issues = [];
|
|
92
|
+
for (const record of index.records.values()) {
|
|
93
|
+
const isInArchive = record.path.startsWith('wiki/99-archive/');
|
|
94
|
+
if (isInArchive && record.status !== 'applied') {
|
|
95
|
+
issues.push({
|
|
96
|
+
dimension: 'vault_integrity',
|
|
97
|
+
severity: 'error',
|
|
98
|
+
code: 'ARCHIVE_PLACEMENT_ERROR',
|
|
99
|
+
message: `Note "${record.id}" in 99-archive/ has status "${record.status}" (expected "applied")`,
|
|
100
|
+
note_id: record.id,
|
|
101
|
+
note_path: record.path,
|
|
102
|
+
suggestion: 'Only applied changes should be in the archive. Move the note back or update its status.',
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return issues;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Convert index warnings of type 'invalid_frontmatter' to VerifyIssues.
|
|
110
|
+
*/
|
|
111
|
+
export function invalidFrontmatterTypeCheck(index) {
|
|
112
|
+
return index.warnings
|
|
113
|
+
.filter((w) => w.type === 'invalid_frontmatter')
|
|
114
|
+
.map((w) => ({
|
|
115
|
+
dimension: 'vault_integrity',
|
|
116
|
+
severity: 'error',
|
|
117
|
+
code: 'INVALID_FRONTMATTER_TYPE',
|
|
118
|
+
message: w.message,
|
|
119
|
+
note_path: w.note_path,
|
|
120
|
+
suggestion: 'Fix the frontmatter YAML syntax or add missing required fields.',
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Resolve a wikilink target against the vault index.
|
|
125
|
+
* Checks id, title, and aliases.
|
|
126
|
+
*/
|
|
127
|
+
export function resolveLink(index, link) {
|
|
128
|
+
// Direct id match
|
|
129
|
+
const byId = index.records.get(link);
|
|
130
|
+
if (byId)
|
|
131
|
+
return byId;
|
|
132
|
+
// Title or alias match
|
|
133
|
+
for (const record of index.records.values()) {
|
|
134
|
+
if (record.title === link)
|
|
135
|
+
return record;
|
|
136
|
+
if (record.aliases.includes(link))
|
|
137
|
+
return record;
|
|
138
|
+
}
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=vault-integrity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-integrity.js","sourceRoot":"","sources":["../../../../src/core/workflow/verify/vault-integrity.ts"],"names":[],"mappings":"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"}
|