@try-works/dsh-recursive-mode 0.1.4 → 0.1.6

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.
Files changed (90) hide show
  1. package/lib/bootstrap.d.ts +6 -3
  2. package/lib/client/board.d.ts +4 -1
  3. package/lib/client/open-state.d.ts +20 -0
  4. package/lib/client/slots.d.ts +7 -1
  5. package/lib/client.js +135 -47
  6. package/lib/fs-intent.d.ts +34 -0
  7. package/lib/index.d.ts +1 -0
  8. package/lib/index.js +3429 -911
  9. package/lib/policy.d.ts +1 -1
  10. package/lib/runtime.d.ts +12 -5
  11. package/lib/ts-lint.d.ts +205 -0
  12. package/package.json +1 -1
  13. package/src/bootstrap.ts +338 -331
  14. package/src/client/board.tsx +0 -0
  15. package/src/client/open-state.ts +46 -0
  16. package/src/client/slots.ts +41 -20
  17. package/src/commands.ts +11 -0
  18. package/src/fs-intent.ts +84 -0
  19. package/src/index.ts +238 -226
  20. package/src/policy.ts +1 -1
  21. package/src/runtime.ts +19 -23
  22. package/src/ts-lint.ts +2110 -0
  23. package/references/scripts/__pycache__/recursive_phase_rules.cpython-314.pyc +0 -0
  24. package/references/scripts/lint-recursive-run.ps1 +0 -25
  25. package/references/scripts/lint-recursive-run.py +0 -2870
  26. package/references/scripts/recursive-closeout.ps1 +0 -38
  27. package/references/scripts/recursive-closeout.py +0 -541
  28. package/references/scripts/recursive-init.ps1 +0 -515
  29. package/references/scripts/recursive-init.py +0 -356
  30. package/references/scripts/recursive-lock.ps1 +0 -26
  31. package/references/scripts/recursive-lock.py +0 -302
  32. package/references/scripts/recursive-review-bundle.ps1 +0 -58
  33. package/references/scripts/recursive-review-bundle.py +0 -503
  34. package/references/scripts/recursive-router-cli-configure.ps1 +0 -2
  35. package/references/scripts/recursive-router-cli-configure.py +0 -9
  36. package/references/scripts/recursive-router-cli-init.ps1 +0 -2
  37. package/references/scripts/recursive-router-cli-init.py +0 -9
  38. package/references/scripts/recursive-router-cli-invoke.ps1 +0 -2
  39. package/references/scripts/recursive-router-cli-invoke.py +0 -9
  40. package/references/scripts/recursive-router-cli-probe.ps1 +0 -2
  41. package/references/scripts/recursive-router-cli-probe.py +0 -9
  42. package/references/scripts/recursive-router-cli-resolve.ps1 +0 -2
  43. package/references/scripts/recursive-router-cli-resolve.py +0 -9
  44. package/references/scripts/recursive-router-cli-validate.ps1 +0 -2
  45. package/references/scripts/recursive-router-cli-validate.py +0 -9
  46. package/references/scripts/recursive-router-configure.ps1 +0 -27
  47. package/references/scripts/recursive-router-configure.py +0 -74
  48. package/references/scripts/recursive-router-init.ps1 +0 -17
  49. package/references/scripts/recursive-router-init.py +0 -29
  50. package/references/scripts/recursive-router-invoke.ps1 +0 -47
  51. package/references/scripts/recursive-router-invoke.py +0 -103
  52. package/references/scripts/recursive-router-probe.ps1 +0 -25
  53. package/references/scripts/recursive-router-probe.py +0 -44
  54. package/references/scripts/recursive-router-resolve.ps1 +0 -26
  55. package/references/scripts/recursive-router-resolve.py +0 -46
  56. package/references/scripts/recursive-router-validate.ps1 +0 -17
  57. package/references/scripts/recursive-router-validate.py +0 -27
  58. package/references/scripts/recursive-status.ps1 +0 -23
  59. package/references/scripts/recursive-status.py +0 -2124
  60. package/references/scripts/recursive-subagent-action.ps1 +0 -98
  61. package/references/scripts/recursive-subagent-action.py +0 -197
  62. package/references/scripts/recursive-training-extract.ps1 +0 -23
  63. package/references/scripts/recursive-training-extract.py +0 -99
  64. package/references/scripts/recursive-training-grpo.ps1 +0 -52
  65. package/references/scripts/recursive-training-grpo.py +0 -1341
  66. package/references/scripts/recursive-training-loader.ps1 +0 -78
  67. package/references/scripts/recursive-training-loader.py +0 -558
  68. package/references/scripts/recursive-training-mcp.ps1 +0 -29
  69. package/references/scripts/recursive-training-mcp.py +0 -261
  70. package/references/scripts/recursive-training-phase8-trigger.ps1 +0 -55
  71. package/references/scripts/recursive-training-phase8-trigger.py +0 -137
  72. package/references/scripts/recursive-training-sync.ps1 +0 -29
  73. package/references/scripts/recursive-training-sync.py +0 -183
  74. package/references/scripts/recursive_phase_rules.py +0 -367
  75. package/references/scripts/recursive_router_cli_lib.py +0 -2
  76. package/references/scripts/recursive_router_lib.py +0 -2282
  77. package/references/scripts/verify-locks.ps1 +0 -25
  78. package/references/scripts/verify-locks.py +0 -353
  79. package/scripts/__pycache__/lint-recursive-run.cpython-314.pyc +0 -0
  80. package/scripts/__pycache__/recursive_phase_rules.cpython-314.pyc +0 -0
  81. package/scripts/install-recursive-mode.ps1 +0 -956
  82. package/scripts/install-recursive-mode.py +0 -750
  83. package/scripts/lint-recursive-run.py +0 -2870
  84. package/scripts/recursive-closeout.py +0 -541
  85. package/scripts/recursive-init.py +0 -356
  86. package/scripts/recursive-lock.py +0 -302
  87. package/scripts/recursive-status.py +0 -2124
  88. package/scripts/recursive_phase_rules.py +0 -367
  89. package/scripts/recursive_router_lib.py +0 -2282
  90. package/scripts/verify-locks.py +0 -353
