@pennixrv/trellis 0.6.24 → 0.6.25

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.
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": "0.6.24",
3
+ "description": "Publishes the bounded semantic RecoveryBrief and formal handoff workflow contract.",
4
+ "breaking": false,
5
+ "recommendMigrate": false,
6
+ "changelog": "**Enhancements:**\n- Adds the bounded semantic RecoveryBrief and formal handoff contract to the Pennix Marketplace `codex-subnode-channel` workflow.\n- Aligns the published Trellis workflow source with the Pennix Marketplace v0.6.24 release.\n\n**Internal:**\n- Restores the missing release manifest so adjacent-version `trellis update` paths remain complete.",
7
+ "migrations": [],
8
+ "notes": "No project migration is required. Existing projects can run the normal `trellis update` flow."
9
+ }
@@ -372,10 +372,11 @@ export class TrellisContext {
372
372
  * Get active task from session runtime context.
373
373
  *
374
374
  * Resolution order (mirrors Python `active_task.resolve_active_task`):
375
- * 1. Lookup the runtime file for the input-derived context key.
376
- * 2. If that misses and exactly one session runtime file exists locally,
377
- * use it (`_resolveSingleSessionFallback`). Refuses to guess when 0 or
378
- * ≥2 files exist so multi-window isolation holds.
375
+ * 1. Lookup the runtime file for the input-derived context key. A known
376
+ * key is authoritative, so a missing or empty context returns no task.
377
+ * 2. If no context key is available and exactly one session runtime file
378
+ * exists locally, use it (`_resolveSingleSessionFallback`). Refuses to
379
+ * guess when 0 or ≥2 files exist so multi-window isolation holds.
379
380
  */
380
381
  getActiveTask(platformInput = null) {
381
382
  const contextKey = this.getContextKey(platformInput)
@@ -390,6 +391,7 @@ export class TrellisContext {
390
391
  stale: !taskDir || !existsSync(taskDir),
391
392
  }
392
393
  }
394
+ return { taskPath: null, source: "none", stale: false }
393
395
  }
394
396
 
395
397
  const fallback = this._resolveSingleSessionFallback()
@@ -471,10 +471,9 @@ export default async ({ directory, platform: hostPlatform = process.platform, en
471
471
  // run when earlier ones miss):
472
472
  // 1. Exact session runtime context lookup for input.sessionID
473
473
  // 2. `Active task: <path>` hint in the dispatch prompt
474
- // (explicit per-dispatch override — beats single-session
475
- // inference so multi-window users can disambiguate)
476
- // 3. Single-session fallback — only when exactly 1 session
477
- // runtime file exists locally
474
+ // (explicit per-dispatch override)
475
+ // 3. Single-session fallback only when the input has no session
476
+ // identity and exactly 1 runtime file exists locally
478
477
  let taskDir = null
479
478
  let taskSource = null
480
479
 
@@ -503,7 +502,7 @@ export default async ({ directory, platform: hostPlatform = process.platform, en
503
502
  }
504
503
  }
505
504
 
506
- if (!taskDir) {
505
+ if (!taskDir && !contextKey) {
507
506
  const fallback = ctx._resolveSingleSessionFallback()
508
507
  if (fallback?.taskPath) {
509
508
  const fallbackDir = ctx.resolveTaskDir(fallback.taskPath)
@@ -653,12 +653,12 @@ def resolve_active_task(
653
653
  ) -> ActiveTask:
654
654
  """Resolve the active task from session runtime state only.
655
655
 
656
- A stale session task is returned as stale. Missing context identity or a
657
- missing/empty session context falls back to single-session inference: if
658
- exactly one session file exists in the runtime, return its task with
659
- source_type="session-fallback" — covers pull-based platform sub-agents
660
- (copilot, gemini, qoder) that don't inherit the parent's session id. ≥2
661
- files or 0 files yield ActiveTask(None) — refuses to guess across windows.
656
+ A stale session task is returned as stale. A known context identity is
657
+ authoritative: a missing or empty context for that identity returns no
658
+ task. When context identity is unavailable, single-session inference may
659
+ cover pull-based platform sub-agents (copilot, gemini, qoder) that don't
660
+ inherit the parent's session id. ≥2 files or 0 files yield
661
+ ActiveTask(None) — refuses to guess across windows.
662
662
  """
663
663
  context_key = resolve_context_key(
664
664
  platform_input,
@@ -671,6 +671,7 @@ def resolve_active_task(
671
671
  active = _active_from_ref(task_ref, repo_root, "session", context_key)
672
672
  if active:
673
673
  return active
674
+ return ActiveTask(None, "none", context_key)
674
675
 
675
676
  if allow_single_session_fallback:
676
677
  fallback = _resolve_single_session_fallback(repo_root)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pennixrv/trellis",
3
- "version": "0.6.24",
3
+ "version": "0.6.25",
4
4
  "description": "AI capabilities grow like ivy — Trellis provides the structure to guide them along a disciplined path",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -34,7 +34,7 @@
34
34
  "inquirer": "^9.3.7",
35
35
  "undici": "^6.21.0",
36
36
  "zod": "^4.4.2",
37
- "@pennixrv/trellis-core": "0.6.24"
37
+ "@pennixrv/trellis-core": "0.6.25"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@eslint/js": "^9.18.0",