Skip to content

feat(entitlements): add one checked-in plan-feature contract - #312

Closed
Coding-Dev-Tools wants to merge 489 commits into
mainfrom
feat/paid-plans-f1-entitlement-contract
Closed

Coding-Dev-Tools wants to merge 489 commits into
mainfrom
feat/paid-plans-f1-entitlement-contract

Conversation

@Coding-Dev-Tools

Copy link
Copy Markdown
Owner

What this does

Replaces the client's three hand-maintained copies of the private control plane's plan→feature table with one checked-in, machine-readable mirror.

  • Adds engraphis/entitlement_contract.json (engraphis-entitlement-contract/v1): plans, features, and limits.
  • Adds engraphis/entitlements.py: loads and structurally validates the contract, exposes features_for, feature_spec, required_plan(s), labels, unrecognized, trial_days_by_plan, grace_hours.
  • engraphis/hosted_client.py: _REQUIRED_PLAN / required_plan() now read the contract instead of a local dict.
  • engraphis/routes/v2_api.py: _HOSTED_ENTITLEMENTS and _FEATURE_LABELS now read the contract; get_license() gains unrecognized_features for server grants this build cannot render (kept out of features so no row is ticked for something unverifiable).
  • scripts/check_commercial_manifest.py: release gate now validates the contract against commercial_manifest.json and, when --cloud-contract is passed, against the private control plane's hosted_entitlements (automation aliases normalised away).
  • MANIFEST.in / pyproject.toml: ship the new JSON in the distribution.
  • Tests (tests/test_entitlement_contract.py new; test_client_launch, test_licensing_launch, test_hosted_plan_resolution now import the single mirror instead of keeping their own copies).

Validation

.venv\Scripts\python.exe -m pytest tests/test_entitlement_contract.py tests/test_client_launch.py \
  tests/test_licensing_launch.py tests/test_hosted_plan_resolution.py \
  tests/test_commercial_hardening.py tests/test_release_manifest_gate.py -q
# 281 passed, 1 skipped

.venv\Scripts\python.exe -m ruff check <8 changed .py files>
# All checks passed!

Full suite not run. Diff is 11 files, +751/−62, no deleted files.

Product notes for Josh (no action strictly required)

The contract only mirrors values already committed in engraphis/commercial_manifest.json — trial.days_by_plan {pro: 7, team: 14} and entitlement_lifecycle.max_grace_hours 24 — so it encodes no new prices and no new limits. Two client-visible points worth a deliberate ack:

  1. export is asserted as free. required_plan("export") changes from "pro" (main) to "free". This matches docs/LICENSING.md ("local … exports remain free") and v2_api._FEATURE_LABELS, which never listed export, so it looks like aligning hosted_client with documented policy rather than a new decision — but it does change the upgrade message a Pro-gated export path would emit.
  2. The three Team capabilities are declared, not granted. hosted_multi_user_roles, hosted_team_audit_export, hosted_scoped_agent_tokens are true in the commercial manifest (sold) yet status: "declared" and absent from plans.team, so features_for("team") will not advertise them. required_plan() still returns "team" for them, and v2_api already omitted them from the dashboard, so runtime dashboard behaviour is unchanged — flagging it in case "sold but not yet granted" should be written down elsewhere.

security(licensing): release production vendor signer
feat(backups): support verified S3 object storage
…diagnostic

chore(railway): expose readiness diagnostics
chore(railway): restore strict readiness gate
fix(synthetics): keep rejection alert non-gating
- Cloud license leasing with Polar integration
- Sync relay improvements for team mode
- Inspector auth and webhook enhancements
- Hosted email retention policies
- HTTP security hardening
- Dashboard v2 team audit capabilities
- Release workflow improvements
- Commercial manifest validation

All tests passing (1606 passed, 14 skipped).
Ruff clean.
Remove commercial cloud implementation from the current public tree while preserving the audited open-core boundary and compatibility fixes.
Improve graph communities and add memory demo
Publishes the public manifest boundary for Stripe-backed private cloud subscriptions. Polar remains legacy-only; no commercial implementation is added to the public repository.
Public v1.0.0 GA release metadata, validated in a clean worktree with full CI, offline evaluations, packaging, and commercial-boundary checks.
…et-validation

Repair PyPI release artifact verification
…elease-artifacts

Select canonical tag artifacts for release repair
* release: prepare 1.0.1 client reliability fixes

* fix: align Pro billing unit with entitlement model
Remediate all 59 existing CodeQL alerts, make local path containment machine-verifiable, redact arbitrary provider errors, replace adversarial parsers, and make hosted CodeQL fail on any SARIF finding. Preserve Python 3.9 and pin the verified Ruff series.
Coding-Dev-Tools and others added 25 commits October 7, 2026 23:10
…#252)

* feat: improve Jev workflows and streamline docs

* fix: pin README assets for PR preview

* fix: bound Jev review data and disclose remote recall

* fix: preserve Jev support probabilities

* fix: refresh registered offline benchmark evidence

* docs: pin README links to refreshed evidence

* fix: require explicit consent for remote Jev eval

* docs: refresh offline benchmark evidence

* docs: pin README links to refreshed chart

* test: align contracts with pinned README links

* fix: type Jev advisory planner path

* docs: pin README to refreshed benchmark

* test: accept refreshed benchmark image pin

* fix: bind retrieval preview to grounded Jev plan

* docs: pin README benchmark snapshot

* docs: clarify managed Jev allowance terms

* docs: align Jev plan details with Cloud policy

* fix: screen Jev questions and correct recall fixture

* docs: pin README chart to corrected evidence

* fix: surface safe Jev fallback reasons

* docs: pin Jev evidence to the updated snapshot

* docs: clarify pooled Team Jev allowance

* docs: pin pooled Jev plan guidance

* docs: pin README to current Jev and benchmark evidence

* fix(jev): preserve review evidence and recall compatibility

* docs: pin README to refreshed benchmark evidence

* Fix Jev ancestor review and positional API compatibility

* fix: validate visible ancestor memories in Jev review

* Pin corrected offline benchmark snapshot in every README consumer

* docs: pin README to refreshed Jev review evidence

* docs: preserve pre-merge Jev evidence snapshot

* Enforce current Jev evidence visibility and serialized input bounds

* Pin current temporal and byte-bound benchmark snapshot

* fix: honor legacy secret classifications before Jev review

* docs: pin Jev privacy evidence consumers to source snapshot

* docs: pin README to benchmark v146

* fix: normalize Jev advisory fallback reasons for planning off

* docs: pin normalized Jev advisory evidence snapshot

* docs: pin README to benchmark v147

* docs: pin README to benchmark v148

* fix: update vulnerable benchmark PyJWT pin

* docs: publish individual managed Jev limits

* fix: address Jev review and docs CI failures

* chore: export fresh offline evidence for Jev review

* chore: capture immutable offline evidence outputs

* chore: regenerate benchmark image exports

* docs: register fresh offline evidence for Jev review

* docs: checksum fresh offline evidence

* docs: bind benchmark guide to refreshed artifact

* test: bind evidence contract to refreshed artifact

* docs: cite refreshed offline evidence

* docs: refresh registered context evidence chart

* docs: refresh registered grounded examples

* chore: remove temporary offline evidence exporter

* docs: pin benchmark links to refreshed evidence

* fix(jev): keep local planning available and refresh offline evidence

* docs: pin README to the verified offline evidence commit

* docs: give planner evidence an unambiguous artifact identity

* docs: pin the README to the distinct planner evidence

* fix(pi): pin proxy-addr 2.0.8 for GHSA-jqcg-44mw-7w3h

* fix(mcp): reject managed custom decisions before credential access

* docs: pin guides and visuals to the managed preflight fix

* docs: pin benchmark links to verified PR252 evidence

* fix(jev): preserve offline review and enforce advisory deadlines

Restore canonical v149 integrity, guard Latest promotion after uploads, and bind fresh immutable offline evidence. Preserve external Ask/UI fixes and qualify offline provider and workspace fixtures.

* docs: pin benchmark evidence to the verified source checkpoint