package/lib/policy.d.ts CHANGED
@@ -3,7 +3,7 @@ import type { EnforcementConfig } from './enforcement.ts';
3
3
  export interface PolicyContext {
4
4
  worktreeRoot: string;
5
5
  runId: string;
6
- folded: RecursivePhaseState | null;
6
+ folded?: RecursivePhaseState | null;
7
7
  config?: EnforcementConfig;
8
8
  }
9
9
  /**
package/lib/runtime.d.ts CHANGED
@@ -207,12 +207,11 @@ export declare class RecursiveRuntime extends Service {
207
207
  /** Reopen a LOCKED artifact to DRAFT (delete LockedAt/LockHash, invalidate downstream receipts). */
208
208
  private reopenArtifact;
209
209
  /**
210
- * Lint an artifact with FULL canonical parity: shells out to the vendored
211
- * lint-recursive-run.py (byte-identical to canonical) and parses its
212
- * [FAIL]/[WARN] lines + Summary counts. `errors` = FAIL lines, `warnings` =
210
+ * Lint an artifact with FULL canonical parity: runs the in-process ts-lint
211
+ * port (ts-lint.ts `lintRun`) against the whole run and filters the verdict
212
+ * lines to the requested artifact. `errors` = FAIL lines, `warnings` =
213
213
  * WARN lines, `passed` = no FAIL (WARN-only passes, matching the canonical
214
- * non-strict verdict). Falls back to the structural check only if the vendored
215
- * script is unavailable (e.g. bundled lib without references/).
214
+ * non-strict verdict).
216
215
  */
