@cleocode/contracts 2026.5.123 → 2026.5.125

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/src/boundary.ts CHANGED
@@ -770,7 +770,7 @@ export const BOUNDARY_REGISTRY: readonly BoundaryEntry[] = [
770
770
  },
771
771
  {
772
772
  module: 'paths',
773
- intent: 'data-manifest',
773
+ intent: 'orchestration-glue',
774
774
  tsWrapper: 'packages/paths',
775
775
  canonicalHome: 'cleocode',
776
776
  perfBudget: {
@@ -780,9 +780,9 @@ export const BOUNDARY_REGISTRY: readonly BoundaryEntry[] = [
780
780
  panic_unwind: 'forbidden',
781
781
  root_escape: 'forbidden',
782
782
  },
783
- amendments: [],
783
+ amendments: ['adr-067-project-root-resolution'],
784
784
  rationale:
785
- 'XDG paths SSoT (588 LOC) consumed by 9 packages. Leaf data-manifest with no logic beyond path resolution; TS-only.',
785
+ 'XDG paths SSoT (588 LOC) consumed by 9 packages. Upgraded from data-manifest to orchestration-glue (T10295, T11026): the ID-aware resolver surface — resolveProjectByCwd + resolveCanonicalCleoDir — introduces projectId↔path lookup logic with cross-mount canonicalization and strict-mode enforcement. Still TS-only; no Rust port warranted.',
786
786
  },
787
787
  {
788
788
  module: 'playbooks',
@@ -225,6 +225,12 @@ describe('operation envelope registry snapshots (T10615)', () => {
225
225
  "required": false,
226
226
  "type": "boolean",
227
227
  },
228
+ {
229
+ "cli": undefined,
230
+ "name": "relations",
231
+ "required": false,
232
+ "type": "boolean",
233
+ },
228
234
  ],
229
235
  "requiredParams": [
230
236
  "taskId",
package/src/exit-codes.ts CHANGED
@@ -404,6 +404,26 @@ export const E_INVALID_PIPELINE_STAGE = 'E_INVALID_PIPELINE_STAGE' as const;
404
404
  */
405
405
  export const E_AC_COVERAGE_INCOMPLETE = 'E_AC_COVERAGE_INCOMPLETE' as const;
406
406
 
407
+ /**
408
+ * E_CWD_WALKUP_FORBIDDEN — `getCleoDirAbsolute(cwd)` was called while
409
+ * `CLEO_PATHS_STRICT=1` is set. The caller MUST migrate to
410
+ * `resolveProjectByCwd(cwd)` + `resolveCanonicalCleoDir(projectId)`
411
+ * instead of relying on CWD-walk-up path resolution.
412
+ *
413
+ * This is the enforcement mechanism for the T10297 migration — once all
414
+ * callers are migrated, the strict gate will be made the default and
415
+ * `getCleoDirAbsolute` will be removed entirely.
416
+ *
417
+ * `error.details.fix` carries the exact migration commands.
418
+ *
419
+ * Maps to {@link ExitCode.CONFIG_ERROR} (8) at the CLI boundary.
420
+ *
421
+ * @task T11022
422
+ * @epic T10296
423
+ * @saga T10295
424
+ */
425
+ export const E_CWD_WALKUP_FORBIDDEN = 'E_CWD_WALKUP_FORBIDDEN' as const;
426
+
407
427
  /** Check if an exit code represents an error (1-99). */
408
428
  export function isErrorCode(code: ExitCode): boolean {
409
429
  return code >= 1 && code < 100;
package/src/index.ts CHANGED
@@ -548,6 +548,8 @@ export {
548
548
  E_CHANGESET_YAML_INVALID,
549
549
  // SPEC-T9345 release pipeline v2 error code names (T9525)
550
550
  E_CHANNEL_MISMATCH,
551
+ // T11022 / Saga T10295 — CWD-walk-up forbidden under CLEO_PATHS_STRICT=1
552
+ E_CWD_WALKUP_FORBIDDEN,
551
553
  E_DIRTY_TREE,
552
554
  E_EPIC_EMPTY,
553
555
  E_EPIC_EMPTY_LEAF_NO_EVIDENCE,