Use the actual connector-created source commit for the benchmark guide and figure links. Fifty affected evidence and documentation checks pass; the runtime tree is unchanged from the qualified offline repair.
Restrict managed requests to fixed bounded workflows, reject custom and route decisions before credentials, and retain a shared absolute deadline across HTTP 429 body and framing reads. Preserve #252 consent and local-planning behavior, bind offline evidence to the combined source checkpoint, and restore resolvable historical checksum metadata without changing its payload.

Qualification: all 30 current-head checks passed, the automated review completed with its checksum finding fixed and resolved, and focused pin/integrity regressions passed. Managed private-service availability and activation remain separate acceptance work.
* fix(deps-dev): bump openai-codex from 0.159.0 to 0.160.1

---
updated-dependencies:
- dependency-name: openai-codex
  dependency-version: 0.160.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: address verified release audit findings

Validated local candidate: f9dabd9d69d779210ce83e919b410b1770505e43

- f9dabd9d69d779210ce83e919b410b1770505e43 fix(packaging): align MCP install paths with the patched SDK floor
- 24afc26e882c0f3fa5eab4b6e2b5294fe73bd4c6 fix(deps): require the patched MCP 1.30 transport

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jaixii <algorithmictradingsolutions@gmail.com>
* docs(readme): pin chart to verified evidence commit

* fix(cli): distinguish memory sampling from partial word analysis

* fix(cli): distinguish memory sampling from partial word analysis

* fix(cli): distinguish memory sampling from partial word analysis

* fix(cli): distinguish memory sampling from partial word analysis

* fix: preserve dashboard graph traversal and historical dates

* fix: preserve dashboard graph traversal and historical dates

* fix(spec-crawl): prove policy conflicts and bound code-example detection

* fix(spec-crawl): prove policy conflicts and bound code-example detection

* fix(spec-crawl): prove policy conflicts and bound code-example detection

* fix(spec-crawl): prove policy conflicts and bound code-example detection

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(readme): pin chart to verified evidence commit

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(readme): pin chart to verified evidence commit

* perf(spec-crawl): skip directive parsing without governing verbs

* perf(spec-crawl): skip directive parsing without governing verbs

* perf(spec-crawl): skip directive parsing without governing verbs

* perf(spec-crawl): skip directive parsing without governing verbs

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(readme): pin chart to verified evidence commit

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(readme): pin chart to verified evidence commit

* fix(security): keep privilege detection linear across whitespace

* fix(security): keep privilege detection linear across whitespace

* fix(security): keep privilege detection linear across whitespace

* fix(security): keep privilege detection linear across whitespace

* fix(spec-crawl): match fence closing markers and lengths

* fix(spec-crawl): match fence closing markers and lengths

* fix(spec-crawl): match fence closing markers and lengths

* fix(spec-crawl): match fence closing markers and lengths

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(readme): pin chart to verified evidence commit

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(readme): pin chart to verified evidence commit

* fix: refresh library paging after saved reorders

* fix: refresh library paging after saved reorders

* fix(spec-crawl): match inline backtick runs without rescanning

* fix(spec-crawl): match inline backtick runs without rescanning

* fix(spec-crawl): match inline backtick runs without rescanning

* fix(spec-crawl): match inline backtick runs without rescanning

* fix(history): preserve Unicode topics before candidate limits

Use a deterministic NULL-safe Python Unicode lower SQL function for closed-history candidate ordering, matching the existing final tokenizer instead of SQLite ASCII-only lower(). Register it once during Store construction, including encrypted and read-only connections. Keep all scope, privacy, temporal filters, the 500-record candidate window and 32-term expansion limit unchanged. Cover actual service/HTTP retrieval beyond 501 newer records, preserve sharp-s lower-versus-casefold behavior, exercise real SQLCipher reopen, and extend the closed-history eval with Unicode and negative controls.

* fix(history): preserve Unicode topics before candidate limits

Use a deterministic NULL-safe Python Unicode lower SQL function for closed-history candidate ordering, matching the existing final tokenizer instead of SQLite ASCII-only lower(). Register it once during Store construction, including encrypted and read-only connections. Keep all scope, privacy, temporal filters, the 500-record candidate window and 32-term expansion limit unchanged. Cover actual service/HTTP retrieval beyond 501 newer records, preserve sharp-s lower-versus-casefold behavior, exercise real SQLCipher reopen, and extend the closed-history eval with Unicode and negative controls.

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* fix(spec-crawl): require contradiction evidence and compare active prose

* fix(spec-crawl): require contradiction evidence and compare active prose

* fix(spec-crawl): require contradiction evidence and compare active prose

* fix(spec-crawl): require contradiction evidence and compare active prose

* fix(spec-crawl): avoid circular claims and retain source provenance

* fix(spec-crawl): avoid circular claims and retain source provenance

* fix(spec-crawl): avoid circular claims and retain source provenance

* fix(spec-crawl): avoid circular claims and retain source provenance

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* fix(spec-crawl): exclude examples from claim evidence queries

* fix(spec-crawl): exclude examples from claim evidence queries

* fix(spec-crawl): exclude examples from claim evidence queries

* fix(spec-crawl): exclude examples from claim evidence queries

* fix(spec-crawl): bind numeric qualifiers and preserve directive identity

* fix(spec-crawl): bind numeric qualifiers and preserve directive identity

* fix(spec-crawl): bind numeric qualifiers and preserve directive identity

* fix(spec-crawl): bind numeric qualifiers and preserve directive identity

* fix(security): exclude sensitive source ancestors before capture

* fix(security): cover valid URI userinfo and cyclic import links

* fix(security): exclude sensitive source ancestors before capture

* fix(security): exclude sensitive source ancestors before capture

* fix(security): cover valid URI userinfo and cyclic import links

* fix(imports): prune sensitive browser paths before traversal

* fix(security): exclude sensitive source ancestors before capture

* fix(security): cover valid URI userinfo and cyclic import links

* fix(imports): prune sensitive browser paths before traversal

* fix(security): cover valid URI userinfo and cyclic import links

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(readme): pin chart to verified evidence commit

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(readme): pin chart to verified evidence commit

* fix(eval): enforce individual spec crawl metric floors

* fix(eval): enforce individual spec crawl metric floors

* fix(spec-crawl): ignore prose periods on bare scalar values

* fix(eval): enforce individual spec crawl metric floors

* fix(spec-crawl): ignore prose periods on bare scalar values

* fix(spec-crawl): ignore prose periods on bare scalar values

* fix(eval): enforce individual spec crawl metric floors

* fix(spec-crawl): ignore prose periods on bare scalar values

* fix(security): reject credential roots and account skipped uploads

* fix(security): reject credential roots and account skipped uploads

* fix(security): reject credential roots and account skipped uploads

* fix(security): reject credential roots and account skipped uploads

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(readme): pin chart to verified evidence commit

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* fix(spec-crawl): stabilize empty cluster response schema

* fix(spec-crawl): stabilize empty cluster response schema

* fix(imports): apply broad credential heuristics only to files

* fix(spec-crawl): stabilize empty cluster response schema

* fix(imports): apply broad credential heuristics only to files

* fix(imports): apply broad credential heuristics only to files

* fix(imports): distinguish browser directories from file basenames

* fix(spec-crawl): stabilize empty cluster response schema

* fix(imports): apply broad credential heuristics only to files

* fix(imports): distinguish browser directories from file basenames

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(readme): pin chart to verified evidence commit

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(readme): pin chart to verified evidence commit

* test(imports): gate HTTP guard on optional server extra

* test(imports): gate HTTP guard on optional server extra

* test(imports): gate HTTP guard on optional server extra

* test(imports): gate HTTP guard on optional server extra

* fix(security): scan authenticated URI spans without regex

* fix(security): scan authenticated URI spans without regex

* fix(security): scan authenticated URI spans without regex

* fix(security): scan authenticated URI spans without regex

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(readme): pin chart to verified evidence commit

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* fix(spec): align supersession lineage with effective time

* fix(spec): align supersession lineage with effective time

* fix(spec): align supersession lineage with effective time

* fix(spec): align supersession lineage with effective time

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* docs(readme): pin chart to verified evidence commit

* test(spec-crawl): align memory floor failure assertion