217
216
  lintArtifact(runId: string, artifact?: string, agent?: {
218
217
  session?: {
@@ -221,6 +220,14 @@ export declare class RecursiveRuntime extends Service {
221
220
  };
222
221
  };
223
222
  } | null): Promise<LintArtifactResult>;
223
+ /** Legacy structural fallback (kept for type reference; lintArtifact uses lintRun). */
224
+ lintArtifactStructuralFallback(runId: string, artifact: string, agent?: {
225
+ session?: {
226
+ header?: {
227
+ cwd?: string;
228
+ };
229
+ };
230
+ } | null): Promise<LintArtifactResult>;
224
231
  /** Phase C R1/R2: fold the log into phase state; validate a transition intent. */
225
232
  foldPhase(events: readonly SessionEventLike[]): RecursivePhaseState | null;
226
233
  validateTransition(intent: PhaseTransitionIntent): GateCheckResult;
@@ -0,0 +1,205 @@
1
+ export declare const PRODUCT_DIFF_PHASE_FILES: Set<string>;
2
+ export declare const DECISIONS_DIFF_PHASE_FILES: Set<string>;
3
+ export declare const STATE_DIFF_PHASE_FILES: Set<string>;
4
+ export declare const MEMORY_DIFF_PHASE_FILES: Set<string>;
5
+ export declare const MEMORY_ALLOWED_TYPES: Set<string>;
6
+ export declare const MEMORY_ALLOWED_STATUSES: Set<string>;
7
+ export declare const MEMORY_REQUIRED_FIELDS: string[];
8
+ export declare const TDD_MODES: Set<string>;
9
+ export declare const QA_EXECUTION_MODES: Set<string>;
10
+ export declare const TRANSIENT_RUNTIME_DIR_MARKERS: Set<string>;
11
+ export declare const TRANSIENT_RUNTIME_FILE_NAMES: Set<string>;
12
+ export declare const TRANSIENT_RUNTIME_SUFFIXES: string[];
13
+ export declare const DIFF_BASIS_ALLOWED_TYPES: Set<string>;
14
+ export declare const WORKING_TREE_COMPARISON_REFS: Set<string>;
15
+ export declare const INVENTORY_DISPOSITIONS: Set<string>;
16
+ export declare const PHASE2_REQUIREMENT_DISPOSITION_STATUSES: Set<string>;
17
+ export declare const REQUIREMENT_DISPOSITION_STATUSES: Set<string>;
18
+ export declare const SKILL_USAGE_RELEVANCE_STATUSES: Set<string>;
19
+ export declare const FINAL_REQUIREMENT_DISPOSITION_FILES: Set<string>;
20
+ export declare const REQUIREMENT_CHANGED_FILE_ACCOUNTING_FILES: Set<string>;
21
+ export declare const SUBAGENT_ACTION_REQUIRED_HEADINGS: string[];
22
+ export declare const SKILL_MEMORY_ROUTER_NAMES: Set<string>;
23
+ export declare const RUN_ARTIFACT_SEQUENCE: string[];
24
+ export declare const REQUIREMENT_ID_RE: RegExp;
25
+ export interface LintIssue {
26
+ severity: 'FAIL' | 'WARN';
27
+ filePath: string;
28
+ message: string;
29
+ }
30
+ export interface LintResult {
31
+ errors: string[];
32
+ warnings: string[];
33
+ failCount: number;
34
+ warnCount: number;
35
+ passed: boolean;
36
+ summary: string;
37
+ }
38
+ /** trim_md_value: strip surrounding quotes/backticks. */
39
+ export declare function trimMdValue(value: string): string;
40
+ /** get_md_field_value: first `Field: value` line. */
41
+ export declare function getMdFieldValue(content: string, fieldName: string): string | null;
42
+ /** has_header_field: any `Field:` line. */
43
+ export declare function hasHeaderField(content: string, fieldName: string): boolean;
44
+ /** has_heading: `## Heading` line. */
45
+ export declare function hasHeading(content: string, headingText: string): boolean;
46
+ /** get_heading_body: text under `## Heading` until next heading or end. */
47
+ export declare function getHeadingBody(content: string, headingText: string): string;
48
+ /** get_subheading_body: text under `### Heading` (or level N) until next N-or-less heading. */
49
+ export declare function getSubheadingBody(content: string, headingText: string, level?: number): string;
50
+ /** has_gate_line: `Gate: PASS|FAIL` line. */
51
+ export declare function hasGateLine(content: string, gateName: string): boolean;
52
+ /** get_gate_status: PASS|FAIL|MISSING. */
53
+ export declare function getGateStatus(content: string, gateName: string): string;
54
+ /** get_todo_stats: [has_todo, total, checked, unchecked] under ## TODO. */
55
+ export declare function getTodoStats(content: string): [boolean, number, number, number];
56
+ /** get_latest_run_directory: newest mtime subdir of run_root. */
57
+ export declare function getLatestRunDirectory(runRoot: string): string | null;
58
+ /** get_workflow_profile: from Workflow version field or late-phase presence. */
59
+ export declare function getWorkflowProfile(runDir: string): string;
60
+ /** is_placeholder_only: empty or placeholder token. */
61
+ export declare function isPlaceholderOnly(text: string): boolean;
62
+ /** parse_requirement_ids: Rd+ ids from Requirements heading. */
63
+ export declare function parseRequirementIds(requirementsContent: string): string[];
64
+ /** requirement_sort_key: Rd+ < SRC-d{3} < other. */
65
+ export declare function requirementSortKey(value: string): [number, number | string, string];
66
+ /** normalize_source_text: collapse whitespace, strip quotes/backticks, lowercase. */
67
+ export declare function normalizeSourceText(value: string): string;
68
+ /** source_quote_matches: normalized quote appears in requirements content. */
69
+ export declare function sourceQuoteMatches(sourceQuote: string, requirementsContent: string): boolean;
70
+ /** escapeRegExp helper. */
71
+ export declare function escapeRegExp(s: string): string;
72
+ /** content_sha256: sha256 hex of UTF-8 content (LF-normalized). */
73
+ export declare function contentSha256(content: string): string;
74
+ /** extract_paths_from_text: backtick paths with / or . in name, non-git, non-placeholder. */
75
+ export declare function extractPathsFromText(text: string): Set<string>;
76
+ /** extract_paths_from_field_value: backtick paths, else split on ,; newline. */
77
+ export declare function extractPathsFromFieldValue(text: string): Set<string>;
78
+ /** extract_paths_from_named_field: inline value or block body until next field. */
79
+ export declare function extractPathsFromNamedField(content: string, fieldName: string): Set<string>;
80
+ /** get_named_field_text: inline value or block body until next field. */
81
+ export declare function getNamedFieldText(content: string, fieldName: string): string | null;
82
+ /** has_meaningful_value: non-empty and not in disallowed set. */
83
+ export declare function hasMeaningfulValue(value: string | null, disallowed?: Set<string>): boolean;
84
+ /** collect_subagent_delegation_issues: audit-context consistency rules. */
85
+ export declare function collectSubagentDelegationIssues(auditContext: string): string[];
86
+ /** collect_paths_under_prefix: sorted paths under a prefix. */
87
+ export declare function collectPathsUnderPrefix(text: string, prefix: string): string[];
88
+ /** find_missing_repo_paths: paths not existing under repo_root. */
89
+ export declare function findMissingRepoPaths(repoRoot: string, paths: string[]): string[];
90
+ /** normalize_repo_path: backslash->slash, strip leading /. */
91
+ export declare function normalizeRepoPath(rawPath: string): string;
92
+ /** is_addendum_artifact: file name contains .addendum-. */
93
+ export declare function isAddendumArtifact(fileName: string): boolean;
94
+ /** is_transient_runtime_path: __pycache__, .pyc, etc. */
95
+ export declare function isTransientRuntimePath(normalizedPath: string): boolean;
96
+ /** filter_runtime_changed_files: drop the run's own dir + transient paths. */
97
+ export declare function filterRuntimeChangedFiles(paths: string[], runId: string): string[];
98
+ /** run_git: run git -C repo args, return [stdout, error]. */
99
+ export declare function runGit(repoRoot: string, ...args: string[]): [string | null, string | null];
100
+ /** normalize_baseline_type: canonicalize baseline type with aliases. */
101
+ export declare function normalizeBaselineType(value: string | null): string | null;
102
+ /** normalize_comparison_reference: map working-tree refs. */
103
+ export declare function normalizeComparisonReference(value: string | null): string | null;
104
+ /** parse_diff_basis_source: heading body of Diff Basis For Later Audits / Diff Basis. */
105
+ export declare function parseDiffBasisSource(content: string): string;
106
+ /** get_run_diff_basis: read diff-basis fields from 00-worktree.md. */
107
+ export declare function getRunDiffBasis(runDir: string): Record<string, string | null>;
108
+ /** normalize_diff_basis: validate + compute the executable diff basis. */
109
+ export declare function normalizeDiffBasis(repoRoot: string, diffBasis: Record<string, string | null>): [Record<string, string> | null, string | null];
110
+ /** get_git_changed_files: git diff --name-only + untracked (--relative). */
111
+ export declare function getGitChangedFiles(repoRoot: string, diffBasis: Record<string, string | null>): [string[] | null, string | null];
112
+ /** get_phase_owned_actual_changed_files: which changed files belong to this phase. */
113
+ export declare function getPhaseOwnedActualChangedFiles(fileName: string, actualChangedFiles: string[] | null, repoRoot?: string): string[] | null;
114
+ /** get_related_addenda_paths: run_dir/addenda/<base>.addendum-*.md (+ upstream-gap). */
115
+ export declare function getRelatedAddendaPaths(runDir: string, artifactName: string): string[];
116
+ /** get_stage_local_addenda_paths: run_dir/addenda/<base>.addendum-*.md. */
117
+ export declare function getStageLocalAddendaPaths(runDir: string, artifactName: string): string[];
118
+ /** get_current_phase_upstream_gap_addenda_paths: run_dir/addenda/<base>.upstream-gap.*.addendum-*.md. */
119
+ export declare function getCurrentPhaseUpstreamGapAddendaPaths(runDir: string, artifactName: string): string[];
120
+ /** get_header_field_block: lines under `Field:` until a stop field. */
121
+ export declare function getHeaderFieldBlock(content: string, fieldName: string, stopFields: string[]): string;
122
+ /** get_header_input_paths: paths under Inputs:. */
123
+ export declare function getHeaderInputPaths(content: string): Set<string>;
124
+ /** get_phase_expected_input_artifact_names: expected input artifacts for a phase. */
125
+ export declare function getPhaseExpectedInputArtifactNames(fileName: string, runDir: string): string[];
126
+ /** get_expected_effective_input_addenda_paths: expected addenda cited in Inputs. */
127
+ export declare function getExpectedEffectiveInputAddendaPaths(runDir: string, fileName: string): string[];
128
+ /** parse_requirement_completion_entries: `- R1 | Status: ... | ...` rows. */
129
+ export declare function parseRequirementCompletionEntries(sectionBody: string): [Record<string, Record<string, string>>, string[]];
130
+ /** is_meaningful_requirement_field: non-empty, not placeholder/none/n/a/tbd/todo. */
131
+ export declare function isMeaningfulRequirementField(value: string | null): boolean;
132
+ /** collect_requirement_field_paths: normalized repo paths from field values. */
133
+ export declare function collectRequirementFieldPaths(fields: Record<string, string>, fieldNames: string[]): Set<string>;
134
+ /** collect_meaningful_requirement_fields: drop ID/Status + placeholders. */
135
+ export declare function collectMeaningfulRequirementFields(fields: Record<string, string>): Record<string, string>;
136
+ /** normalize_skill_usage_relevance: yes->relevant, no->not-relevant. */
137
+ export declare function normalizeSkillUsageRelevance(value: string | null): string;
138
+ /** lint_requirement_disposition_fields: per-status field requirements (implemented/verified/deferred/...). */
139
+ export declare function lintRequirementDispositionFields(requirementId: string, status: string, fields: Record<string, string>, fileName: string, runDir: string, repoRoot: string, actualChangedFiles: string[] | null): string[];
140
+ /** lint_source_requirement_inventory: 01-as-is Source Requirement Inventory rules. */
141
+ export declare function lintSourceRequirementInventory(filePath: string, content: string, workflowProfile: string, runDir: string): string[];
142
+ /** lint_requirement_mapping: 02-to-be-plan Requirement Mapping rules. */
143
+ export declare function lintRequirementMapping(content: string, workflowProfile: string, runDir: string, repoRoot: string): string[];
144
+ /** lint_plan_drift_check: Plan Drift Check merge/rationale rule. */
145
+ export declare function lintPlanDriftCheck(content: string, workflowProfile: string): string[];
146
+ /** lint_phase2_requirement_disposition_fields: 02 phase-2 status rules. */
147
+ export declare function lintPhase2RequirementDispositionFields(requirementId: string, status: string, fields: Record<string, string>, runDir: string, repoRoot: string): string[];
148
+ /** parse_source_requirement_inventory_entries: `- R1 | Disposition: ... | Source Quote: ... | Summary: ...` rows. */
149
+ export declare function parseSourceRequirementInventoryEntries(sectionBody: string): [Record<string, Record<string, string>>, string[]];
150
+ /** parse_requirement_mapping_entries: `- R1 | Source Quote: ... | Coverage: ... | ...` rows. */
151
+ export declare function parseRequirementMappingEntries(sectionBody: string): [Record<string, Record<string, string>>, string[]];
152
+ /** get_run_requirement_ids: R ids from 00-requirements or 01-as-is inventory (current profile). */
153
+ export declare function getRunRequirementIds(runDir: string, workflowProfile: string): string[];
154
+ /** validate_planned_surface_paths: implementation-surface paths must resolve or have an existing parent. */
155
+ export declare function validatePlannedSurfacePaths(requirementId: string, fieldName: string, rawValue: string, repoRoot: string): string[];
156
+ /** lint_effective_input_addenda: Inputs / Effective Inputs Re-read / Earlier Phase Reconciliation addenda citations. */
157
+ export declare function lintEffectiveInputAddenda(filePath: string, content: string, workflowProfile: string, runDir: string): string[];
158
+ /** lint_requirement_completion_status: RCS section rules for audited phases. */
159
+ export declare function lintRequirementCompletionStatus(filePath: string, content: string, requirementIds: string[], runDir: string, workflowProfile: string, actualChangedFiles: string[] | null): string[];
160
+ /** lint_prior_recursive_evidence: Prior Recursive Evidence Reviewed rules. */
161
+ export declare function lintPriorRecursiveEvidence(content: string, runDir: string, workflowProfile: string, repoRoot: string, fileName: string): string[];
162
+ /** get_subagent_action_record_paths: subagents/ paths cited in Subagent Contribution Verification. */
163
+ export declare function getSubagentActionRecordPaths(content: string, runDir: string): string[];
164
+ /** get_all_subagent_action_record_paths: any run subagents/ path cited. */
165
+ export declare function getAllSubagentActionRecordPaths(content: string): string[];
166
+ /** lint_subagent_action_record_file: validate a subagent action record file. */
167
+ export declare function lintSubagentActionRecordFile(filePath: string, repoRoot: string, runDir: string, actualChangedFiles: string[] | null): string[];
168
+ /** parse_subagent_action_record_claims: extract claims from an action record. */
169
+ export declare function parseSubagentActionRecordClaims(actionContent: string): Record<string, Set<string> | string>;
170
+ /** lint_subagent_contribution_verification: SCV section rules for audited phases. */
171
+ export declare function lintSubagentContributionVerification(filePath: string, content: string, workflowProfile: string, runDir: string, repoRoot: string, actualChangedFiles: string[] | null): string[];
172
+ /** collect_reviewed_paths: paths from Worktree Diff Audit + related addenda. */
173
+ export declare function collectReviewedPaths(runDir: string, artifactName: string, content: string): Set<string>;
174
+ /** lint_review_bundle_reference: 03.5 review-bundle validation. */
175
+ export declare function lintReviewBundleReference(content: string, runDir: string, repoRoot: string): string[];
176
+ /** lint_phase8_skill_usage_capture: 08 Run-Local Skill Usage Capture rules. */
177
+ export declare function lintPhase8SkillUsageCapture(content: string): string[];
178
+ /** lint_phase_specific_rules: per-phase rules dispatched from the artifact file. */
179
+ export declare function lintPhaseSpecificRules(filePath: string, content: string, workflowProfile: string, runDir: string, repoRoot: string, requirementIds: string[], actualChangedFiles: string[] | null): string[];
180
+ /** get_header_remediation_lines: copy/paste lines for missing header fields. */
181
+ export declare function getHeaderRemediationLines(missingFields: string[]): string[];
182
+ /** lint_traceability: Traceability section coverage of requirement IDs. */
183
+ export declare function lintTraceability(filePath: string, content: string, requirementIds: string[]): string[];
184
+ /** lint_audit_sections: audited-phase audit section rules. */
185
+ export declare function lintAuditSections(filePath: string, content: string, workflowProfile: string, actualChangedFiles: string[] | null, diffBasisError: string | null, runId: string, runDir: string): string[];
186
+ /** lint_artifact_file: full per-artifact lint (canonical lint_artifact_file parity). */
187
+ export declare function lintArtifactFile(filePath: string, runDir: string, repoRoot: string, workflowProfile: string, requirementIds: string[], actualChangedFiles: string[] | null, diffBasisError: string | null): [number, number];
188
+ /** is_lock_valid_for_lint: canonical lock-validity check (used for late-phase sequencing). */
189
+ export declare function isLockValidForLint(filePath: string, workflowProfile: string): boolean;
190
+ /** lint_memory_doc: validate a memory shard's metadata frontmatter. */
191
+ export declare function lintMemoryDoc(filePath: string): [number, number];
192
+ /** lint_memory_plane: validate the .recursive/memory/ plane. */
193
+ export declare function lintMemoryPlane(repoRoot: string): [number, number];
194
+ /**
195
+ * lintRun(repoRoot, runId): FULL canonical lint of a recursive run (in-process).
196
+ * Mirrors lint-recursive-run.py main():
197
+ * - resolve run dir (runId or latest), derive workflow profile + requirement ids
198
+ * - validate the diff basis + collect actual changed files (git)
199
+ * - lint each artifact in RUN_ARTIFACT_SEQUENCE order (WARN if missing),
200
+ * then addenda, then subagent action records
201
+ * - phase-sequence prerequisite checks + late-phase requirement checks
202
+ * - lint the memory plane
203
+ * - print Summary + return verdict
204
+ */
205
+ export declare function lintRun(repoRoot: string, runId: string): LintResult;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@try-works/dsh-recursive-mode",
3
3
  "description": "recursive-mode workflow as a DeepSeek Harness bundle: RecursiveRuntime service + recursive_status tool",
4
- "version": "0.1.4",
4
+ "version": "0.1.6",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",