@try-works/dsh-recursive-mode 0.1.5 → 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 (85) 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/index.js +3391 -906
  7. package/lib/runtime.d.ts +12 -5
  8. package/lib/ts-lint.d.ts +205 -0
  9. package/package.json +1 -1
  10. package/src/bootstrap.ts +338 -331
  11. package/src/client/board.tsx +0 -0
  12. package/src/client/open-state.ts +46 -0
  13. package/src/client/slots.ts +41 -20
  14. package/src/commands.ts +11 -0
  15. package/src/index.ts +238 -228
  16. package/src/runtime.ts +19 -23
  17. package/src/ts-lint.ts +2110 -0
  18. package/references/scripts/__pycache__/recursive_phase_rules.cpython-314.pyc +0 -0
  19. package/references/scripts/lint-recursive-run.ps1 +0 -25
  20. package/references/scripts/lint-recursive-run.py +0 -2870
  21. package/references/scripts/recursive-closeout.ps1 +0 -38
  22. package/references/scripts/recursive-closeout.py +0 -541
  23. package/references/scripts/recursive-init.ps1 +0 -515
  24. package/references/scripts/recursive-init.py +0 -356
  25. package/references/scripts/recursive-lock.ps1 +0 -26
  26. package/references/scripts/recursive-lock.py +0 -302
  27. package/references/scripts/recursive-review-bundle.ps1 +0 -58
  28. package/references/scripts/recursive-review-bundle.py +0 -503
  29. package/references/scripts/recursive-router-cli-configure.ps1 +0 -2
  30. package/references/scripts/recursive-router-cli-configure.py +0 -9
  31. package/references/scripts/recursive-router-cli-init.ps1 +0 -2
  32. package/references/scripts/recursive-router-cli-init.py +0 -9
  33. package/references/scripts/recursive-router-cli-invoke.ps1 +0 -2
  34. package/references/scripts/recursive-router-cli-invoke.py +0 -9
  35. package/references/scripts/recursive-router-cli-probe.ps1 +0 -2
  36. package/references/scripts/recursive-router-cli-probe.py +0 -9
  37. package/references/scripts/recursive-router-cli-resolve.ps1 +0 -2
  38. package/references/scripts/recursive-router-cli-resolve.py +0 -9
  39. package/references/scripts/recursive-router-cli-validate.ps1 +0 -2
  40. package/references/scripts/recursive-router-cli-validate.py +0 -9
  41. package/references/scripts/recursive-router-configure.ps1 +0 -27
  42. package/references/scripts/recursive-router-configure.py +0 -74
  43. package/references/scripts/recursive-router-init.ps1 +0 -17
  44. package/references/scripts/recursive-router-init.py +0 -29
  45. package/references/scripts/recursive-router-invoke.ps1 +0 -47
  46. package/references/scripts/recursive-router-invoke.py +0 -103
  47. package/references/scripts/recursive-router-probe.ps1 +0 -25
  48. package/references/scripts/recursive-router-probe.py +0 -44
  49. package/references/scripts/recursive-router-resolve.ps1 +0 -26
  50. package/references/scripts/recursive-router-resolve.py +0 -46
  51. package/references/scripts/recursive-router-validate.ps1 +0 -17
  52. package/references/scripts/recursive-router-validate.py +0 -27
  53. package/references/scripts/recursive-status.ps1 +0 -23
  54. package/references/scripts/recursive-status.py +0 -2124
  55. package/references/scripts/recursive-subagent-action.ps1 +0 -98
  56. package/references/scripts/recursive-subagent-action.py +0 -197
  57. package/references/scripts/recursive-training-extract.ps1 +0 -23
  58. package/references/scripts/recursive-training-extract.py +0 -99
  59. package/references/scripts/recursive-training-grpo.ps1 +0 -52
  60. package/references/scripts/recursive-training-grpo.py +0 -1341
  61. package/references/scripts/recursive-training-loader.ps1 +0 -78
  62. package/references/scripts/recursive-training-loader.py +0 -558
  63. package/references/scripts/recursive-training-mcp.ps1 +0 -29
  64. package/references/scripts/recursive-training-mcp.py +0 -261
  65. package/references/scripts/recursive-training-phase8-trigger.ps1 +0 -55
  66. package/references/scripts/recursive-training-phase8-trigger.py +0 -137
  67. package/references/scripts/recursive-training-sync.ps1 +0 -29
  68. package/references/scripts/recursive-training-sync.py +0 -183
  69. package/references/scripts/recursive_phase_rules.py +0 -367
  70. package/references/scripts/recursive_router_cli_lib.py +0 -2
  71. package/references/scripts/recursive_router_lib.py +0 -2282
  72. package/references/scripts/verify-locks.ps1 +0 -25
  73. package/references/scripts/verify-locks.py +0 -353
  74. package/scripts/__pycache__/lint-recursive-run.cpython-314.pyc +0 -0
  75. package/scripts/__pycache__/recursive_phase_rules.cpython-314.pyc +0 -0
  76. package/scripts/install-recursive-mode.ps1 +0 -956
  77. package/scripts/install-recursive-mode.py +0 -750
  78. package/scripts/lint-recursive-run.py +0 -2870
  79. package/scripts/recursive-closeout.py +0 -541
  80. package/scripts/recursive-init.py +0 -356
  81. package/scripts/recursive-lock.py +0 -302
  82. package/scripts/recursive-status.py +0 -2124
  83. package/scripts/recursive_phase_rules.py +0 -367
  84. package/scripts/recursive_router_lib.py +0 -2282
  85. package/scripts/verify-locks.py +0 -353
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.5",
4
+ "version": "0.1.6",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",