* docs(evidence): bind offline fixtures to final policy and history fixes

* docs(readme): pin chart to verified evidence commit

* fix(deps-dev): update ruff requirement

Updates the requirements on [ruff](https://github.com/astral-sh/ruff) to permit the latest version.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](astral-sh/ruff@0.15.22...0.17.0)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.17.0
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps-dev): bump @playwright/test from 1.63.0 to 1.64.0

Bumps [@playwright/test](https://github.com/microsoft/playwright) from 1.63.0 to 1.64.0.
- [Release notes](https://github.com/microsoft/playwright/releases)
- [Commits](microsoft/playwright@v1.63.0...v1.64.0)

---
updated-dependencies:
- dependency-name: "@playwright/test"
  dependency-version: 1.64.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps-dev): bump impeccable from 4.1.0 to 4.5.2

Bumps [impeccable](https://github.com/pbakaus/impeccable) from 4.1.0 to 4.5.2.
- [Release notes](https://github.com/pbakaus/impeccable/releases)
- [Changelog](https://github.com/pbakaus/impeccable/blob/main/docs/RELEASE-4.4.0.md)
- [Commits](pbakaus/impeccable@cli-v4.1.0...cli-v4.5.2)

---
updated-dependencies:
- dependency-name: impeccable
  dependency-version: 4.5.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps): bump the codeql-action group with 3 updates

Bumps the codeql-action group with 3 updates: [github/codeql-action/init](https://github.com/github/codeql-action), [github/codeql-action/analyze](https://github.com/github/codeql-action) and [github/codeql-action/upload-sarif](https://github.com/github/codeql-action).


Updates `github/codeql-action/init` from 4.38.2 to 4.38.3
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@2892aa5...24c5418)

Updates `github/codeql-action/analyze` from 4.38.2 to 4.38.3
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@2892aa5...24c5418)

Updates `github/codeql-action/upload-sarif` from 4.38.2 to 4.38.3
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@2892aa5...24c5418)

---
updated-dependencies:
- dependency-name: github/codeql-action/init
  dependency-version: 4.38.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: codeql-action
- dependency-name: github/codeql-action/analyze
  dependency-version: 4.38.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: codeql-action
- dependency-name: github/codeql-action/upload-sarif
  dependency-version: 4.38.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: codeql-action
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps): bump actions/download-artifact from 8.0.1 to 8.0.2

Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 8.0.1 to 8.0.2.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](actions/download-artifact@3e5f45b...9000827)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: 8.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* test(release): align ruff version bound assertion with <0.18

* perf(core): wire factory DB encryption and batch recall reinforcement

* docs(evidence): bind offline fixtures to factory encryption and recall batching

* docs(readme): pin chart to verified evidence commit

* test(e2e): align Explore keyboard cursor assertions with non-isolating reveal

* test(imports): use write_bytes for Python 3.9 compatibility

