pm-context 2026.10.21 → 2026.10.24

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/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.10.23 - 2026-10-23
4
+
5
+ ### Added
6
+
7
+ - Focus context packs on changed and explicit files ([pm-context-ax7z](https://github.com/unbraind/pm-context/blob/main/.agents/pm/features/pm-context-ax7z.toon))
8
+
9
+ ### Changed
10
+
11
+ - Enable the gated GitHub issue sync ([pm-context-53bz](https://github.com/unbraind/pm-context/blob/main/.agents/pm/chores/pm-context-53bz.toon))
12
+ - Adopt pm-github 2026.10.16: default-branch-safe gated sync and daily gated closeout PRs ([pm-context-05ub](https://github.com/unbraind/pm-context/blob/main/.agents/pm/chores/pm-context-05ub.toon))
13
+
14
+ ### Fixed
15
+
16
+ - A release that merges but fails to publish is abandoned by the next day's run ([pm-context-7yrb](https://github.com/unbraind/pm-context/blob/main/.agents/pm/issues/pm-context-7yrb.toon))
17
+ - Harden the release merge wait against mergeStateStatus deadlock ([pm-context-jjbl](https://github.com/unbraind/pm-context/blob/main/.agents/pm/issues/pm-context-jjbl.toon))
18
+ - The changelog gate stamps an untagged version with the current date, so its verdict flips every midnight with no commit ([pm-context-a9iw](https://github.com/unbraind/pm-context/blob/main/.agents/pm/issues/pm-context-a9iw.toon))
19
+ - The release job authenticated with a stored npm token that expired, so publishing stopped while every other gate stayed green ([pm-context-594y](https://github.com/unbraind/pm-context/blob/main/.agents/pm/issues/pm-context-594y.toon))
20
+ - A release run bumped and committed a new version every night while publishing was impossible, because the only externally-failable step runs last ([pm-context-p965](https://github.com/unbraind/pm-context/blob/main/.agents/pm/issues/pm-context-p965.toon))
21
+
22
+ ### Other
23
+
24
+ - Enable GitHub CodeQL code scanning ([pm-context-f4tl](https://github.com/unbraind/pm-context/blob/main/.agents/pm/chores/pm-context-f4tl.toon))
25
+ - Certify pm-context on PM CLI/SDK 2026.10.4 and consolidate pending dependency updates ([pm-context-ht20](https://github.com/unbraind/pm-context/blob/main/.agents/pm/chores/pm-context-ht20.toon))
26
+
3
27
  ## 2026.10.21 - 2026-10-21
4
28
 
5
29
  ### Fixed
package/README.md CHANGED
@@ -66,6 +66,7 @@ tracker root (including custom roots) are excluded from `--changed`.
66
66
  Use repeated `--files <path>` for an explicit working set, including paths that
67
67
  do not exist yet. Paths are relative to the repository root (native absolute
68
68
  paths inside that root are also accepted), and backslashes are normalized.
69
+ One trailing LF or CRLF from an edited file list is removed; other whitespace is preserved.
69
70
  `--files` and `--changed` combine their unique paths. Linked directories match
70
71
  contained files with path boundaries, so `src` matches `src/parser.ts` but
71
72
  `sr` does not. File selection intersects any id/status/type/tag filters.
@@ -73,7 +74,14 @@ contained files with path boundaries, so `src` matches `src/parser.ts` but
73
74
  Focus items rank by the number of unique matching paths, then status
74
75
  (`in_progress`, `open`, `blocked`, `closed` with `--include-closed`), then
75
76
  ascending priority and id. Existing neighborhood depth, focus limit, max-items
76
- and token packing apply afterward. An empty working set selects no focus items.
77
+ and token packing apply afterward. Under `--max-items` token pressure, equal-cost
78
+ focus candidates retain that order: greatest overlap first, then lifecycle
79
+ status, ascending priority, and ascending id as the final deterministic tie-break.
80
+ An empty working set selects no focus items.
81
+
82
+ Repository roots retain meaningful trailing whitespace. With older hosts that
83
+ trim the repository context, file focus recovers the exact root from the current
84
+ working repository when it matches that context.
77
85
 
78
86
  Every focus item exposes `matched_files`. `unlinked_changed_files` lists working
79
87
  set paths with no linked item anywhere in the tracker, independently of filters
@@ -259,6 +267,13 @@ carry no session or fact ids and are never automatically credited to a receipt.
259
267
  Receipts live exclusively in the tracker's ignored
260
268
  `runtime/context-receipts/` directory. Each atomic JSON snapshot stores ids,
261
269
  associations, token estimates and deduplicated evidence, **no context text**.
270
+ Receipt writers use a native SDK lock with an explicit owner, a 60-second lifetime,
271
+ a 500 ms total contention ceiling and token-owned release. A verifiably dead writer
272
+ is recovered by the SDK before the lifetime expires; a live owner causes bounded
273
+ refusal. Existing ownerless `runtime/context-receipts/.lock` directories are
274
+ preserved and require explicit recovery after stopping all receipt writers.
275
+ Serving still discloses unavailable measurement when persistence fails.
276
+
262
277
  Rotation keeps the current receipt and the most recently written siblings, at
263
278
  most 200 snapshots of 256 KiB each (50 MiB maximum retained receipt data).
264
279
  Older receipts are deleted; their
@@ -373,3 +388,70 @@ pm-ops template; its internal callback is part of the outstanding documentation
373
388
  scope. The alert and workflow-verifier migration also requires coordinating the
374
389
  existing `pm-context-qu0a` ownership before migrating its linked paths. No helper
375
390
  has been marked removed while that dependency remains unresolved.
391
+
392
+ ## Resume since your last session
393
+
394
+ ```sh
395
+ pm context-pack since --from 2026-10-20T18:00:00Z --token-budget 4000
396
+ pm context-pack since --cursor "$cursor" --token-budget 4000
397
+ ```
398
+
399
+ Returns ranked changes, bounded substantive comments and handoff messages, claims,
400
+ a new opaque cursor and an omission receipt. The whole JSON response fits the
401
+ conservative UTF-8 byte-token ceiling; budget-deferred rows remain resumable.
402
+ See [cursor semantics and recovery](docs/since.md).
403
+
404
+ ## Resume only invalidated assumptions
405
+
406
+ Record a digest manifest for a packet whose sections declare item, settings and
407
+ local evidence dependencies. On resume, receive only invalidated sections;
408
+ changes propagate through dependent sections while unchanged assumptions reuse
409
+ safely. Deleted or unreadable sources refuse reuse with a bounded receipt.
410
+
411
+ ```sh
412
+ pm context-freshness record --packet packet.json > manifest.json
413
+ pm context-freshness resume --packet packet.json --manifest manifest.json --json
414
+ ```
415
+
416
+ No new snapshot store or event delta stream is created. See the
417
+ [packet example, typed SDK and refusal contracts](docs/freshness.md).
418
+
419
+ ## Smallest contradictory claim witnesses
420
+
421
+ `pm context-witnesses --packet claims.json` checks an explicitly selected packet
422
+ of cited, co-current assertions and returns its smallest conflicting pair.
423
+ Use `--format json` (or global `--json`) for JSON; default TOON and JSON both
424
+ retain complete citations within `--byte-budget 4000`. Oversized results refuse
425
+ with a typed code and remedy rather than dropping witness evidence.
426
+
427
+ Rules compare exact subject/field/scope coordinates: unequal single-valued state,
428
+ required/forbidden policy, and explicit supersession of another selected claim.
429
+ `NO_DECLARED_CONFLICT` says only that these rules found no conflict; prose and
430
+ model proposals remain unchecked. The command performs no edits or model calls.
431
+ The SDK exports `checkContextWitnesses`, packet parsing and encoding, and typed
432
+ `WitnessError` refusals. See the [packet example and SDK contract](docs/witnesses.md).
433
+
434
+ ## Without git
435
+
436
+ Criterion evidence packs, item-selected packs, handoffs, usage reports, `context-pack since`, freshness record/resume and `context-witnesses` work in a
437
+ plain initialized tracker without invoking Git. Corpus reads use `listAllComplete`
438
+ with extension hooks disabled and re-certify its full-corpus receipt before packing,
439
+ including custom item types and terminal statuses. Receipt writes and usage updates
440
+ also work without Git. File focus (`--changed` or `--files`)
441
+ requires a Git working repository and explains that requirement when unavailable.
442
+
443
+ ## Coverage-aware evidence packing
444
+
445
+ Pack explicit acceptance criteria and their tracker field citations with
446
+ `pm context-evidence --packet criteria.json --byte-budget 4000` (TOON by default;
447
+ `--format json` or `--json` for compact JSON). Each criterion reports `linked`,
448
+ `budget_omitted`, or `unlinked`. A budget cut retains the exact uncovered
449
+ criterion ID and text. Citations, coverage receipts and output syntax all count
450
+ against the byte ceiling. Whole evidence groups fit or are omitted together.
451
+
452
+ Coverage means all producer-declared bindings are present, not that acceptance
453
+ was semantically verified. Source fields are read for sizing; omitted evidence
454
+ is never described as reviewed. Linked artifacts are not opened and tests are
455
+ not run. The command and typed `packCriterionEvidence` SDK work without Git and
456
+ leave the tracker unchanged. [Packet, CLI and SDK examples, refusal remedies,
457
+ and limitations](docs/criterion-evidence.md).
@@ -99,15 +99,22 @@ export declare function normalizeReceiptFile(value: string): string;
99
99
  * manifest, and persist its receipt. Fact hashes exclude clocks and receipt ids.
100
100
  * Write failures propagate so callers disclose that measurement is unavailable.
101
101
  */
102
- export declare function serveContextReceipt(pmRoot: string, output: string, format: "json" | "text", associations: ReceiptAssociations, identity: ReceiptIdentity, outputPath?: string): {
102
+ export declare function serveContextReceipt(pmRoot: string, output: string, format: "json" | "text", associations: ReceiptAssociations, identity: ReceiptIdentity, outputPath?: string): Promise<{
103
103
  output: string;
104
104
  receipt: ContextReceipt;
105
+ }>;
106
+ /** Native namespace, lease lifetime and hard total contention budget for receipt writers. */
107
+ export declare const RECEIPT_LOCK: {
108
+ readonly id: "pm-context-receipts";
109
+ readonly owner: "pm-context:receipts";
110
+ readonly ttlSeconds: 60;
111
+ readonly waitMs: 500;
105
112
  };
106
113
  /**
107
114
  * Record explicit, receipt-scoped usage. Unknown ids reject the entire update;
108
115
  * repeat reports are idempotent. Item/file proxies match only facts in this receipt.
109
116
  */
110
- export declare function recordReceiptUsage(pmRoot: string, usage: ReceiptUsage): void;
117
+ export declare function recordReceiptUsage(pmRoot: string, usage: ReceiptUsage): Promise<void>;
111
118
  /** Read retained receipts, report skipped corruption, and aggregate before limiting detail. */
112
119
  export declare function reportContextReceipts(pmRoot: string, options: ReceiptReportOptions): ReceiptReport;
113
120
  /** Render the receipt denominator, usage proxies and unused estimated cost as a brief. */
@@ -1 +1 @@
1
- {"version":3,"file":"context-receipts.d.ts","sourceRoot":"","sources":["../context-receipts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-receipts.d.ts","sourceRoot":"","sources":["../context-receipts.ts"],"names":[],"mappings":"AASA,yEAAyE;AACzE,eAAO,MAAM,cAAc;aAAK,KAAK,EAAE,GAAG;aAAE,KAAK,EAAE,MAAO;CAAW,CAAC;AACtE,yEAAyE;AACzE,eAAO,MAAM,sBAAsB,QAAsC,CAAC;AAC1E,sFAAsF;AACtF,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;AACxD,0EAA0E;AAC1E,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AACD,uDAAuD;AACvD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AACD,mFAAmF;AACnF,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,qBAAqB,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAKD,qFAAqF;AACrF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AACD,iFAAiF;AACjF,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AACD,sEAAsE;AACtE,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,uBAAuB,EAAE,MAAM,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;CACzB;AACD,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,qBAAqB,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,KAAK,CAAC,cAAc,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,KAAK,EAAE,KAAK,CAAC,cAAc,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,QAAQ,EAAE,KAAK,CAAC,cAAc,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CACtG;AACD,kFAAkF;AAClF,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO1D;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,YAAY,EAAE,mBAAmB,EACjC,QAAQ,EAAE,eAAe,EACzB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,CAAC,CAiFtD;AAWD,6FAA6F;AAC7F,eAAO,MAAM,YAAY;aAAK,EAAE,EAAE,qBAAqB;aAAE,KAAK,EAAE,qBAAqB;aAAE,UAAU,EAAE,EAAE;aAAE,MAAM,EAAE,GAAG;CAAW,CAAC;AAmD9H;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB3F;AAwBD,+FAA+F;AAC/F,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA0BlG;AAED,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CASjE"}
@@ -2,6 +2,7 @@
2
2
  * Receipt protocol for the final output of pm-context's serving commands.
3
3
  * The package owns only runtime/context-receipts, never the SDK usage ledger.
4
4
  */
5
+ import { acquireLock } from "@unbrained/pm-cli/sdk";
5
6
  import { createHash, randomUUID } from "node:crypto";
6
7
  import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
7
8
  import { basename, isAbsolute, join, posix } from "node:path";
@@ -23,7 +24,7 @@ export function normalizeReceiptFile(value) {
23
24
  * manifest, and persist its receipt. Fact hashes exclude clocks and receipt ids.
24
25
  * Write failures propagate so callers disclose that measurement is unavailable.
25
26
  */
26
- export function serveContextReceipt(pmRoot, output, format, associations, identity, outputPath) {
27
+ export async function serveContextReceipt(pmRoot, output, format, associations, identity, outputPath) {
27
28
  const receipt = {
28
29
  protocol: "pm-context-usage/v1", receipt_id: randomUUID(), session: "", author: identity.author,
29
30
  served_at: new Date().toISOString(), command: identity.command, sections: [], facts: [], protocol_tokens: 0, used: {},
@@ -100,7 +101,7 @@ export function serveContextReceipt(pmRoot, output, format, associations, identi
100
101
  rendered = `${lines.join("\n")}\n\nContext receipt: ${receipt.receipt_id}; session: ${receipt.session}; protocol: ${receipt.protocol}\n`;
101
102
  receipt.protocol_tokens = Math.ceil((rendered.length - output.length) / 4);
102
103
  }
103
- withReceiptStore(pmRoot, (directory) => {
104
+ await withReceiptStore(pmRoot, (directory) => {
104
105
  const path = join(directory, `${receipt.receipt_id}.json`);
105
106
  try {
106
107
  persistReceipt(path, receipt);
@@ -134,17 +135,21 @@ function persistReceipt(path, receipt) {
134
135
  rmSync(temporary, { force: true });
135
136
  }
136
137
  }
137
- /** Cooperating writers serialize rotation and evidence updates; contention asks for retry. */
138
- function withReceiptStore(pmRoot, operation) {
138
+ /** Native namespace, lease lifetime and hard total contention budget for receipt writers. */
139
+ export const RECEIPT_LOCK = { id: "pm-context-receipts", owner: "pm-context:receipts", ttlSeconds: 60, waitMs: 500 };
140
+ /** Serialize receipt commits under a token-owned native lock, retaining unverifiable legacy locks. */
141
+ async function withReceiptStore(pmRoot, operation) {
139
142
  const directory = join(pmRoot, RECEIPTS_RELATIVE_PATH);
140
143
  mkdirSync(directory, { recursive: true, mode: 0o700 });
141
- const lock = join(directory, ".lock");
142
- mkdirSync(lock);
144
+ const release = await acquireLock(pmRoot, RECEIPT_LOCK.id, RECEIPT_LOCK.ttlSeconds, RECEIPT_LOCK.owner, false, true, RECEIPT_LOCK.waitMs, { maxWaitMs: RECEIPT_LOCK.waitMs });
143
145
  try {
146
+ if (existsSync(join(directory, ".lock"))) {
147
+ throw new Error("Legacy context receipt .lock has no verifiable owner. Stop receipt writers and explicitly recover it before retrying.");
148
+ }
144
149
  return operation(directory);
145
150
  }
146
151
  finally {
147
- rmSync(lock, { recursive: true, force: true });
152
+ await release();
148
153
  }
149
154
  }
150
155
  /** Validate every field consumed by reports, skipping oversized or corrupt snapshots. */
@@ -203,10 +208,10 @@ function readReceipt(path) {
203
208
  * Record explicit, receipt-scoped usage. Unknown ids reject the entire update;
204
209
  * repeat reports are idempotent. Item/file proxies match only facts in this receipt.
205
210
  */
206
- export function recordReceiptUsage(pmRoot, usage) {
211
+ export async function recordReceiptUsage(pmRoot, usage) {
207
212
  if (!/^[\da-f-]{36}$/.test(usage.receipt_id))
208
213
  throw new Error("Invalid context receipt id");
209
- withReceiptStore(pmRoot, (directory) => {
214
+ await withReceiptStore(pmRoot, (directory) => {
210
215
  const path = join(directory, `${usage.receipt_id}.json`);
211
216
  const receipt = readReceipt(path);
212
217
  if (!receipt)
@@ -1 +1 @@
1
- {"version":3,"file":"context-receipts.js","sourceRoot":"","sources":["../context-receipts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-receipts.js","sourceRoot":"","sources":["../context-receipts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /** Criterion-level packing over explicit tracker bindings; no semantic search or review. */
2
+ import { PmCliError } from "@unbrained/pm-cli/sdk";
3
+ import type { FreshnessReader } from "./freshness.ts";
4
+ /** A top-level authoritative tracker field, including linked tests, docs or files. */
5
+ export interface EvidenceBinding {
6
+ item: string;
7
+ field: string;
8
+ }
9
+ /** All declared bindings must fit before a criterion has linked evidence coverage. */
10
+ export interface EvidenceCriterion {
11
+ id: string;
12
+ text: string;
13
+ evidence: EvidenceBinding[];
14
+ }
15
+ /** Explicit producer-owned acceptance criteria; empty bindings disclose missing evidence. */
16
+ export interface EvidencePacket {
17
+ criteria: EvidenceCriterion[];
18
+ }
19
+ /** Stable refusal categories with host-compatible recovery instructions. */
20
+ export declare class EvidencePackingError extends PmCliError {
21
+ /** Safe machine-readable failure category, independent of source contents. */
22
+ readonly code: "INVALID_PACKET" | "INVALID_ARGUMENT" | "INPUT_UNAVAILABLE" | "SOURCE_UNAVAILABLE" | "BUDGET_TOO_SMALL";
23
+ /** Concrete action that permits retrying without editing the source tracker. */
24
+ readonly remedy: string;
25
+ constructor(code: EvidencePackingError["code"], remedy: string);
26
+ }
27
+ /** Per-criterion omission receipt remains present even when no evidence fits. */
28
+ export interface CriterionCoverage {
29
+ id: string;
30
+ text: string;
31
+ state: "linked" | "budget_omitted" | "unlinked";
32
+ required: number;
33
+ packed: number;
34
+ }
35
+ /** Lossless field value encoded as JSON text so TOON and JSON share one compact schema. */
36
+ export interface PackedEvidence extends EvidenceBinding {
37
+ criterion: string;
38
+ value_json: string;
39
+ }
40
+ /** Complete response, including the conservative self-inclusive byte measurement. */
41
+ export interface EvidencePack {
42
+ protocol: "pm-context-evidence/v1";
43
+ basis: "all-declared-bindings;not-semantic-acceptance";
44
+ ranking: "sdk-value-per-byte;criterion-id-ties";
45
+ source_fields_read: number;
46
+ content_reviewed: false;
47
+ omitted_evidence: "read-for-sizing-only;artifacts-not-opened;tests-not-run";
48
+ criteria: CriterionCoverage[];
49
+ evidence: PackedEvidence[];
50
+ byte_budget: number;
51
+ /** Upper bound includes the newline and this field's own decimal digits. */
52
+ byte_upper_bound: number;
53
+ remedy: string;
54
+ }
55
+ /** Bound both input work and output transport; the ceiling measures UTF-8 bytes, not tokens. */
56
+ export interface EvidencePackOptions {
57
+ byteBudget?: number;
58
+ format?: "json" | "toon";
59
+ }
60
+ /** Validate and normalize declarations before any source read or budget selection. */
61
+ export declare function parseEvidencePacket(value: unknown): EvidencePacket;
62
+ /** Reuse bounded stable JSON input handling without exposing paths in refusals. */
63
+ export declare function readEvidencePacket(path: string): EvidencePacket;
64
+ /** Render exact compact JSON or TOON tables; nested source values stay lossless JSON strings. */
65
+ export declare function encodeEvidencePack(pack: EvidencePack, format: "json" | "toon"): string;
66
+ /** Pack complete criterion groups using SDK selection and exact serialized transport costs. */
67
+ export declare function packCriterionEvidence(input: EvidencePacket, read: FreshnessReader, options?: EvidencePackOptions): Promise<EvidencePack>;
68
+ //# sourceMappingURL=evidence-packing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-packing.d.ts","sourceRoot":"","sources":["../evidence-packing.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,sFAAsF;AACtF,MAAM,WAAW,eAAe;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAChE,sFAAsF;AACtF,MAAM,WAAW,iBAAiB;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,eAAe,EAAE,CAAA;CAAE;AAC5F,6FAA6F;AAC7F,MAAM,WAAW,cAAc;IAAG,QAAQ,EAAE,iBAAiB,EAAE,CAAA;CAAE;AACjE,4EAA4E;AAC5E,qBAAa,oBAAqB,SAAQ,UAAU;IAClD,8EAA8E;IAC9E,SAAiB,IAAI,EAAE,gBAAgB,GAAG,kBAAkB,GAAG,mBAAmB,GAAG,oBAAoB,GAAG,kBAAkB,CAAC;IAC/H,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,YAAY,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAG7D;CACF;AACD,iFAAiF;AACjF,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,GAAG,gBAAgB,GAAG,UAAU,CAAC;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,2FAA2F;AAC3F,MAAM,WAAW,cAAe,SAAQ,eAAe;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AACjG,qFAAqF;AACrF,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,wBAAwB,CAAC;IACnC,KAAK,EAAE,+CAA+C,CAAC;IACvD,OAAO,EAAE,sCAAsC,CAAC;IAChD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,KAAK,CAAC;IACxB,gBAAgB,EAAE,yDAAyD,CAAC;IAC5E,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,gGAAgG;AAChG,MAAM,WAAW,mBAAmB;IAAG,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE;AAOtF,sFAAsF;AACtF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAkBlE;AAGD,mFAAmF;AACnF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAI/D;AACD,iGAAiG;AACjG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAUtF;AACD,+FAA+F;AAC/F,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,YAAY,CAAC,CAoDlJ"}
@@ -0,0 +1,146 @@
1
+ /** Criterion-level packing over explicit tracker bindings; no semantic search or review. */
2
+ import { PmCliError } from "@unbrained/pm-cli/sdk";
3
+ import { packContextCandidates } from "@unbrained/pm-cli/sdk/query";
4
+ import { readFreshnessJson } from "./freshness.js";
5
+ /** Stable refusal categories with host-compatible recovery instructions. */
6
+ export class EvidencePackingError extends PmCliError {
7
+ /** Concrete action that permits retrying without editing the source tracker. */
8
+ remedy;
9
+ constructor(code, remedy) {
10
+ super(`${code}: ${remedy}`, 2, { code, nextSteps: [remedy] });
11
+ this.remedy = remedy;
12
+ }
13
+ }
14
+ /** Treat records distinctly from arrays and null during untrusted JSON validation. */
15
+ function object(value) { return value !== null && typeof value === "object" && !Array.isArray(value); }
16
+ /** Coordinates are public identifiers rather than filesystem paths. */
17
+ function identifier(value) { return typeof value === "string" && /^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,127}$/.test(value); }
18
+ /** Refuse unknown qualifiers rather than silently changing the declared coverage contract. */
19
+ function keys(value, allowed) { return Object.keys(value).every((key) => allowed.includes(key)); }
20
+ /** Validate and normalize declarations before any source read or budget selection. */
21
+ export function parseEvidencePacket(value) {
22
+ const fail = () => new EvidencePackingError("INVALID_PACKET", "Supply 1-128 unique criteria with id, text (1-1024 characters), and evidence bindings {item,field}; use at most 512 distinct bindings in total. Remove unknown qualifiers and duplicate bindings.");
23
+ let size;
24
+ try {
25
+ size = Buffer.byteLength(JSON.stringify(value) ?? "");
26
+ }
27
+ catch {
28
+ throw fail();
29
+ }
30
+ if (size > 262144 || !object(value) || !keys(value, ["criteria"]) || !Array.isArray(value.criteria) || value.criteria.length < 1 || value.criteria.length > 128)
31
+ throw fail();
32
+ const ids = new Set();
33
+ let count = 0;
34
+ for (const row of value.criteria) {
35
+ if (!object(row) || !keys(row, ["id", "text", "evidence"]) || !identifier(row.id) || ids.has(row.id) || typeof row.text !== "string" || !row.text.trim() || row.text.length > 1024 || !Array.isArray(row.evidence))
36
+ throw fail();
37
+ ids.add(row.id);
38
+ const bindings = new Set();
39
+ for (const binding of row.evidence) {
40
+ if (!object(binding) || !keys(binding, ["item", "field"]) || !identifier(binding.item) || !identifier(binding.field) || bindings.has(JSON.stringify([binding.item, binding.field])))
41
+ throw fail();
42
+ bindings.add(JSON.stringify([binding.item, binding.field]));
43
+ if (++count > 512)
44
+ throw fail();
45
+ }
46
+ }
47
+ const packet = value;
48
+ return { criteria: packet.criteria.map((row) => ({ id: row.id, text: row.text, evidence: row.evidence.map((binding) => ({ item: binding.item, field: binding.field })).sort((a, b) => compare(JSON.stringify(a), JSON.stringify(b))) })).sort((a, b) => compare(a.id, b.id)) };
49
+ }
50
+ /** Code-unit ordering avoids locale-dependent ordering of producer declarations. */
51
+ function compare(a, b) { return Number(a > b) - Number(a < b); }
52
+ /** Reuse bounded stable JSON input handling without exposing paths in refusals. */
53
+ export function readEvidencePacket(path) {
54
+ let value;
55
+ try {
56
+ value = readFreshnessJson(path);
57
+ }
58
+ catch {
59
+ throw new EvidencePackingError("INPUT_UNAVAILABLE", "Provide a stable readable regular UTF-8 JSON packet no larger than 262144 bytes.");
60
+ }
61
+ return parseEvidencePacket(value);
62
+ }
63
+ /** Render exact compact JSON or TOON tables; nested source values stay lossless JSON strings. */
64
+ export function encodeEvidencePack(pack, format) {
65
+ if (format === "json")
66
+ return `${JSON.stringify(pack)}\n`;
67
+ if (format !== "toon")
68
+ throw new EvidencePackingError("INVALID_ARGUMENT", "Use --format json or toon.");
69
+ const { criteria, evidence, ...summary } = pack;
70
+ const lines = Object.entries(summary).map(([key, value]) => `${key}: ${JSON.stringify(value)}`);
71
+ for (const [name, rows, fields] of [["criteria", criteria, ["id", "text", "state", "required", "packed"]], ["evidence", evidence, ["criterion", "item", "field", "value_json"]]]) {
72
+ lines.push(`${name}[${rows.length}]{${fields.join(",")}}:`);
73
+ for (const row of rows)
74
+ lines.push(` ${fields.map((field) => JSON.stringify(row[field])).join(",")}`);
75
+ }
76
+ return `${lines.join("\n")}\n`;
77
+ }
78
+ /** Pack complete criterion groups using SDK selection and exact serialized transport costs. */
79
+ export async function packCriterionEvidence(input, read, options = {}) {
80
+ const packet = parseEvidencePacket(input);
81
+ const budget = options.byteBudget ?? 4000;
82
+ const format = options.format ?? "toon";
83
+ if (!Number.isSafeInteger(budget) || budget < 512 || budget > 262144 || !["json", "toon"].includes(format))
84
+ throw new EvidencePackingError("INVALID_ARGUMENT", "Use json or toon and an integer --byte-budget between 512 and 262144.");
85
+ const values = new Map();
86
+ let sourceBytes = 0;
87
+ const groups = [];
88
+ for (const criterion of packet.criteria) {
89
+ const rows = [];
90
+ for (const binding of criterion.evidence) {
91
+ const key = JSON.stringify(binding);
92
+ if (!values.has(key)) {
93
+ let encoded;
94
+ try {
95
+ const result = await read({ kind: "item", id: binding.item, fields: [binding.field] });
96
+ const field = object(result) ? result[binding.field] : undefined;
97
+ if (!object(field) || field.present !== true)
98
+ throw new Error();
99
+ encoded = JSON.stringify(field.value);
100
+ if (encoded === undefined)
101
+ throw new Error();
102
+ sourceBytes += Buffer.byteLength(encoded);
103
+ if (sourceBytes > 8388608)
104
+ throw new Error();
105
+ }
106
+ catch {
107
+ throw new EvidencePackingError("SOURCE_UNAVAILABLE", `Restore readable field ${binding.field} on item ${binding.item}, or narrow the explicit bindings to at most 8388608 source bytes. No coverage result was issued.`);
108
+ }
109
+ values.set(key, encoded);
110
+ }
111
+ rows.push({ criterion: criterion.id, ...binding, value_json: values.get(key) });
112
+ }
113
+ if (rows.length)
114
+ groups.push({ id: criterion.id, rows });
115
+ }
116
+ const pack = {
117
+ protocol: "pm-context-evidence/v1", basis: "all-declared-bindings;not-semantic-acceptance", ranking: "sdk-value-per-byte;criterion-id-ties",
118
+ source_fields_read: values.size, content_reviewed: false, omitted_evidence: "read-for-sizing-only;artifacts-not-opened;tests-not-run",
119
+ criteria: packet.criteria.map((row) => ({ id: row.id, text: row.text, state: row.evidence.length ? "budget_omitted" : "unlinked", required: row.evidence.length, packed: 0 })),
120
+ evidence: [], byte_budget: budget, byte_upper_bound: budget,
121
+ remedy: "Increase byte budget for budget_omitted criteria; declare evidence for unlinked criteria. Review packed evidence before judging acceptance.",
122
+ };
123
+ // The initial receipt uses the longest state and zero counts. Packed count
124
+ // digits and both table-length headers are reserved separately per candidate.
125
+ const overhead = Buffer.byteLength(encodeEvidencePack(pack, format));
126
+ if (overhead > budget)
127
+ throw new EvidencePackingError("BUDGET_TOO_SMALL", "Increase --byte-budget to retain every criterion and the complete coverage receipt.");
128
+ const candidates = groups.map((group, index) => {
129
+ const cost = group.rows.reduce((sum, row) => sum + Buffer.byteLength(format === "json" ? JSON.stringify(row) : ` ${[row.criterion, row.item, row.field, row.value_json].map((value) => JSON.stringify(value)).join(",")}\n`) + 1, 8);
130
+ return { id: group.id, item: group.rows, rank: index + 1, score: 1, token_costs: { identity: cost, summary: cost, full: cost } };
131
+ });
132
+ if (budget > overhead) {
133
+ const selected = packContextCandidates(candidates, { tokenBudget: budget - overhead, profile: "context" });
134
+ const included = new Set(selected.included.map((row) => row.id));
135
+ pack.evidence = selected.included.flatMap((row) => row.item);
136
+ for (const criterion of pack.criteria)
137
+ if (included.has(criterion.id)) {
138
+ criterion.state = "linked";
139
+ criterion.packed = criterion.required;
140
+ }
141
+ }
142
+ // Starting at the ceiling makes the self-inclusive digit count conservative.
143
+ pack.byte_upper_bound = Buffer.byteLength(encodeEvidencePack(pack, format));
144
+ return pack;
145
+ }
146
+ //# sourceMappingURL=evidence-packing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-packing.js","sourceRoot":"","sources":["../evidence-packing.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ export declare function normalizeFocusPath(value: string, root: string): string
16
16
  /** Check tracker containment using repository-relative paths on native and Windows roots. */
17
17
  export declare function isTrackerPath(path: string, pmRoot: string, repoRoot: string): boolean;
18
18
  /** Resolve --changed and repeated --files using real Git; an empty working set remains an active filter. */
19
- export declare function resolveFileFocus(options: Record<string, unknown>, args: string[], cwd: string, pmRoot: string): FileFocus | undefined;
19
+ export declare function resolveFileFocus(options: Record<string, unknown>, args: string[], cwd: string, pmRoot: string, sourceCwd?: string): FileFocus | undefined;
20
20
  /** Match exact files and linked directory ancestors, retaining unique changed paths per item. */
21
21
  export declare function matchFileFocus(items: PmItem[], focus: FileFocus, links: (value: unknown) => string[]): Map<string, string[]>;
22
22
  /** Rank focus by unique overlap, lifecycle status, priority, then deterministic id. */
@@ -1 +1 @@
1
- {"version":3,"file":"file-focus.d.ts","sourceRoot":"","sources":["../file-focus.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,8EAA8E;AAC9E,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,sEAAsE;AACtE,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,QAAQ,KAAK;IACtB,QAAQ,CAAC,IAAI,EAAE,oBAAoB,GAAG,cAAc,GAAG,YAAY,GAAG,oBAAoB,GAAG,qBAAqB,CAAC;IACnH,YAAY,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAIhF;CACF;AASD,6FAA6F;AAC7F,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAalF;AAOD,6FAA6F;AAC7F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAOrF;AAED,4GAA4G;AAC5G,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAsCrI;AAED,iGAAiG;AACjG,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAQ5H;AAED,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAKvF;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,KAAK,EAAE;IAAE,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,MAAM,EAAE,CAItF;AAED,+GAA+G;AAC/G,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA4B1E"}
1
+ {"version":3,"file":"file-focus.d.ts","sourceRoot":"","sources":["../file-focus.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,8EAA8E;AAC9E,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,sEAAsE;AACtE,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,QAAQ,KAAK;IACtB,QAAQ,CAAC,IAAI,EAAE,oBAAoB,GAAG,cAAc,GAAG,YAAY,GAAG,oBAAoB,GAAG,qBAAqB,CAAC;IACnH,YAAY,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAIhF;CACF;AASD,6FAA6F;AAC7F,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAclF;AAOD,6FAA6F;AAC7F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAOrF;AAED,4GAA4G;AAC5G,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,SAAS,GAAG,SAAS,CA0CtJ;AAED,iGAAiG;AACjG,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAQ5H;AAED,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAKvF;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,KAAK,EAAE;IAAE,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,MAAM,EAAE,CAItF;AAED,+GAA+G;AAC/G,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA4B1E"}
@@ -20,6 +20,7 @@ function git(cwd, args) {
20
20
  }
21
21
  /** Convert native or slash-separated links to safe paths relative to the repository root. */
22
22
  export function normalizeFocusPath(value, root) {
23
+ value = value.replace(/\r?\n$/, "");
23
24
  if (!value || /^[a-z][a-z\d+.-]*:\/\//i.test(value))
24
25
  return undefined;
25
26
  let path = value.replace(/\\/g, "/");
@@ -52,7 +53,7 @@ export function isTrackerPath(path, pmRoot, repoRoot) {
52
53
  return directory === "." || file === directory || file.startsWith(`${directory}/`);
53
54
  }
54
55
  /** Resolve --changed and repeated --files using real Git; an empty working set remains an active filter. */
55
- export function resolveFileFocus(options, args, cwd, pmRoot) {
56
+ export function resolveFileFocus(options, args, cwd, pmRoot, sourceCwd = cwd) {
56
57
  const changed = options.changed !== undefined && options.changed !== false;
57
58
  const explicit = options.files === undefined ? [] : Array.isArray(options.files) ? options.files.map(String) : [String(options.files)];
58
59
  if (!changed && explicit.length === 0) {
@@ -62,7 +63,11 @@ export function resolveFileFocus(options, args, cwd, pmRoot) {
62
63
  }
63
64
  if (args.length > 1 || (!changed && args.length > 0))
64
65
  throw new FileFocusError("INVALID_FILE_FOCUS", "Pass one base with --changed, or repeat --files <path>.");
65
- const root = git(cwd, ["rev-parse", "--show-toplevel"])?.trim();
66
+ // Older hosts trim their root context. Recover it only when the actual working
67
+ // repository matches that context, preserving portable roots for other repos.
68
+ const sourceRoot = git(sourceCwd, ["rev-parse", "--show-toplevel"])?.replace(/\n$/, "");
69
+ const root = sourceRoot?.trimEnd() === cwd ? sourceRoot
70
+ : git(cwd, ["rev-parse", "--show-toplevel"])?.replace(/\n$/, "");
66
71
  if (!root)
67
72
  throw new FileFocusError("NOT_GIT_REPOSITORY", "File focus requires a Git working repository. Run from the repository containing the changed files.");
68
73
  const files = new Set();