pm-github 2026.11.2 → 2026.11.11
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 +25 -0
- package/README.md +160 -8
- package/dist/gate.d.ts +2 -0
- package/dist/gate.d.ts.map +1 -1
- package/dist/gate.js +370 -12
- package/dist/gate.js.map +1 -1
- package/dist/import-fidelity.d.ts +2 -1
- package/dist/import-fidelity.d.ts.map +1 -1
- package/dist/import-fidelity.js +21 -9
- package/dist/import-fidelity.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -22
- package/dist/index.js.map +1 -1
- package/dist/workflow-diagnostic.d.ts +2 -0
- package/dist/workflow-diagnostic.d.ts.map +1 -1
- package/dist/workflow-diagnostic.js +66 -2
- package/dist/workflow-diagnostic.js.map +1 -1
- package/manifest.json +1 -1
- package/package.json +9 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026.11.11 - 2026-11-11
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- Explain scheduled install mismatches and preserve redacted command failure diagnostics ([pm-github-o9r7](https://github.com/unbraind/pm-github/blob/main/.agents/pm/issues/pm-github-o9r7.toon))
|
|
8
|
+
- Packed projection fixture cleanup can mask its own test outcome ([pm-github-mes8](https://github.com/unbraind/pm-github/blob/main/.agents/pm/issues/pm-github-mes8.toon))
|
|
9
|
+
|
|
10
|
+
### Security
|
|
11
|
+
|
|
12
|
+
- Reusable Dependabot merge workflow with complete commit provenance ([pm-github-dependabot-merge](https://github.com/unbraind/pm-github/blob/main/.agents/pm/features/pm-github-dependabot-merge.toon))
|
|
13
|
+
|
|
14
|
+
## 2026.11.4 - 2026-11-04
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Make repeated gated imports byte-identical for closed items ([pm-github-repeat-noop](https://github.com/unbraind/pm-github/blob/main/.agents/pm/issues/pm-github-repeat-noop.toon))
|
|
19
|
+
- Reusable workflows fail after pm package install when callers pin zero-padded release tags like v2026.11.02 ([pm-github-4gak](https://github.com/unbraind/pm-github/blob/main/.agents/pm/issues/pm-github-4gak.toon))
|
|
20
|
+
- Allow public technical forms in the tracker privacy gate ([pm-github-01n8](https://github.com/unbraind/pm-github/blob/main/.agents/pm/issues/pm-github-01n8.toon))
|
|
21
|
+
- Resolve an unrelated unreachable commit identity reported by whole-store privacy checks ([pm-github-privacy-store-followup](https://github.com/unbraind/pm-github/blob/main/.agents/pm/issues/pm-github-privacy-store-followup.toon))
|
|
22
|
+
|
|
23
|
+
### Other
|
|
24
|
+
|
|
25
|
+
- Bound coverage aggregation memory and compare default-heap CI behavior ([pm-github-vhi6](https://github.com/unbraind/pm-github/blob/main/.agents/pm/tasks/pm-github-vhi6.toon))
|
|
26
|
+
- Approve or amend the noreply identity on the normalize-release-tag-version branch commit ([pm-github-8mkc](https://github.com/unbraind/pm-github/blob/main/.agents/pm/tasks/pm-github-8mkc.toon))
|
|
27
|
+
|
|
3
28
|
## 2026.11.1 - 2026-11-01
|
|
4
29
|
|
|
5
30
|
### Fixed
|
package/README.md
CHANGED
|
@@ -359,8 +359,8 @@ See [SDK adoption evidence](docs/sdk-adoption-1025.md).
|
|
|
359
359
|
decoding first appeared in 2026.10.9, while the transaction `match` guard used
|
|
360
360
|
by identity repair first appeared in 2026.10.17. The declared minimum must
|
|
361
361
|
support both. Older hosts refuse installation or activation through matching
|
|
362
|
-
peer
|
|
363
|
-
|
|
362
|
+
peer dependency minimum and the top-level manifest floor. Development uses
|
|
363
|
+
an independent exact, integrity-locked SDK pin. CI separately installs the exact
|
|
364
364
|
minimum from npm, type-checks all production and operational SDK imports, then
|
|
365
365
|
loads and exercises the packed artifact in a non-git tracker. See the
|
|
366
366
|
[published SDK evidence](docs/sdk-minimum.md).
|
|
@@ -792,9 +792,20 @@ pm github gate --allowlist .pm-github-gate-allowlist.json
|
|
|
792
792
|
It scans **only the proposed change** — the added lines and their filenames in the staged/working/untracked diff under the resolved pm tracker path (never a hardcoded `.agents/pm`; the SDK-resolved path wins), or an explicit `--diff` file — so pre-existing reviewed content is not re-litigated on every run, and removed content (which cannot publish anything new) is never scanned. A finding in a filename uses `field: "file_path"` and redacts a sensitive item id. It fails closed (non-zero, machine-readable report with `item_id` + `field` + `rule` + the sha256 `hash` of the matched content, **never the matched content itself**) on:
|
|
793
793
|
|
|
794
794
|
- **credentials** — GitHub (`ghp_/gho_/ghu_/ghs_/ghr_` and fine-grained `github_pat_`), npm, AWS access key ids, Slack (including app and cookie credentials), OpenAI, Anthropic tokens, generic `Authorization: Bearer` values, `-----BEGIN … PRIVATE KEY-----` blocks, and high-entropy assignments to secret-named identifiers (`token = "…"`, `api_key: …`, `accessToken: …`) whose value has high measured entropy. UUID-shaped credential values and values containing dates receive the same checks;
|
|
795
|
-
- **personal data** — email addresses other than no-reply identities (`@users.noreply.github.com`, `noreply@…`, `@noreply.…`), phone numbers in international (`+…`) or North-American (`(555) 123-4567`, `555-123-4567`) notation, and unformatted numbers under phone/tel/mobile contact labels;
|
|
795
|
+
- **personal data** — email addresses other than the reserved-domain fixtures described below and no-reply identities (`@users.noreply.github.com`, `noreply@…`, `@noreply.…`), phone numbers in international (`+…`) or North-American (`(555) 123-4567`, `555-123-4567`) notation, and unformatted numbers under phone/tel/mobile contact labels;
|
|
796
796
|
- **host paths** — absolute local filesystem paths (POSIX home/system directories and Windows drive paths with either separator), and named home-directory references.
|
|
797
797
|
|
|
798
|
+
Public technical forms pass without a hash allowlist:
|
|
799
|
+
|
|
800
|
+
- procfs interfaces: `/proc`, `/proc/`, `/proc/self/…`, `/proc/<placeholder>/…` (including the bare `root` entry directly after the `self` pid, but no path below it; a concrete numeric pid stays a refusal); sysfs interfaces under `/sys`;
|
|
801
|
+
- hosted runner workspaces: the suffix `runner/work/<seg>/<seg>/…` under either `/home` or `/Users`, Windows `D:/a/<seg>/<seg>/…` with either separator, and `/opt/hostedtoolcache/…` — including the runner's own `tmp` scratch directory inside the workspace;
|
|
802
|
+
- fixture emails on exactly `example.com`, `example.net`, `example.org`, bare `localhost`, or domains ending in `.example`, `.invalid`, `.test` or `.localhost`, compared case-insensitively against the whole domain;
|
|
803
|
+
- SSH transport using only the `git` account: `git@host:owner/repo.git` or `ssh://git@host/owner/repo.git` (including a numeric SSH port);
|
|
804
|
+
- placeholder account segments `example`, `<placeholder>`, `{placeholder}`, `$USER`, `${USER}` or `%USERNAME%` directly after `/home/`, `/Users/` or Windows `C:\Users\` (either separator, also mixed within one path).
|
|
805
|
+
- markup around a path: a closing tag that names one word (`</var>`, `</root>`, `</data>`) is not a path, and a path match ends before it, so `<var>/home/<placeholder>/x</var>` is judged as the path alone. A closing tag that carries a path, such as `</home/alice>`, is still matched.
|
|
806
|
+
|
|
807
|
+
Concrete home accounts, named tilde home paths (`~name/…`, also straight after any character other than a letter, a number, `.`, `_`, `~`, `-`, `/` or `\`, such as `]`, `)` or `;`; a bare `~name` token without a path is not matched), `/root`, every `/tmp` path and `/var/folders` remain refusals. So do runner paths outside that workspace shape, placeholders below a concrete account, dot-segment traversal, percent/backslash escape variants, embedded identity roots (including `/root`, `/tmp`, `/private`, `/Volumes` and the mount roots continuing into a permitted tail), any path below procfs's own `root` entry, and a second host path hiding behind any punctuation (a bracket, label colon, assignment equals, `[`, `(`, `|`, `@` and the rest) inside a permitted form. Real emails, `git` contact addresses without a transport path, other SSH account names on non-reserved domains, and look-alikes such as `notexample.com` or `example.com.evil.io` remain refused. The table-driven corpus and `node scripts/prove-gate-public-forms.ts` verify these boundaries; [measurement and mutation evidence](https://github.com/unbraind/pm-github/blob/main/docs/gate-public-forms-evidence.md) records the eight-repository read-only scan.
|
|
808
|
+
|
|
798
809
|
Unreadable input, malformed or truncated diffs, binary input, invalid UTF-8, Git failures, malformed allowlists, and scanner errors fail the gate. Untracked operational state in the tracker root (`locks/`, `extensions/`, `checkpoints/`) is excluded. Explicitly staged operational files remain in scope. Staged and unstaged changes are scanned separately, including staged content that the working copy subsequently removed.
|
|
799
810
|
|
|
800
811
|
**False positives** are allowlisted by *content hash*, not by pattern: put the sha256 from the finding into `.pm-github-gate-allowlist.json` at the repository root (or pass `--allowlist <file>`) with a written justification. An entry suppresses exactly the reviewed content, can never widen to a pattern, and a missing justification fails the gate:
|
|
@@ -821,9 +832,134 @@ The `gate` receipt reports the verdict, scanned file count, findings, and allowl
|
|
|
821
832
|
|
|
822
833
|
With `--json`, successful reports go to stdout; failures use the host CLI's JSON error envelope on stderr, with the redacted gate report serialized in `detail` (`jq ' .detail | fromjson ' gate-error.json`). Unreadable inputs produce a nonzero JSON refusal.
|
|
823
834
|
|
|
835
|
+
## Verified Dependabot auto-merge
|
|
836
|
+
|
|
837
|
+
Use [the reusable merge workflow](.github/workflows/pm-github-dependabot-merge.yml)
|
|
838
|
+
instead of copying merge logic into each repository. It clears existing
|
|
839
|
+
auto-merge before tooling or metadata, then requests squash auto-merge only for
|
|
840
|
+
`pull_request_target` events whose PR author, event actor and re-run actor are all
|
|
841
|
+
`dependabot[bot]`. It reads **every page** of the PR commits API and requires
|
|
842
|
+
each commit's API-linked author to be Dependabot and its committer to be either
|
|
843
|
+
Dependabot or `web-flow`. Every commit must also have GitHub verification
|
|
844
|
+
`verified: true, reason: valid`; account attribution alone can be forged through
|
|
845
|
+
Git email fields.
|
|
846
|
+
The verified `web-flow` case was checked against real fleet PR data, including
|
|
847
|
+
the Dependabot commit in `pm-context#211`.
|
|
848
|
+
|
|
849
|
+
The commit list must match the PR's positive commit count, contain unique full
|
|
850
|
+
SHAs, end at its current head and remain stable across fresh API reads. Only
|
|
851
|
+
successful `dependabot/fetch-metadata` classification permits the `pm-toolchain`
|
|
852
|
+
group, extra explicitly allowed groups, or semver minor/patch updates. Major
|
|
853
|
+
updates outside those groups wait for review. The arm request includes
|
|
854
|
+
`--match-head-commit`; another read revokes it if the head changes while arming.
|
|
855
|
+
|
|
856
|
+
```yaml
|
|
857
|
+
name: dependabot-auto-merge
|
|
858
|
+
on:
|
|
859
|
+
pull_request_target:
|
|
860
|
+
types: [opened, reopened, synchronize, ready_for_review, edited]
|
|
861
|
+
schedule:
|
|
862
|
+
- cron: "23 4 * * *"
|
|
863
|
+
workflow_dispatch:
|
|
864
|
+
permissions: {}
|
|
865
|
+
jobs:
|
|
866
|
+
verified-auto-merge:
|
|
867
|
+
if: github.event_name == 'pull_request_target' && github.event.pull_request.user.login == 'dependabot[bot]'
|
|
868
|
+
permissions:
|
|
869
|
+
contents: write
|
|
870
|
+
pull-requests: write
|
|
871
|
+
uses: unbraind/pm-github/.github/workflows/pm-github-dependabot-merge.yml@RELEASE_COMMIT_SHA # pm-github RELEASE_VERSION
|
|
872
|
+
with:
|
|
873
|
+
extra-allowed-groups: "" # Optional exact names, separated by commas or whitespace
|
|
874
|
+
secrets:
|
|
875
|
+
merge_token: ${{ secrets.DEPENDABOT_MERGE_TOKEN }}
|
|
876
|
+
audit-armed-requests:
|
|
877
|
+
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
|
|
878
|
+
permissions:
|
|
879
|
+
contents: write
|
|
880
|
+
pull-requests: write
|
|
881
|
+
uses: unbraind/pm-github/.github/workflows/pm-github-dependabot-merge.yml@RELEASE_COMMIT_SHA # pm-github RELEASE_VERSION
|
|
882
|
+
with:
|
|
883
|
+
audit-only: true
|
|
884
|
+
secrets:
|
|
885
|
+
merge_token: ${{ secrets.DEPENDABOT_MERGE_TOKEN }}
|
|
886
|
+
```
|
|
887
|
+
|
|
888
|
+
Replace `RELEASE_COMMIT_SHA` with the full 40-character SHA of the reviewed
|
|
889
|
+
release **containing this workflow**, and `RELEASE_VERSION` with that release's
|
|
890
|
+
version. This workflow is new; earlier releases do not contain it. Configure
|
|
891
|
+
Dependabot's `github-actions` ecosystem to maintain the SHA and same-line
|
|
892
|
+
`# pm-github <version>` comment. No release is created by this change.
|
|
893
|
+
|
|
894
|
+
GitHub documents [read-only tokens for Dependabot-triggered pull requests](https://docs.github.com/en/code-security/reference/supply-chain-security/troubleshoot-dependabot/dependabot-on-actions).
|
|
895
|
+
Provide `DEPENDABOT_MERGE_TOKEN` as both an Actions secret and a Dependabot
|
|
896
|
+
secret, restricted to the calling repository with Contents and Pull requests
|
|
897
|
+
write permissions. The optional `merge_token` falls back to `github.token`;
|
|
898
|
+
that fallback can arm or revoke only when repository/event policy actually
|
|
899
|
+
grants the necessary writes. Reusable workflows cannot elevate caller
|
|
900
|
+
permissions. Keep auto-merge enabled in repository settings and required checks
|
|
901
|
+
and review rules on the protected base branch.
|
|
902
|
+
|
|
903
|
+
Foreign commits revoke auto-merge and produce a successful job, a summary and
|
|
904
|
+
`::notice` listing **short SHA and author login only**. Disallowed metadata,
|
|
905
|
+
unsupported arm events (including `pull_request`), API failures and incomplete
|
|
906
|
+
pagination also leave auto-merge unarmed with a clear notice. Every CLI call is
|
|
907
|
+
limited to three attempts of 60 seconds each by default. The TypeScript policy
|
|
908
|
+
adapter reads `DEPENDABOT_GH_TIMEOUT_SECONDS` (integer 1–60, default 60) and also
|
|
909
|
+
accepts a millisecond timeout option. Invalid adapter deadlines fail before
|
|
910
|
+
starting a CLI call. Pre-tooling shell calls retain a fixed 60-second deadline.
|
|
911
|
+
Failed attempts discard partial
|
|
912
|
+
output. A timed-out state read still attempts revocation. An
|
|
913
|
+
inability to revoke is an operational failure that warns the request may remain
|
|
914
|
+
armed, rather than a false successful safety claim.
|
|
915
|
+
No PR files, Git author names/emails, commit messages or raw API errors are
|
|
916
|
+
printed. Actions are SHA-pinned and no PR code is checked out or executed.
|
|
917
|
+
The caller runs on `pull_request_target`, so its YAML and local reusable
|
|
918
|
+
workflow come from the trusted default branch. Remote callers pin the reusable
|
|
919
|
+
workflow to a reviewed release SHA. In both cases the standalone policy is
|
|
920
|
+
fetched from that exact `job.workflow_sha`; no policy override reads a mutable
|
|
921
|
+
branch or PR revision. Before this change reaches the default branch, the new
|
|
922
|
+
trusted caller does not run. Configure an Actions event policy permitting
|
|
923
|
+
`pull_request_target` where required; GitHub's default public-repository policy
|
|
924
|
+
is scheduled for enforcement on December 2, 2026. See
|
|
925
|
+
[GitHub's trusted-trigger guidance](https://docs.github.com/en/actions/reference/security/securely-using-pull_request_target).
|
|
926
|
+
|
|
927
|
+
Migration: replace the **entire** copied `dependabot-auto-merge.yml` with the
|
|
928
|
+
caller above. Retain `synchronize` and the PR-author-only caller guard. Other
|
|
929
|
+
PR automation keeps its own merge requests; a foreign push to a Dependabot PR
|
|
930
|
+
still runs because the PR author remains Dependabot. An actor guard on the
|
|
931
|
+
calling job would skip that foreign push and prevent revocation.
|
|
932
|
+
Keep `auto_merge_enabled` out of the caller's event types: a custom token's arm
|
|
933
|
+
event belongs to its automation account and would immediately revoke its own
|
|
934
|
+
request under the strict Dependabot actor policy.
|
|
935
|
+
Remove any other workflow that arms Dependabot auto-merge, and clear existing
|
|
936
|
+
requests when adopting the caller; installing a workflow does not retroactively
|
|
937
|
+
trigger it for every open PR. This repository uses the supported local path.
|
|
938
|
+
|
|
939
|
+
Keep the scheduled audit job when adopting the caller. GitHub can suppress
|
|
940
|
+
workflow-generated events or park their `pull_request` runs awaiting approval;
|
|
941
|
+
changing only the PR trigger does not establish an independent revocation path.
|
|
942
|
+
The daily schedule and manual dispatch audit every armed Dependabot PR,
|
|
943
|
+
including every page of its commits, with the same provenance validator used to
|
|
944
|
+
arm. Unsafe or unverifiable snapshots are revoked; valid requests are preserved.
|
|
945
|
+
Fleet callers must not schedule the audit more often than hourly; prefer daily
|
|
946
|
+
plus `workflow_dispatch` to preserve shared runner capacity. Stagger daily run
|
|
947
|
+
times across repositories. Use manual dispatch when an immediate sweep is needed.
|
|
948
|
+
Audits never arm requests or depend on PR actor/metadata. Listing, policy-load
|
|
949
|
+
or revocation failures fail visibly. Scheduled runs can be delayed or disabled
|
|
950
|
+
by GitHub, so this is eventual revocation and requires operational monitoring,
|
|
951
|
+
not an atomic merge guard. See [GitHub's token event rules](https://docs.github.com/en/actions/concepts/security/github_token).
|
|
952
|
+
|
|
953
|
+
GitHub auto-merge is asynchronous. This workflow verifies the head it arms and
|
|
954
|
+
revokes on subsequent events; it cannot atomically prevent GitHub merging a
|
|
955
|
+
later push before the next workflow runs. A literal guarantee for future
|
|
956
|
+
commits also needs server-enforced branch protection/review requirements that
|
|
957
|
+
remain unsatisfied for unreviewed commits. Do not treat an earlier successful
|
|
958
|
+
policy run as approval of a later head.
|
|
959
|
+
|
|
824
960
|
## Self-versioned workflows and Dependabot
|
|
825
961
|
|
|
826
|
-
|
|
962
|
+
The sync and closeout reusable workflows resolve their own **exact** pm-github release version at
|
|
827
963
|
runtime and verify the installed package version. GitHub's documented
|
|
828
964
|
[`job.workflow_sha`](https://docs.github.com/en/actions/reference/workflows-and-actions/contexts#job-context)
|
|
829
965
|
is the commit of the workflow that defines the current job, including a reusable
|
|
@@ -885,8 +1021,8 @@ The group pattern is the repository name, covering both reusable workflow paths.
|
|
|
885
1021
|
Use exactly `pm-toolchain`: the fleet's existing
|
|
886
1022
|
[dependabot-auto-merge.yml](.github/workflows/dependabot-auto-merge.yml) enables
|
|
887
1023
|
`gh pr merge --auto --squash` for Dependabot PRs in that group, including calendar
|
|
888
|
-
version major changes. The workflow checks the Dependabot author
|
|
889
|
-
|
|
1024
|
+
version major changes. The workflow checks the Dependabot author, then the
|
|
1025
|
+
metadata group or minor/patch update type. Commit prefix and
|
|
890
1026
|
labels do not control merge eligibility; the explicit values above keep PRs
|
|
891
1027
|
consistent. Ensure the two labels exist (GitHub ignores unknown custom labels).
|
|
892
1028
|
Repository auto-merge must be enabled and required branch-protection checks must
|
|
@@ -897,7 +1033,7 @@ for schedules, groups, commit messages and labels.
|
|
|
897
1033
|
|
|
898
1034
|
## Automated closeout workflow
|
|
899
1035
|
|
|
900
|
-
For scheduled failures,
|
|
1036
|
+
For scheduled failures, start with the [November 6 watch matrix and caller actions](docs/scheduled-workflow-watch-1106.md). The [historical run evidence and refusal guide](docs/scheduled-workflow-refusals.md) retains earlier incident context.
|
|
901
1037
|
Both maintenance workflows select one actionable reason from private command
|
|
902
1038
|
receipts and privacy-scan it before emitting an error annotation. Closeout
|
|
903
1039
|
accepts GitHub's numeric pagination aliases only after verifying repository
|
|
@@ -1185,7 +1321,23 @@ Release attribution uses the actual dates of locally available calendar tags, in
|
|
|
1185
1321
|
|
|
1186
1322
|
Before creating an item, import checks the complete tracker for its provenance tag, GitHub URLs in provenance or link metadata, and Linear/Jira/ADO links referenced by the GitHub issue body. A unique existing external owner receives the GitHub tag and source metadata; its title, body, provider identity, creation/completion dates and release remain intact. A persisted `github_link_only` marker preserves that ownership on subsequent syncs. Free-text descriptions and bodies do not declare GitHub ownership. Ambiguous matches refuse the import before writes with `--gate` or `--atomic`. A plain multi-issue import may write earlier issues before rejecting a later ambiguous match.
|
|
1187
1323
|
|
|
1188
|
-
With `--gate` and a nonempty filtered issue list, both preview and apply results include a `plan` with source dates, closure reason, release, target identity, link/create/update action and state-conflict decision. An empty filtered issue list returns without a `plan`, including with `--gate --dry-run`. GitHub wins lifecycle conflicts for GitHub-owned imports. A canceled item that GitHub later reports as completed uses the SDK's explicit repeat-closure transition with the source reason. A linked external owner keeps its local status, and the plan records `preserve-provider-owner`; `github_state` still records the source state. Atomic transaction identity includes the latest external edit or different lifecycle generation in history. Local state edits and repeated state cycles force reconciliation, while staging and compensation keep crash retries on the same journal. Finalization runs before the SDK commits
|
|
1324
|
+
With `--gate` and a nonempty filtered issue list, both preview and apply results include a `plan` with source dates, closure reason, release, target identity, link/create/update action and state-conflict decision. An empty filtered issue list returns without a `plan`, including with `--gate --dry-run`. GitHub wins lifecycle conflicts for GitHub-owned imports. A canceled item that GitHub later reports as completed uses the SDK's explicit repeat-closure transition with the source reason. A linked external owner keeps its local status, and the plan records `preserve-provider-owner`; `github_state` still records the source state. Atomic transaction identity includes the latest external edit or different lifecycle generation in history. Local state edits and repeated state cycles force reconciliation, while staging and compensation keep crash retries on the same journal. Finalization runs before the SDK commits; its compensation has the known SDK limitation below. It is idempotent and runs again after a recovered atomic journal, so an interrupted finalization can be repaired by retrying the same import before the gate permits a push.
|
|
1325
|
+
|
|
1326
|
+
**Known limitation — atomic lifecycle finalization:** On pm-cli ≥ 2026.10.26
|
|
1327
|
+
without transaction-owned finalization ([pm-cli#1656](https://github.com/unbraind/pm-cli/issues/1656)),
|
|
1328
|
+
a failure after lifecycle finalization can leave partially applied state. The
|
|
1329
|
+
SDK ownership guard refuses unsafe compensation; the recovery journal resumes
|
|
1330
|
+
when the same import is retried. Complete rollback after this boundary is not
|
|
1331
|
+
currently guaranteed. See [the SDK finalization analysis](docs/atomic-finalization-sdk.md).
|
|
1332
|
+
|
|
1333
|
+
Exactly two tests are quarantined on the verified affected SDK pin, 2026.11.4:
|
|
1334
|
+
`real SDK atomic compensation restores an imported source lifecycle and removes new items after finalization`
|
|
1335
|
+
in `test/import-fidelity.test.ts`, and
|
|
1336
|
+
`terminal failures remove replay plans after real SDK compensation (true)` in
|
|
1337
|
+
`test/refresh.test.ts`. Their compensation assertions remain intact and
|
|
1338
|
+
re-enable automatically on any other installed SDK version. The fresh-invocation
|
|
1339
|
+
refresh case still runs. Repository fixture-version tests verify both actual
|
|
1340
|
+
quarantine predicates and skip options without installing SDK versions.
|
|
1189
1341
|
|
|
1190
1342
|
An atomic apply whose complete normalized source projection already matches every item
|
|
1191
1343
|
reports `unchanged: true`, zero imports/updates, and no transaction ID. It leaves
|
package/dist/gate.d.ts
CHANGED
|
@@ -148,6 +148,8 @@ interface RuleHit {
|
|
|
148
148
|
readonly matched: string;
|
|
149
149
|
/** Character offset of the match within its line, for jsonl field attribution. */
|
|
150
150
|
readonly index: number;
|
|
151
|
+
/** Exclusive source end offset, including every encoded character in the match. */
|
|
152
|
+
readonly end: number;
|
|
151
153
|
}
|
|
152
154
|
/**
|
|
153
155
|
* Scan one added line with every content rule.
|
package/dist/gate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../gate.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../gate.ts"],"names":[],"mappings":"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"}
|