* fix(deps-dev): bump tree-sitter-language-pack from 1.20.0 to 1.21.0 (#258)

* fix(deps-dev): bump tree-sitter-language-pack from 1.20.0 to 1.21.0

Bumps [tree-sitter-language-pack](https://github.com/xberg-io/tree-sitter-language-pack) from 1.20.0 to 1.21.0.
- [Release notes](https://github.com/xberg-io/tree-sitter-language-pack/releases)
- [Changelog](https://github.com/xberg-io/tree-sitter-language-pack/blob/main/CHANGELOG.md)
- [Commits](xberg-io/tree-sitter-language-pack@v1.20.0...v1.21.0)

---
updated-dependencies:
- dependency-name: tree-sitter-language-pack
  dependency-version: 1.21.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Keep new benchmark campaigns on the updated tree-sitter grammars

* fix: address verified release audit findings

Validated local candidate: e142e3158e06c92c00253266120496d33d111a92

- e142e3158e06c92c00253266120496d33d111a92 fix(packaging): align MCP install paths with the patched SDK floor
- e5631206443c0d069d3e9114bccb87111b89d602 fix(deps): require the patched MCP 1.30 transport

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jaixii <algorithmictradingsolutions@gmail.com>

* fix(deps): bump anchore/sbom-action from 0.24.2 to 0.24.3 (#259)

* fix(deps): bump anchore/sbom-action from 0.24.2 to 0.24.3

Bumps [anchore/sbom-action](https://github.com/anchore/sbom-action) from 0.24.2 to 0.24.3.
- [Release notes](https://github.com/anchore/sbom-action/releases)
- [Changelog](https://github.com/anchore/sbom-action/blob/main/RELEASE.md)
- [Commits](anchore/sbom-action@3ad7283...66cbf4b)

---
updated-dependencies:
- dependency-name: anchore/sbom-action
  dependency-version: 0.24.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* test(release): validate immutable SBOM action pins across upgrades

* fix: address verified release audit findings

Validated local candidate: 0e9f6f2599167a5f235b298d39c87182356156f5

- 0e9f6f2599167a5f235b298d39c87182356156f5 fix(packaging): align MCP install paths with the patched SDK floor
- 3207cfa5af1c7309407b8d63f9ca304113dfcd66 fix(deps): require the patched MCP 1.30 transport

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Coding-Dev-Tools <algorithmictradingsolutions@gmail.com>

* fix(deps-dev): update ruff requirement from <0.17,>=0.15.22 to >=0.15.22,<0.18 (#264)

* fix(deps-dev): update ruff requirement

Updates the requirements on [ruff](https://github.com/astral-sh/ruff) to permit the latest version.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](astral-sh/ruff@0.15.22...0.17.0)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.17.0
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>

* test(release): align ruff version bound assertion with <0.18

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jaixii <algorithmictradingsolutions@gmail.com>

* fix(deps-dev): bump @playwright/test from 1.63.0 to 1.64.0 (#265)

Bumps [@playwright/test](https://github.com/microsoft/playwright) from 1.63.0 to 1.64.0.
- [Release notes](https://github.com/microsoft/playwright/releases)
- [Commits](microsoft/playwright@v1.63.0...v1.64.0)

---
updated-dependencies:
- dependency-name: "@playwright/test"
  dependency-version: 1.64.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* style(tests): trim inherited encryption fixture trailing blank line

* test: scope private-ledger monkeypatches before fixture cleanup

* fix(deps): bump the codeql-action group with 3 updates (#267)

Bumps the codeql-action group with 3 updates: [github/codeql-action/init](https://github.com/github/codeql-action), [github/codeql-action/analyze](https://github.com/github/codeql-action) and [github/codeql-action/upload-sarif](https://github.com/github/codeql-action).


Updates `github/codeql-action/init` from 4.38.2 to 4.38.3
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@2892aa5...24c5418)

Updates `github/codeql-action/analyze` from 4.38.2 to 4.38.3
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@2892aa5...24c5418)

Updates `github/codeql-action/upload-sarif` from 4.38.2 to 4.38.3
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@2892aa5...24c5418)

---
updated-dependencies:
- dependency-name: github/codeql-action/init
  dependency-version: 4.38.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: codeql-action
- dependency-name: github/codeql-action/analyze
  dependency-version: 4.38.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: codeql-action
- dependency-name: github/codeql-action/upload-sarif
  dependency-version: 4.38.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: codeql-action
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(deps): bump actions/download-artifact from 8.0.1 to 8.0.2 (#268)

Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 8.0.1 to 8.0.2.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](actions/download-artifact@3e5f45b...9000827)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: 8.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(deps-dev): bump impeccable from 4.1.0 to 4.5.2 (#266)

Bumps [impeccable](https://github.com/pbakaus/impeccable) from 4.1.0 to 4.5.2.
- [Release notes](https://github.com/pbakaus/impeccable/releases)
- [Changelog](https://github.com/pbakaus/impeccable/blob/main/docs/RELEASE-4.4.0.md)
- [Commits](pbakaus/impeccable@cli-v4.1.0...cli-v4.5.2)

---
updated-dependencies:
- dependency-name: impeccable
  dependency-version: 4.5.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jaixii <algorithmictradingsolutions@gmail.com>

* fix: enforce source boundaries and release lifecycle contracts

* Bind specification source reads to checked file descriptors

* fix: preserve dashboard import diagnostics and graph controls

* docs: collect immutable offline evidence for reviewed release source

* docs: bind current benchmarks to immutable reviewed-source evidence

* test: cover canonical database aliases across scalar punctuation

* Fix Spec Crawl coverage and bounded conflict reporting

Normalize limited directive grammar while preserving concrete policy scope. Expose conflict and remediation limits consistently in cluster reports, Spec Studio and CLI, with before/after and transport/browser regressions.

* docs: publish fresh offline evidence for final spec crawl runtime

* docs: pin current offline evidence to published final runtime artifact

* Preserve resolved clarifications and recheck supersession scope

* Report empty procedural scopes and partial prompt analysis faithfully

* docs: publish fresh offline evidence for reviewed spec studio runtime

* docs: pin current offline evidence to published reviewed runtime artifact

* Reject candidate bytecode in configured Python cache prefixes

* Keep prefixed bytecode rejection portable on Windows

* test: reproduce coordinated directive omissions and false obligations

* fix: retain coordinated directive polarity and Boolean scope

* fix: keep compound normalization within each action

* Refresh offline evidence for coordinated policy runtime

* Pin current evidence references to canonical coordinated-runtime artifact

* test(spec-crawl): reproduce serial directive omissions and grouping

* fix(spec-crawl): preserve governed serial action lists

* fix(spec-crawl): keep scoped tail alternatives out of serial polarity

* fix(spec-crawl): resolve serial operators only from list syntax

* Refresh offline evidence for serial-comma policy runtime

* Pin current evidence references to canonical serial-policy runtime artifact

* fix: classify memory axes from masked policy prose

* Refresh offline evidence for masked-axis policy runtime

* Pin current evidence references to staged immutable masked-axis artifact

* fix: disclose memory audit bounds and analyze title ambiguity

* Enforce transport and scope authority for specification audit operations

* fix: keep title flag IDs distinct from content references

* Document transport limits, scoped remediation and bounded title analysis

* Refresh offline evidence for transport and scoped policy fixes

* Pin current evidence references to staged immutable transport and scope artifact

* Keep saved specification clarification titles free of resolved vague tokens

* Refresh offline evidence for neutral clarification titles

* Pin current evidence references to staged immutable neutral-title artifact

* Redact newly exposed nested URI credentials in one bounded scan

* Refresh offline evidence for nested URI redaction

* Pin current evidence references to staged immutable nested-uri-redaction artifact

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Josh W <jomie2k6@yahoo.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Release Maintenance <release-maintenance@users.noreply.github.com>
…lows (#270)

* feat(security): add fail-closed host file protection engine and Command Code hook

- Implement file_guard.py for host-mediated protection of sensitive files
- Add Command Code PreToolUse hook integration in integrations/commandcode/file_guard_hook.py
- Support --file-guard flag in scripts/install_cc_hook.py with idempotent hook registration
- Add documentation in docs/FILE_PROTECTION.md and update SECURITY.md and README.md
- Add comprehensive unit tests in tests/test_file_guard.py and tests/test_install_cc_hook.py

* Prepare Engraphis 1.7.10 release candidate

Preserve historical validity observations across temporal reads and sync, retain authorized ended-session derivation lineage, and reject mutations prepared before history-only evidence changes. Include reviewed document, dashboard, queue, dependency, packaging and deterministic-evidence fixes.

Validation: full Python3.11 suite8348 passed at83.85% coverage; NumPy-only Python3.9 suite6402 passed; focused3.10/3.12/3.13/3.14 matrix, eight eval gates, lint/typechecking, and independently built and installed wheel/sdist checks pass. Hosted and owner-signed release qualification remain separate required gates.

The original feature checkout and its starting edits are preserved. This isolated candidate contains the complete tested source checkpoint.

* Emit only server-minted browser session cookies

Preserve a validated local session and its review confirmation
without re-emitting request cookie bytes. Keep expired, malformed,
forged and explicit-token renewal paths server-signed.

Add auth regressions and refresh immutable source-bound benchmark
evidence; 245 focused security/dashboard and 139 evidence contracts
pass. Keep the unmodified clean CodeQL gate authoritative.

* Fix policy aliases and legacy hook upgrades

* Refresh offline evidence for policy and installer fixes

* Pin README evidence links to the fresh source commit

* Align PyPI README contract with immutable evidence links

* release: complete 1.7.10 changelog, pin file-protection link, drop pip cache from publish jobs

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NiadSJ7iUmXyv9jaduGYVH

* security: make the Command Code file guard enforce real tool ids and fail closed; linear Spec Studio heading regex

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NiadSJ7iUmXyv9jaduGYVH

* core: hydrate browse versions, reject empty supersede intervals, skip closure backfill on current schema

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NiadSJ7iUmXyv9jaduGYVH

* core: report the closure observation limit as a caller error (ValueError + IntegrityError subclass)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NiadSJ7iUmXyv9jaduGYVH

* docs: list eval.evidence_contracts in the AGENTS.md gate instead of a duplicate spec_crawl line

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NiadSJ7iUmXyv9jaduGYVH

* security: deny unverifiable Windows file-guard targets (device, UNC, alternate data streams)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NiadSJ7iUmXyv9jaduGYVH

* docs: note the file guard's canonical tool ids and Windows denials in the 1.7.10 changelog

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NiadSJ7iUmXyv9jaduGYVH

* Refresh offline evidence for the release-review fixes

Fresh artifact offline-fixtures-release-review-20261020.json (SHA-256 185cc53b...).
The three measured fixture results are unchanged; charts re-rendered from it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NiadSJ7iUmXyv9jaduGYVH

* Pin README evidence links to the release-review evidence commit

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NiadSJ7iUmXyv9jaduGYVH

* fix(pi): raise the hono override to 4.13.13 for GHSA-5r4p-p66f-jhc7

The Pi extension CI audit fails on hono 4.12.4-4.13.10 (serveStatic double-decodes the
request path). Only the locked hono leaf changes; npm ci, verify, integration tests and both
audits pass locally with npm 11.12.1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NiadSJ7iUmXyv9jaduGYVH

* fix(history): bound why/timeline candidate scanning to one window

why and timeline walked every matching record in keyset pages before ranking, which took 6191 ms and 2744 ms at 20,001 memories. The relatedness pass now consumes one explicit candidate window built from the ranked lexical hits plus the semantic top hits, capped by DEFAULT_HISTORY_CANDIDATE_BUDGET, and falls back to a single bounded page if the FTS query fails. Same benchmark script now measures 6 ms and 1 ms.

The lexical arm no longer fails silently: an OperationalError in the FTS query is logged and degrades to the LIKE probe instead of returning no history.

* fix(dashboard): only auto-issue the loopback session on tokenless instances

A token-gated instance previously minted an automatic browser session for loopback requests, so the token never protected the dashboard. automatic_browser_session_allowed() now gates the grant, /api/auth/local-session returns 403 local_token_required when ENGRAPHIS_API_TOKEN is set, and the 401 hint advertises the token instead of the zero-token path. The automatic session remains for zero-token instances, where it exists to mint the review CSRF nonce.

The tests were rewritten because the old expectations encoded the pre-fix behaviour.

* fix(sync): reserve closure capacity for locally authored observations

Peers could consume all 1024 closure observations on a record, so a later local import was rejected with closure_budget_exceeded. Peer updates are now limited to 960 new observations and the remaining 64 are reserved for local writes; the local hard cap is unchanged.

The budget is charged only for observations the peer does not already have, so replaying an accepted update whose closures are already present stays idempotent on a saturated record. Rows over the hard cap are still rejected outright.

* fix(sources): reject UNC and device roots before any resolution or stat

canonical_source_id and scan_document_tree converted untrusted device and UNC paths with Path(), lstat(), and resolve() before validating the configured root, which can reach remote SMB endpoints on Windows and offer NTLM authentication.

remote_or_device_path() now inspects the raw string first, so such sources are rejected before any filesystem call. Import roots from ENGRAPHIS_IMPORT_ROOTS that name a UNC or device path are refused before realpath, and the tests assert that no lstat or realpath happens before the rejection.

* fix(file-guard): fail closed on unverifiable targets and tool-id variants

Normalise tool identifiers across separators, deny additional mutating shell commands, and reject drive-relative paths, alternate data streams, device names, and UNC targets before any policy decision. Symlink and ownership checks now use the platform's real volume semantics, and the hook handles a bounded payload and nesting depth before failing closed on BaseException.

The installer writes the normalised hook entry and the docs describe the Windows denials.

* test(release): bind artifact checks to the candidate version and manifest

verify_release_artifacts now requires the sdist and wheel names for the release version, cross-checks the candidate identifier, and exits non-zero on every failure path instead of only printing errors. verify_distribution_contents compares the installed manifest against the built artifacts.

Adds packaging and release-infrastructure coverage, including the fail-closed paths.

* fix(sources): stop treating Windows creation time as a content change

read_local_source compared st_ctime_ns between the path-based lstat and the handle-based fstat. On Windows st_ctime is creation time, and freshly written files can report it about a millisecond apart between the two views, so roughly one in five reads was rejected as 'source file changed during open'. Creation time also never changes when content changes, so it cannot act as a change detector there.

Size and mtime remain authoritative on every platform, POSIX keeps its inode change time, and identity is still checked. This matches embedder_st, resources, private_state, and store, which already exclude st_ctime on Windows for the same reason.

* docs: record the 1.7.10 review fixes and refresh the offline evidence

Regenerates the public offline artifact after the source-read change, updates the artifact checksum and suite digest pins, and re-renders both charts from the new artifact. The three measured fixture results are byte-identical to the superseded run; only the manifest digest and the source_paths entry differ.

Also records the bounded history window, the 960/64 closure partition, UNC/device import-root rejection, the token-gated automatic browser session, the file-guard hardening, and the Windows source-read timestamp fix.

* docs: pin the README evidence links to the refreshed artifact commit

* fix(history): annotate the fallback argument list for the type gate

The Like fallback builds a list from three strings and then appends the integer row limit, so pyright inferred list[str] and rejected the append. The annotation is behaviour-preserving.

* docs: regenerate the offline evidence after the history type fix

store.py is part of the fixture-suite manifest, so the annotation change required a new immutable artifact. The recorded results are byte-identical to the previous run; only the manifest digest and the store.py entry differ. Charts are re-rendered from the new artifact and the checksum, digest, artifact name, and image metadata are re-pinned.

* docs: re-pin the README evidence links to the regenerated artifact commit

* docs: point the benchmark reproduction commands at the current artifact

The export and render commands still named the superseded same-day artifact. Also records that predecessor's checksum and why it is retained unchanged.

* docs: pin the README evidence links to the corrected reproduction commands

* test(closure): cover the empty-interval supersession guard

The guard arrived with the history work but had no direct coverage or release note. It rejects a supersession that starts at or before the predecessor's own valid_from, which the store and every sync peer treat as an unwritable empty interval.

* fix(dashboard): keep the one-shot URL token until the browser exchange runs

runBoot deleted the token fragment during its bookmark cleanup before the first bootstrap request could authenticate, so a token-gated instance showed the sign-in dialog with an empty field even when the URL carried the token. boot now keeps that value for the exchange, and the review CSRF lookup treats local_token_required as 'no automatic session' instead of a connection failure.

The browser smoke navigates with the fragment wherever it expects the real server; the specs that already used it now pass, and 295 of 298 local Playwright tests pass (the other three are Galaxy physics timing flakes that pass serially).

* ci: refresh the Pi audit lockfile for the ip-address advisory

A new advisory (GHSA-rxp7-6hxx-x8q5, ip-address <=10.7.3) makes the Pi audit step fail on every branch. The lockfile now resolves 10.7.4 within its existing ^10.2.0 range; npm audit --package-lock-only reports zero vulnerabilities and no other package changed.

* Harden memory concurrency, isolate MCP worker execution, and block Windows UNC path leaks

- Guard engine write operations against lock inversion when a caller owns an SQLite transaction
- Use atomic Store write transactions for receipt recording and remove duplicate receipt mutex
- Run synchronous MCP handlers in worker threads and synchronize capability registry access
- Block Windows UNC and device namespace paths before resolution across service, routes, and engine
- Refresh offline benchmark evidence with immutable v3 artifact and updated render provenance

* Pin documentation links and contract tests to release commit 5bb2895

* test(sources): cover whitespace-prefixed UNC and device paths

The raw-path guards strip leading whitespace before classifying the path, because a prefixed UNC target still opens an SMB session. Nothing exercised that branch, so add the prefixed forms to the document, import-root, and file-guard cases, including a UNC working directory.

* docs: describe the raw-path UNC rule across every local source surface

The changelog and security guide still scoped the rejection to import roots after vault scans, code-index roots, source_id reads, and the file-guard working directory gained the same check.

* test(sources): cover UNC vault paths before resolution

canonical_vault_id and scan_obsidian_vault now reject remote and device paths on the raw text, but nothing asserted that neither resolves the path first, which is the behaviour the NTLM defence depends on.

* docs: keep the vault-path sentence inside the public narrative boundary

The public-narrative contract allows a competitor product name only on the importer and changelog surfaces, so SECURITY.md now says Markdown vault scans. The raw-path coverage is unchanged.

* docs: state the semantic-arm cost of history ranking

Measured at 20,001 memories with the semantic arm enabled: why 258 ms and timeline 121 ms, versus 1 ms and 0 ms on the default lexical embedder (baseline 6191 ms and 2744 ms). Candidate hydration is bounded, but closed records are absent from the ANN index, so a semantic embedder must still rank against every stored vector. The previous wording implied the whole cost was corpus-independent.

* fix(auth): treat a present-but-blank API token as configured

automatic_browser_session_allowed stripped the configured token before deciding whether the instance was gated, while the request middleware used plain truthiness. A deployment with ENGRAPHIS_API_TOKEN set to whitespace therefore still accepted the automatic loopback session and skipped the browser gate the operator asked for. The predicate now matches the middleware: only an absent or empty value is a zero-token instance.

Adds a regression test that the blank value is refused by /api/auth/local-session and still exchanges through /api/auth/session.

* docs: regenerate the offline evidence after the token-gating fix

local_auth.py is part of the fixture-suite manifest, so the fix requires a new immutable artifact. The three measured results are byte-identical to v3; only the manifest digest, the local_auth.py entry, and the documented producer environment differ. Benchmarks now also names v3 as a preserved predecessor and points the render commands at the registered artifact.

* docs: pin the README evidence links to the regenerated artifact commit

* ci(release): make signed full-product qualification opt-in

Since #217 every PyPI and GitHub release write required an Ed25519-signed
envelope covering all 11 RELEASE_GATES, including a multi-week human pilot
and a first-time-developer usability study. The four secrets it reads have
never been configured, so v1.7.6, v1.7.8 and v1.7.9 could only ship through
hard-coded per-release waiver inputs, and v1.7.10 has been blocked since
2026-10-18.

The four "Require signed full-product qualification" steps now run only when
the repository or environment variable REQUIRE_SIGNED_QUALIFICATION is
'true'. Unset, a release still needs every build gate (tests on 3.9-3.14,
evals, pyright, CodeQL, audits, browser/Pi/container gates, installed
artifact smokes, reproducibility) and approval of the protected
release-qualification environment.

The waive_v176/v178/v179_qualification inputs are removed, together with the
waiver guard, the pre-PyPI waiver disclosure step and the waiver branches
of the GitHub repair step. Repair keeps its retained-run artifact and evidence
hash checks. When it creates a release that does not exist yet, it still
refuses to displace a newer Latest.

The release-contract tests now assert the new contract: each qualification
step is present, reads only protected secrets, precedes every publication
write and is guarded by the variable, and no waiver inputs remain.
docs/RELEASE_QUALIFICATION.md documents the variable.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0111byzLrKKTCJ23uTT6PyZq

* fix(install_cc_hook): keep the operator's key order and sync the rename

_write_settings() already staged settings.json in a temp file, fsynced it and
moved it into place with os.replace(), so a crash can no longer leave a
truncated file. Two gaps remained:

- json.dumps(..., sort_keys=True) re-sorted every key in the user's
  hand-maintained settings file on each install and uninstall. Keys now keep
  their original order, so an install-then-uninstall round trip is
  byte-identical.
- The directory entry was never synced after the replace, so a power loss
  could still roll the rename back. The parent directory is now fsynced on
  POSIX. This is best effort: a filesystem that refuses a directory fsync
  does not turn a completed install into a reported failure.

The script stays stdlib-only, so it mirrors
engraphis.private_state.atomic_private_text instead of importing it. That
helper also defaults to 0o600 and treats a concurrent edit as a conflict.
Everything else behaves as before.

New tests cover key-order preservation through install and uninstall, an
interrupted replace leaving the previous file intact with no temp files,
fsync ordering (file, then directory), and a refused directory fsync.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0111byzLrKKTCJ23uTT6PyZq

* ci: run the suite with pytest-xdist and raise the coverage floor to 80

CI ran the whole ~10.7k-test suite in one process, and the coverage gate
only failed below 60% while measured line coverage is 86.7%. That floor
would let roughly a quarter of the tested code lose its tests before CI
noticed.

- Add pytest-xdist>=3.6 to the test extra. ci.yml now runs the full-stack
  test matrix and the coverage job with `-n auto`. Each worker gets its own
  subdirectory under --basetemp, which stays inside ENGRAPHIS_INDEX_ROOTS.
  Locally on two cores the suite with coverage went from 1266s serial to
  657s, with identical results.
- Raise --cov-fail-under from 60 to 80, a few points below the measured
  86.74% (41232 statements, 5467 missed).
- Fix the one test that was not xdist-safe:
  test_unrecognized_marker_fails_closed_without_changing_checkpoint_files
  put os.getpid() in its parametrize id, so xdist workers collected
  different test ids and aborted. The pid case now has a fixed id, and the
  payload is unchanged.

These stay serial on purpose: core-py39 (a numpy+pytest-only floor job),
the single-file encryption job, and release.yml, whose public release
evidence records the exact pytest command.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0111byzLrKKTCJ23uTT6PyZq

* feat(release): reconcile desktop memory, stdio bridge, exact recall, and 1.7.10 CI fixes

* docs: pin the README evidence links to the regenerated artifact commit

* docs: sync AGENTS.md coverage threshold with 80% CI gate

---------

Co-authored-by: Codex Release Audit <codex@localhost>
Co-authored-by: Jaixii <jaixiicrypto@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: opencode-agent <agent@engraphis.local>
* fix(deps-dev): bump impeccable from 4.5.2 to 4.7.0

Bumps [impeccable](https://github.com/pbakaus/impeccable) from 4.5.2 to 4.7.0.
- [Release notes](https://github.com/pbakaus/impeccable/releases)
- [Changelog](https://github.com/pbakaus/impeccable/blob/main/docs/RELEASE-4.4.0.md)
- [Commits](pbakaus/impeccable@cli-v4.5.2...cli-v4.7.0)

---
updated-dependencies:
- dependency-name: impeccable
  dependency-version: 4.7.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps-dev): bump tree-sitter-language-pack from 1.21.0 to 1.22.1

Bumps [tree-sitter-language-pack](https://github.com/xberg-io/tree-sitter-language-pack) from 1.21.0 to 1.22.1.
- [Release notes](https://github.com/xberg-io/tree-sitter-language-pack/releases)
- [Changelog](https://github.com/xberg-io/tree-sitter-language-pack/blob/main/CHANGELOG.md)
- [Commits](xberg-io/tree-sitter-language-pack@v1.21.0...v1.22.1)

---
updated-dependencies:
- dependency-name: tree-sitter-language-pack
  dependency-version: 1.22.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps-dev): bump @axe-core/playwright from 4.12.1 to 4.14.0

Bumps [@axe-core/playwright](https://github.com/dequelabs/axe-core-npm) from 4.12.1 to 4.14.0.
- [Release notes](https://github.com/dequelabs/axe-core-npm/releases)
- [Changelog](https://github.com/dequelabs/axe-core-npm/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/dequelabs/axe-core-npm/commits/v4.14.0)

---
updated-dependencies:
- dependency-name: "@axe-core/playwright"
  dependency-version: 4.14.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps-dev): bump @playwright/test from 1.64.0 to 1.64.1

Bumps [@playwright/test](https://github.com/microsoft/playwright) from 1.64.0 to 1.64.1.
- [Release notes](https://github.com/microsoft/playwright/releases)
- [Commits](microsoft/playwright@v1.64.0...v1.64.1)

---
updated-dependencies:
- dependency-name: "@playwright/test"
  dependency-version: 1.64.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps-dev): bump openai-codex from 0.160.1 to 0.163.0

---
updated-dependencies:
- dependency-name: openai-codex
  dependency-version: 0.163.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps): bump the codeql-action group with 3 updates

Bumps the codeql-action group with 3 updates: [github/codeql-action/init](https://github.com/github/codeql-action), [github/codeql-action/analyze](https://github.com/github/codeql-action) and [github/codeql-action/upload-sarif](https://github.com/github/codeql-action).


Updates `github/codeql-action/init` from 4.38.3 to 4.39.0
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@24c5418...6f2ac81)

Updates `github/codeql-action/analyze` from 4.38.3 to 4.39.0
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@24c5418...6f2ac81)

Updates `github/codeql-action/upload-sarif` from 4.38.3 to 4.39.0
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@24c5418...6f2ac81)

---
updated-dependencies:
- dependency-name: github/codeql-action/init
  dependency-version: 4.39.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: codeql-action
- dependency-name: github/codeql-action/analyze
  dependency-version: 4.39.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: codeql-action
- dependency-name: github/codeql-action/upload-sarif
  dependency-version: 4.39.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: codeql-action
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps): bump actions/upload-artifact from 7.0.1 to 7.0.2

Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 7.0.1 to 7.0.2.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](actions/upload-artifact@043fb46...cf430e0)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: 7.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps): bump pypa/gh-action-pypi-publish from 1.14.1 to 1.14.3

Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.14.1 to 1.14.3.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](pypa/gh-action-pypi-publish@ba38be9...7245906)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-version: 1.14.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps): bump pillow from 12.3.0 to 13.0.0 in /eval/configs

Bumps [pillow](https://github.com/python-pillow/Pillow) from 12.3.0 to 13.0.0.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](python-pillow/Pillow@12.3.0...13.0.0)

---
updated-dependencies:
- dependency-name: pillow
  dependency-version: 13.0.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps): bump setuptools from 84.0.0 to 84.1.0 in /eval/configs

Bumps [setuptools](https://github.com/pypa/setuptools) from 84.0.0 to 84.1.0.
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](pypa/setuptools@v84.0.0...v84.1.0)

---
updated-dependencies:
- dependency-name: setuptools
  dependency-version: 84.1.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps): bump filelock from 3.32.7 to 4.2.1 in /eval/configs

Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.32.7 to 4.2.1.
- [Release notes](https://github.com/tox-dev/py-filelock/releases)
- [Changelog](https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst)
- [Commits](tox-dev/filelock@3.32.7...4.2.1)

---
updated-dependencies:
- dependency-name: filelock
  dependency-version: 4.2.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps): bump pypdf from 6.19.0 to 6.21.2 in /eval/configs

Bumps [pypdf](https://github.com/py-pdf/pypdf) from 6.19.0 to 6.21.2.
- [Release notes](https://github.com/py-pdf/pypdf/releases)
- [Changelog](https://github.com/py-pdf/pypdf/blob/main/CHANGELOG.md)
- [Commits](py-pdf/pypdf@6.19.0...6.21.2)

---
updated-dependencies:
- dependency-name: pypdf
  dependency-version: 6.21.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps): bump pypa/gh-action-pypi-publish from 1.14.1 to 1.14.3

Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.14.1 to 1.14.3.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](pypa/gh-action-pypi-publish@ba38be9...7245906)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-version: 1.14.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps): bump actions/upload-artifact from 7.0.1 to 7.0.2

Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 7.0.1 to 7.0.2.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](actions/upload-artifact@043fb46...cf430e0)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: 7.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps-dev): bump tree-sitter-language-pack from 1.21.0 to 1.22.1

Bumps [tree-sitter-language-pack](https://github.com/xberg-io/tree-sitter-language-pack) from 1.21.0 to 1.22.1.
- [Release notes](https://github.com/xberg-io/tree-sitter-language-pack/releases)
- [Changelog](https://github.com/xberg-io/tree-sitter-language-pack/blob/main/CHANGELOG.md)
- [Commits](xberg-io/tree-sitter-language-pack@v1.21.0...v1.22.1)

---
updated-dependencies:
- dependency-name: tree-sitter-language-pack
  dependency-version: 1.22.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps-dev): bump openai-codex from 0.160.1 to 0.163.0

---
updated-dependencies:
- dependency-name: openai-codex
  dependency-version: 0.163.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps): bump the codeql-action group across 1 directory with 3 updates

Bumps the codeql-action group with 3 updates in the / directory: [github/codeql-action/init](https://github.com/github/codeql-action), [github/codeql-action/analyze](https://github.com/github/codeql-action) and [github/codeql-action/upload-sarif](https://github.com/github/codeql-action).


Updates `github/codeql-action/init` from 4.38.3 to 4.39.1
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@24c5418...9b32540)

Updates `github/codeql-action/analyze` from 4.38.3 to 4.39.1
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@24c5418...9b32540)

Updates `github/codeql-action/upload-sarif` from 4.38.3 to 4.39.1
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@24c5418...9b32540)

---
updated-dependencies:
- dependency-name: github/codeql-action/analyze
  dependency-version: 4.39.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: codeql-action
- dependency-name: github/codeql-action/init
  dependency-version: 4.39.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: codeql-action
- dependency-name: github/codeql-action/upload-sarif
  dependency-version: 4.39.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: codeql-action
...

Signed-off-by: dependabot[bot] <support@github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jaixii <algorithmictradingsolutions@gmail.com>
…Grype release gate (#285)

* fix(deps): bump certifi from 2026.7.22 to 2026.10.19 in /eval/configs

Bumps [certifi](https://github.com/certifi/python-certifi) from 2026.7.22 to 2026.10.19.
- [Commits](certifi/python-certifi@2026.07.22...2026.10.19)

---
updated-dependencies:
- dependency-name: certifi
  dependency-version: 2026.10.19
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(release): bump Dockerfile python:3.11-slim digest to 3.11.17 for CVE-2026-19445/19553

* fix(release): bump release-constraints setuptools to 84.1.0 for GHSA-xmj3-9gf7-h52w

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ck leaks (fixes #286) (#287)

* fix(mcp): recover from DatabaseError, stale files, and transaction lock leaks

- Add safe exception marker extraction in mcp_server logging to attribute
  underlying SQLite errors (SQLITE_CORRUPT, SQLITE_BUSY, SQLITE_LOCKED,
  SQLITE_IOERR, SQLITE_NOTADB, write_lock_timeout) without leaking SQL,
  paths, credentials, or memory content (Issue #286).
- Prevent transaction lock leak in _SerializedConnection._finish when
  rollback fails, avoiding 60s timeout deadlocks across threadpool workers.
- Add Store.is_stale() and Store.reconnect() to detect when the SQLite
  database file was replaced or modified out-of-process and cleanly
  re-initialize connection pragmas, unicode function, and snapshot pools.
- Add auto-recovery and single-retry loops on DatabaseError/OperationalError
  in Store memory fetchers, engraphis_recall_context, engraphis_recall,
  engraphis_recall_grounded, and engraphis_get_memory.
- Add comprehensive regression and unit tests in
  tests/test_mcp_database_error_recovery.py.

* fix(typecheck): ensure Store.get_memories returns on all code paths

* docs: refresh public offline evidence artifact for Issue #286 recovery fixes
* fix(ci): clear the Pi extension audit gate

Bump the Pi test host to @earendil-works/pi-coding-agent 1.4.0 and pin the
patched undici and minimatch leaves with package.json overrides. The shrinkwrap
now resolves to fixed versions, so the post-install leaf repair and its version
assertions are neither needed nor valid.

Verified locally: npm ci --ignore-scripts, npm run verify, npm run
test:integration, npm audit --omit=dev, and npm audit --no-package-lock
--include=dev all pass with zero vulnerabilities.

* test(release): track the resolved Pi dependency floors

The release-floor test pinned the removed post-install repair. It now checks the
overrides and dev-host pin that make the lock itself resolve patched minimatch
and undici, and that CI no longer rewrites node_modules before auditing.

* docs(pi): drop the obsolete post-install dependency repair

The lock resolves the patched leaves through package.json overrides, so the
development steps no longer rewrite the installed host.

* docs(pi): normalize README line endings

Keep the file byte-compatible with the repository copy so the dependency-repair
documentation change reviews as prose only.

---------

Co-authored-by: coding-dev-tools <coding-dev-tools@users.noreply.github.com>
* fix(ci): clear the Pi extension audit gate

Bump the Pi test host to @earendil-works/pi-coding-agent 1.4.0 and pin the
patched undici and minimatch leaves with package.json overrides. The shrinkwrap
now resolves to fixed versions, so the post-install leaf repair and its version
assertions are neither needed nor valid.

Verified locally: npm ci --ignore-scripts, npm run verify, npm run
test:integration, npm audit --omit=dev, and npm audit --no-package-lock
--include=dev all pass with zero vulnerabilities.

* test(release): track the resolved Pi dependency floors

The release-floor test pinned the removed post-install repair. It now checks the
overrides and dev-host pin that make the lock itself resolve patched minimatch
and undici, and that CI no longer rewrites node_modules before auditing.

* docs(pi): drop the obsolete post-install dependency repair

The lock resolves the patched leaves through package.json overrides, so the
development steps no longer rewrite the installed host.

* docs(pi): normalize README line endings

Keep the file byte-compatible with the repository copy so the dependency-repair
documentation change reviews as prose only.

* feat: salvage the mergeable work from the 1.7.12 branch

The file-protection engine, Command Code hook, and supporting docs already
landed on main via #270, so the 1.7.12 branch's unique remaining value is:

- tests/test_mcp_memory_concurrency.py: desktop MCP concurrency regressions,
  ported to main's fail-fast writer admission (RuntimeError instead of a
  locked OperationalError); all 11 cases pass.
- tools/ram_probe.py: a Windows-only RAM integrity and stress diagnostic.
- run_preflight.ps1: local offline gates before pushing. The Fast/full test
  branch previously ran the same two-file command in both modes; the full mode
  now runs the suite, and the copy no longer claims a billing policy.

engraphis/dashboard_assets/engraphis-graph-compat.js is deliberately not
restored: main's dashboard tests assert that asset stays absent.

---------

Co-authored-by: coding-dev-tools <coding-dev-tools@users.noreply.github.com>
* fix(ci): clear the Pi extension audit gate

Bump the Pi test host to @earendil-works/pi-coding-agent 1.4.0 and pin the
patched undici and minimatch leaves with package.json overrides. The shrinkwrap
now resolves to fixed versions, so the post-install leaf repair and its version
assertions are neither needed nor valid.

Verified locally: npm ci --ignore-scripts, npm run verify, npm run
test:integration, npm audit --omit=dev, and npm audit --no-package-lock
--include=dev all pass with zero vulnerabilities.

* fix(dashboard): open the dashboard automatically for every browser

Remove the browser token form and the window.prompt() token exchange. The
dashboard mints its HttpOnly session for any same-origin browser request that
reaches it: loopback, a literal address, a single-label/mDNS name, or the host
in ENGRAPHIS_DASHBOARD_URL, still gated by the custom browser header, an exact
Origin/Host match, and a trusted-proxy check for forwarding headers.

Machine clients and /mcp still require Authorization: Bearer
ENGRAPHIS_API_TOKEN. ENGRAPHIS_BROWSER_AUTO_SESSION=0 restores the hardened
token gate with one-time links: POST /api/auth/link (bearer-protected) and
engraphis-dashboard --link mint a single-use code, signed with the token plus
a per-process epoch, delivered in a URL fragment, valid for 15 minutes, and
redeemed at POST /api/auth/handoff for a 12-hour session.

Re-export the offline evidence artifact because the registry binds the hashes
of every public Python source file, and refresh both rendered images.

* test(release): track the resolved Pi dependency floors

The release-floor test pinned the removed post-install repair. It now checks the
overrides and dev-host pin that make the lock itself resolve patched minimatch
and undici, and that CI no longer rewrites node_modules before auditing.

* docs(pi): drop the obsolete post-install dependency repair

The lock resolves the patched leaves through package.json overrides, so the
development steps no longer rewrite the installed host.

* docs(pi): normalize README line endings

Keep the file byte-compatible with the repository copy so the dependency-repair
documentation change reviews as prose only.

* fix(dashboard): do not echo a configuration exception to the caller

CodeQL py/stack-trace-exposure flagged the /api/auth/link error path. The value
is already validated at startup; return the constant message instead.

* chore(evidence): re-export the registry after the CodeQL fix

The evidence registry binds the SHA-256 of every public Python source file. The
stack-trace-exposure fix changed engraphis/dashboard_app.py after the previous
export, so the pinned artifact no longer matched the tree. This immutable export
records the final source manifest; the three fixture results are unchanged.

Updated the registry constants, benchmark guide, README checksum prefix, and
both rendered SVG/PNG pairs.

---------

Co-authored-by: coding-dev-tools <coding-dev-tools@users.noreply.github.com>
Bumps [impeccable](https://github.com/pbakaus/impeccable) from 4.7.0 to 4.8.0.
- [Release notes](https://github.com/pbakaus/impeccable/releases)
- [Changelog](https://github.com/pbakaus/impeccable/blob/main/docs/RELEASE-4.4.0.md)
- [Commits](pbakaus/impeccable@cli-v4.7.0...cli-v4.8.0)

---
updated-dependencies:
- dependency-name: impeccable
  dependency-version: 4.8.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jaixii <algorithmictradingsolutions@gmail.com>
Bumps [pypdf](https://github.com/py-pdf/pypdf) from 6.21.2 to 6.21.4.
- [Release notes](https://github.com/py-pdf/pypdf/releases)
- [Changelog](https://github.com/py-pdf/pypdf/blob/main/CHANGELOG.md)
- [Commits](py-pdf/pypdf@6.21.2...6.21.4)

---
updated-dependencies:
- dependency-name: pypdf
  dependency-version: 6.21.4
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jaixii <algorithmictradingsolutions@gmail.com>
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 7.0.0 to 7.1.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](actions/setup-python@5fda3b9...6d4fd22)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: 7.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jaixii <algorithmictradingsolutions@gmail.com>
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 7.0.0 to 7.1.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](actions/setup-node@8207627...949feb2)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: 7.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jaixii <algorithmictradingsolutions@gmail.com>
…ates (#291)

Bumps the codeql-action group with 3 updates in the / directory: [github/codeql-action/init](https://github.com/github/codeql-action), [github/codeql-action/analyze](https://github.com/github/codeql-action) and [github/codeql-action/upload-sarif](https://github.com/github/codeql-action).


Updates `github/codeql-action/init` from 4.39.0 to 4.39.1
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@6f2ac81...9b32540)

Updates `github/codeql-action/analyze` from 4.39.0 to 4.39.1
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@6f2ac81...9b32540)

Updates `github/codeql-action/upload-sarif` from 4.39.0 to 4.39.1
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@6f2ac81...9b32540)

---
updated-dependencies:
- dependency-name: github/codeql-action/analyze
  dependency-version: 4.39.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: codeql-action
- dependency-name: github/codeql-action/init
  dependency-version: 4.39.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: codeql-action
- dependency-name: github/codeql-action/upload-sarif
  dependency-version: 4.39.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: codeql-action
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jaixii <algorithmictradingsolutions@gmail.com>
* chore(ci): let dependabot rebase its own branches

main requires branches to be up to date before merging (strict required
checks), so every merge leaves the other dependency PRs behind and needs a
manual update-branch plus a full CI cycle. rebase-strategy: auto keeps them
current without that dance.

* chore(ci): keep the dependabot config line endings stable

---------

Co-authored-by: coding-dev-tools <coding-dev-tools@users.noreply.github.com>
)

The dashboard no longer exchanges a deployment token from a URL fragment, so the
e2e specs that navigated with #token=<ENGRAPHIS_API_TOKEN> were exercising a
dead path while the automatic session did the real work. Open the dashboard
directly and let the shipped automatic-session path run, including the
Firefox/WebKit smoke.

The deliberate obsolete-fragment test in ask-home.spec.js and the mocked
one-time handoff test in ledger.spec.js remain.

Co-authored-by: coding-dev-tools <coding-dev-tools@users.noreply.github.com>
Guard the security-relevant ENGRAPHIS_BROWSER_AUTO_SESSION default (on) and its
off switches, including the malformed-value fallback. The configuration and
Playwright comments now describe the shipped behavior: token-protected API
routes, automatic browser access.

Co-authored-by: coding-dev-tools <coding-dev-tools@users.noreply.github.com>
- Lead the Jev section with "included free with every paid plan: Pro and Team"
- Keep the entitlement, rolling limits, fleet guard, consent, and BYOK terms intact
- Record the clarification under Unreleased

Co-authored-by: coding-dev-tools <coding-dev-tools@users.noreply.github.com>
Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
* docs(plans): include 500 free Jev calls per day for Pro and Team

- Replace the three rolling caps with one free 500-call daily allowance
- State the included allowance in the README, plan comparison, configuration,
  MCP reference, bundled skill, env sample, and dashboard messages
- Update the documentation contract to pin the policy; historical 1.7.9 notes stay unchanged

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>

* docs(plans): announce managed Jev availability for paid plans

- Replace the not-yet-available notice with live availability and enablement
- Keep the 500-call daily allowance and per-call consent rules
- Refresh the bundled skill checksum

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>

---------

Co-authored-by: coding-dev-tools <coding-dev-tools@users.noreply.github.com>
Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
* chore(release): prepare 1.7.12 candidate

- Bump package, plugin, and commercial-manifest versions to 1.7.12
- Record the 1.7.12 changelog entry for automatic browser access, the salvaged
  verification tooling, and dependency/CI upkeep
- Refresh Claude plugin asset checksums

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>

* docs(readme): state Jev is free for Pro and Team up front

- Lead the Jev section with "included free with every paid plan: Pro and Team"
- Keep the entitlement, rolling limits, fleet guard, consent, and BYOK terms intact
- Record the clarification under Unreleased

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>

* fix(sync,manifest): record sync authorization denial and support public-offer cloud contract

- Record authoritative entitlement denial when POST /api/sync/run fails with 401/402/403, and return account_url() when connected to prevent lapsed Team users from misrouting to Pro checkout
- Accept schema 'engraphis-public-offer/v1' in scripts/check_commercial_manifest.py --cloud-contract to cleanly validate against engraphis-cloud
- Add regression test in tests/test_sync_dashboard.py

Agent: antigravity

* fix(benchmark,eval): isolate offline chunking eval and refresh 1.7.12 release evidence

- Ensure chunking_eval uses retention_supervisor=none so offline evaluations
  remain deterministic and independent of local user LLM retention settings
- Export fresh immutable offline evidence artifact for 1.7.12 release
- Update benchmark report images (SVG and PNG provenance chunks)
- Bind new fixture digest and artifact sha256 across tests and documentation

Agent: antigravity

---------

Co-authored-by: coding-dev-tools <coding-dev-tools@users.noreply.github.com>
Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
The client kept three hand-maintained copies of the private hosted
entitlement table, and each copy was only ever compared to itself. Add a
single machine-readable mirror, load both runtime surfaces from it, and
make the release gate compare it with the private contract so a new
capability cannot silently disappear from a paying customer's dashboard.

Local workspace export stays free and is explicitly kept out of the paid
vocabulary. Unknown server grants are reported as unrecognized_features
instead of being dropped without explanation.

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ⚠️ Failed 2026-11-03T12:27:39.635600Z
We couldn’t complete this review. Comment @codex review to try again.
99d6595 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants