@mjasnikovs/pi-task 0.18.18 → 0.18.19

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.
@@ -5,7 +5,16 @@ export interface TaskEntry {
5
5
  producedId?: string;
6
6
  }
7
7
  export declare function allocateAutoId(cwd: string): Promise<string>;
8
- /** Parse a decompose-phase model output into a clean list of titles. */
8
+ /**
9
+ * Parse a decompose-phase model output into a clean list of titles.
10
+ *
11
+ * No cap: every title the model emits is kept. An arbitrary ceiling (was 30)
12
+ * silently dropped the tail of a large plan AND re-clipped every coverage retry,
13
+ * so a design that genuinely needed >N tasks could never escape the ceiling —
14
+ * it burned its coverage rounds and shipped a knowingly-gapped plan. The real
15
+ * bound on task count is the design's own grounded-requirement scope, enforced
16
+ * downstream by the coverage loop; this parser must not pre-empt it.
17
+ */
9
18
  export declare function parseDecomposeList(raw: string): string[];
10
19
  /** Parsed DECOMPOSE_COVERAGE_PROMPT verdict. */
11
20
  export interface CoverageVerdict {
@@ -12,7 +12,6 @@ import { extractSection, parseFrontMatter } from './task-parsers.js';
12
12
  import { readTextFile } from '../shared/fs-text.js';
13
13
  import { RESUMABLE_STATES } from './task-types.js';
14
14
  const AUTO_FILE_RE = /^(TASK_AUTO_\d{4,})\.md$/;
15
- const MAX_TASKS = 30;
16
15
  export async function allocateAutoId(cwd) {
17
16
  await ensureTasksDir(cwd);
18
17
  const entries = await fsp.readdir(tasksDir(cwd));
@@ -27,15 +26,22 @@ export async function allocateAutoId(cwd) {
27
26
  }
28
27
  return `TASK_AUTO_${String(max + 1).padStart(4, '0')}`;
29
28
  }
30
- /** Parse a decompose-phase model output into a clean list of titles. */
29
+ /**
30
+ * Parse a decompose-phase model output into a clean list of titles.
31
+ *
32
+ * No cap: every title the model emits is kept. An arbitrary ceiling (was 30)
33
+ * silently dropped the tail of a large plan AND re-clipped every coverage retry,
34
+ * so a design that genuinely needed >N tasks could never escape the ceiling —
35
+ * it burned its coverage rounds and shipped a knowingly-gapped plan. The real
36
+ * bound on task count is the design's own grounded-requirement scope, enforced
37
+ * downstream by the coverage loop; this parser must not pre-empt it.
38
+ */
31
39
  export function parseDecomposeList(raw) {
32
40
  const out = [];
33
41
  for (const line of raw.split('\n')) {
34
42
  const m = /^\s*(?:-\s*\[\s*[xX ]?\s*\]\s*|-\s+|\d+[.)]\s+)(.+?)\s*$/.exec(line);
35
43
  if (m && m[1].trim().length > 0)
36
44
  out.push(m[1].trim());
37
- if (out.length >= MAX_TASKS)
38
- break;
39
45
  }
40
46
  return out;
41
47
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mjasnikovs/pi-task",
3
- "version": "0.18.18",
3
+ "version": "0.18.19",
4
4
  "description": "Deterministic task planning and spec-orchestration for local models — crash-safe /task pipelines with verify/enforce gates, a real-time remote web view, and web/docs/fetch/worker subagent tools.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",