@smartmemory/compose 0.2.14-beta → 0.2.16-beta

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/lib/build.js CHANGED
@@ -3944,8 +3944,8 @@ export async function executeParallelDispatch(
3944
3944
  lensFocus: task.lens_focus ?? '',
3945
3945
  exclusions: task.exclusions ?? '',
3946
3946
  confidenceGate: confGateTask,
3947
- taskDescription: response.inputs?.task ?? '',
3948
- blueprint: response.inputs?.blueprint ?? '',
3947
+ taskDescription: dispatchResponse.inputs?.task ?? '',
3948
+ blueprint: dispatchResponse.inputs?.blueprint ?? '',
3949
3949
  });
3950
3950
  // SF-6: append cert reasoning template for Claude-family agents (same as taskIntent path above)
3951
3951
  if (agentType.startsWith('claude') && task.lens_name) {
@@ -249,7 +249,12 @@ function loadValidationContext(cwd, options = {}) {
249
249
  visionStateRaw,
250
250
  foldersByCode,
251
251
  citationRows,
252
- externalPrefixes: options.externalPrefixes || [],
252
+ // Fall back to .compose/compose.json `externalPrefixes` when the caller did
253
+ // not pass them — the `compose validate` CLI/pre-push path does not, so without
254
+ // this fallback every externally-owned row (e.g. STRAT-*) trips folder-linkage.
255
+ externalPrefixes: (options.externalPrefixes && options.externalPrefixes.length)
256
+ ? options.externalPrefixes
257
+ : loadExternalPrefixes(cwd),
253
258
  featureJsonMode: options.featureJsonMode !== false,
254
259
  // Narrative-owned (#39): ROADMAP.md is hand-authored, so a parsed roadmap row
255
260
  // is NOT a canonical data source. Computed once here and consulted by checks
@@ -467,12 +472,20 @@ function runFolderRoadmapLinkageChecks(fctx, ctx, findings) {
467
472
  const rStatus = normalizeStatus(roadmap?.status);
468
473
 
469
474
  if (roadmap && !folder) {
470
- // Severity model for missing folder:
471
- // IN_PROGRESS → error (active work without a tracking artifact)
472
- // PARTIAL / BLOCKED → warning (sub-tickets may live elsewhere; partial progress)
473
- // PLANNED → warning (un-started work)
474
- // COMPLETE / SUPERSEDED / KILLED / PARKED / unknown warning (historical baseline)
475
- if (rStatus === 'IN_PROGRESS') {
475
+ // Externally-owned rows (code matches an externalPrefix, e.g. STRAT-*) are
476
+ // cross-repo references whose folder lives in the owning project — folder
477
+ // linkage does not apply, so emit nothing. (Asymmetric with the external
478
+ // *folder* case below, which downgrades to info: an external folder present
479
+ // locally is unusual; an external row without a local folder is the norm.)
480
+ const isExternal = ctx.externalPrefixes.some((p) => code.startsWith(p));
481
+ if (isExternal) {
482
+ // no finding — out of scope for folder-linkage validation
483
+ } else if (rStatus === 'IN_PROGRESS') {
484
+ // Severity model for missing folder:
485
+ // IN_PROGRESS → error (active work without a tracking artifact)
486
+ // PARTIAL / BLOCKED → warning (sub-tickets may live elsewhere; partial progress)
487
+ // PLANNED → warning (un-started work)
488
+ // COMPLETE / SUPERSEDED / KILLED / PARKED / unknown → warning (historical baseline)
476
489
  findings.push(finding('error', 'ROADMAP_ROW_WITHOUT_FOLDER', code,
477
490
  `ROADMAP row status is IN_PROGRESS (active work) but no folder exists`));
478
491
  } else {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartmemory/compose",
3
- "version": "0.2.14-beta",
3
+ "version": "0.2.16-beta",
4
4
  "description": "Structured AI dev pipeline — goal-to-product orchestration with gates, iteration loops, and feature lifecycle management.",
5
5
  "author": "SmartMemory",
6
6
  "license": "MIT",
@@ -19,7 +19,7 @@
19
19
  "dev:client": "vite",
20
20
  "build": "vite build",
21
21
  "preview": "vite preview",
22
- "test": "node --test test/*.test.js test/comp-obs-branch/*.test.js test/integration/*.test.js && npm run test:ui && npm run test:tracker",
22
+ "test": "node --import ./test/suppress-expected-drift.js --test test/*.test.js test/comp-obs-branch/*.test.js test/integration/*.test.js && npm run test:ui && npm run test:tracker",
23
23
  "test:ui": "vitest run",
24
24
  "test:tracker": "vitest run --config vitest.tracker.config.js",
25
25
  "test:integration": "node --test test/integration/*.test.js",