Repository navigation
feat(paid-plans): entitlement contract, sync key management, and denial recovery - #315
Open
Coding-Dev-Tools wants to merge 13 commits into
Open
Coding-Dev-Tools wants to merge 13 commits into
Coding-Dev-Tools wants to merge 13 commits into
Conversation
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.
Record that entitlement_contract.json is presentation metadata only and that the release gate compares it with the private hosted contract.
A server capability this client predates was dropped from the feature list without explanation. Render license.unrecognized_features as an update prompt so a paying customer never reads a lock as "not bought".
A paying customer can now create the key from the dashboard instead of editing config.env. The key is written once to an owner-only state file, shown once, never re-readable through the API, and never overrides an operator-provisioned environment key. Rotation stays explicit because data synced under the old key is unreadable until every device switches. Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
Extract a fixed-vocabulary reason from a bounded error body, map it to the plan that sells the feature and the real account portal, and never forward provider text. The dashboard uses the reason to offer the right recovery: billing, seats, reconnect, or administrator. Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
A local cloud_unconfigured 401 is not a paid-feature denial. Keep the structured code-only error so the dashboard does not offer a token refresh or an upgrade that cannot fix the missing account connection. Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
The entitlement, sync-key, and denial-metadata changes alter checked-in producer files, so generate a new immutable artifact, recompute the suite digest and artifact SHA, and repin the README, benchmark guide, tests, and both rendered SVG/PNG provenance pairs. Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
CVE-2026-115557 in the Python 3.11.17 runtime is fixed in 3.11.18. Pin the new multi-arch digest so the release grype gate can pass. Co-authored-by: coding-dev-tools <coding-dev-tools@users.noreply.github.com> Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
The dashboard now directs an invalid saved key to generate a replacement instead of editing config.env. Update the browser expectation to the new recovery text. Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
The expectation edit rewrote a mixed-ending block as CRLF and inflated the diff. Restore the file's prior endings so the net change is only the recovery copy assertion. Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
- Publish Managed Jev as an included paid benefit (500 calls per person per day) in the entitlement contract, license payload, plan cards, comparison table, and plan status. - Show the days remaining in a live trial instead of only the end date. - Restrict denial reasons to the fixed vocabulary before logging or returning them. - Cover the in-product sync-key flow, the trial runway, and the included benefit with Python and browser tests. Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
Bring in the updated Python base image from #314; no source conflicts. Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
… change The included-services contract, entitlement validation, and dashboard copy change four checked-in producer files. Re-record their hashes, recompute the suite digest and artifact SHA, and repin the README, benchmark guide, tests, and both SVG/PNG provenance pairs. Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
Coding-Dev-Tools
force-pushed
the
main
branch
2 times, most recently
from
November 4, 2026 06:12
3d330e8 to
8ef46b6
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Completes the paid-plans entitlement and recovery work on top of the closed #312 branch:
0600), shown once, never re-readable through the API, and never overrides an operator-provisionedENGRAPHIS_SYNC_E2EE_KEY. Rotation stays explicit because data synced under the old key is unreadable until every device switches.cloud_unconfiguredand consent errors stay code-only.offline-fixtures-paid-plans-20261104.json, with the suite digest, README, benchmark guide, tests, and SVG/PNG provenance repinned.Verification
pytest tests/test_dashboard_v2.py tests/test_sync_key_management.py tests/test_managed_denial_metadata.py tests/test_v2_service_binding.py -q— 155 passed, 1 skipped.pytest tests/test_sync_dashboard.py tests/test_cloud_features.py tests/test_managed_processing_policy.py -q— 88 passed.pytest tests/test_benchmark_evidence.py -q— passed.ruff check .— clean.main(6c75758a) into the branch.This supersedes closed PR #312. The offline test-isolation fix is intentionally left to PR #313.
Agent: commandcode