feat: expand account-native ChatGPT coverage for v0.0.12 - #30
feat: expand account-native ChatGPT coverage for v0.0.12#30robotlearning123 wants to merge 93 commits into
Conversation
|
Warning Review limit reached
Next review available in: 40 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (17)
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds the gpt2agent 0.0.12 account-native release surface, including new discovery tools and static resources, hardened backend/SSE handling, loopback-only transport, bounded projections, capability reporting, package validation, public-surface monitoring, and release provenance gates. ChangesAccount-native 0.0.12 release
Estimated code review effort: 5 (Critical) | ~120 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 5
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@docs/superpowers/reviews/2026-07-10-account-native-feature-coverage-cross-model-review.md`:
- Line 186: Update the prose in the review document: change the compound
modifier at line 186 to “network-, backend-, and streaming-latency-dominated,”
and revise the wording at line 196 to “run outside hosted CI.”
- Around line 126-128: GPT2AGENT_RAW_DUMP remains an active dump path,
contradicting the migration claim. Remove or disable the runtime dump behavior
in the SSE implementation, update the streaming audit tests to verify
fail-closed behavior rather than writing records, and retain the variable only
in permitted history, migration, design, or negative-test references;
alternatively, revise the documentation and release criteria to explicitly
reflect the remaining opt-in behavior.
In `@docs/superpowers/specs/2026-07-10-account-native-feature-coverage-design.md`:
- Around line 286-309: The Sites probing logic must not follow up after every
unknown result. In the sites capability probe, issue the
`/backend-api/websites?limit=1` request only when `/backend-api/websites/access`
returns a valid response with explicit access `true` or absent/unknown
entitlement; preserve timeout, 429, 5xx, 401, 403, malformed, and other typed
failures without a second request, including their cooldown behavior.
- Around line 399-407: Update the resolver’s public bootstrap/manifest metadata
fetch path to use a dedicated anonymous client with credentials and cookies
disabled. Enforce a fixed approved-host allowlist and reject redirects rather
than following them, ensuring authenticated backend session tokens cannot reach
public endpoints.
- Around line 166-168: The loopback HTTP path remains unauthenticated for local
processes. Update the HTTP serving design to require a per-instance local
credential on every request, including clients without an Origin, and define its
secure generation, storage, and validation; alternatively specify that HTTP
stays disabled until transport authentication is implemented. Update the
loopback bind and Origin-validation requirements accordingly.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 2639acb2-1a7a-4c4a-aa50-9b95af3aeb04
📒 Files selected for processing (2)
docs/superpowers/reviews/2026-07-10-account-native-feature-coverage-cross-model-review.mddocs/superpowers/specs/2026-07-10-account-native-feature-coverage-design.md
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8111b3485f
ℹ️ 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".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2d230969d0
ℹ️ 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".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Actionable comments posted: 9
🧹 Nitpick comments (5)
gpt2agent/sse.py (1)
1389-1424: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winDuplicate sentinel/header-acquisition boilerplate across 5 methods.
stream(),image_gen(),tool_call(),deep_research(), anddeep_research_heavy()each repeat the same Accept/Content-Type +SentinelGate(...).get_tokens(...)+ 3 conditionalOpenai-Sentinel-*-Tokenheader block. Extracting this into one helper would remove ~40 duplicated lines and centralize any future change to the sentinel header contract.♻️ Suggested helper
async def _sentinel_headers(self, base_headers: Mapping[str, str]) -> dict[str, str]: headers = dict(base_headers) headers["Accept"] = "text/event-stream" headers["Content-Type"] = "application/json" sentinel = await SentinelGate(self._backend).get_tokens(headers) headers["Openai-Sentinel-Chat-Requirements-Token"] = sentinel["chat-requirements"] if sentinel.get("proof"): headers["Openai-Sentinel-Proof-Token"] = sentinel["proof"] if sentinel.get("turnstile"): headers["Openai-Sentinel-Turnstile-Token"] = sentinel["turnstile"] return headersEach call site then becomes
headers = await self._sentinel_headers(operation_headers).Also applies to: 1897-1932, 2238-2248, 2472-2490, 2826-2836
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@gpt2agent/sse.py` around lines 1389 - 1424, Extract the repeated SSE and sentinel-token header setup into a shared async helper such as `_sentinel_headers`, preserving the existing header values and conditional token handling. Update `stream`, `image_gen`, `tool_call`, `deep_research`, and `deep_research_heavy` to call this helper with their base headers, removing the duplicated boilerplate while retaining each method’s existing behavior.gpt2agent/tools/automations.py (1)
22-47: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win
next_run_timesinput array isn't length-bounded before iteration.
normalize_scheduled_pagerejects payloads with more than 100 top-level items before iterating, but_nullable_next_run_timeshas no equivalent guard on the incomingvaluelist — it only truncates the output to 100 after fully scanning whatever size array the backend sent. A backend response with an extremely largenext_run_timesarray would still be fully iterated (isinstance/length checks per entry) before truncation kicks in.🔧 Proposed fix
def _nullable_next_run_times(value: Any) -> list[str] | None: if value is None: return None if not isinstance(value, list): raise BackendContractError( "automations", "next_run_times must be an array or null" ) + if len(value) > 1_000: + raise BackendContractError("automations", "next_run_times exceeds 1000 items") result: list[str] = []🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@gpt2agent/tools/automations.py` around lines 22 - 47, The _nullable_next_run_times function must reject or stop processing an input list larger than 100 before iterating through its entries. Add an explicit top-level length check immediately after confirming value is a list, matching normalize_scheduled_page’s bounded-array behavior, while preserving the existing per-entry filtering and output cap.gpt2agent/server.py (2)
330-344: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick winDrop
httpsfromallowed_originssince the transport is plain HTTP.
_transport_security_settings()allowlists bothhttp://andhttps://Origins for loopback hosts, but this server only ever binds plain HTTP (no TLS termination anywhere in this file). Includinghttpswidens the DNS-rebinding-protection allowlist without any corresponding legitimate origin, slightly loosening a control whose whole purpose here is to narrow accepted Origins to exactly what this server can produce.🔒 Proposed fix
allowed_origins = [ value - for scheme in ("http", "https") + for scheme in ("http",) for host in host_names for value in (f"{scheme}://{host}", f"{scheme}://{host}:*") ]🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@gpt2agent/server.py` around lines 330 - 344, Remove the https scheme from allowed_origins in _transport_security_settings(), generating entries only for http:// loopback hosts while preserving the existing host and port variants.
659-682: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winDuplicated arg definitions between
run_pand the bare top-level parser.
--config/--port/--host/--stdio/--httpare defined twice (once onrun_p, once onparser) to support bothgpt2agent run --httpand legacygpt2agent --http. Functionally fine today, but the duplication invites drift if one definition is updated without the other.♻️ Sketch: shared helper to keep both parsers in sync
+def _add_run_transport_args(target) -> None: + target.add_argument("--config", type=Path) + target.add_argument("--port", type=int) + target.add_argument("--host") + group = target.add_mutually_exclusive_group() + group.add_argument("--stdio", action="store_true") + group.add_argument("--http", action="store_true") + run_p = sub.add_parser("run", help="Start the MCP server") - run_p.add_argument("--config", type=Path, help="Path to config.toml") - run_p.add_argument("--port", type=int) - run_p.add_argument("--host") - run_transport = run_p.add_mutually_exclusive_group() - run_transport.add_argument("--stdio", ...) - run_transport.add_argument("--http", ...) + _add_run_transport_args(run_p) ... - parser.add_argument("--config", type=Path) - parser.add_argument("--port", type=int) - parser.add_argument("--host") - bare_transport = parser.add_mutually_exclusive_group() - bare_transport.add_argument("--stdio", action="store_true") - bare_transport.add_argument("--http", action="store_true") + _add_run_transport_args(parser)🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@gpt2agent/server.py` around lines 659 - 682, Deduplicate the transport and server option definitions used by the `run_p` subparser and the top-level `parser`. Introduce a shared helper that adds `--config`, `--port`, `--host`, `--stdio`, and `--http` to a supplied parser, including the mutually exclusive transport group and matching help text, then invoke it for both parsers while preserving the existing CLI behavior..github/workflows/ci.yml (1)
40-57: 🔒 Security & Privacy | 🔵 Trivial | 💤 Low valueSet
persist-credentials: falseon checkout steps.zizmor flags that the new checkout actions at lines 44, 139, and 180 do not set
persist-credentials: false, leaving the GitHub token available in the git config for subsequent steps. This is a pre-existing pattern (existing checkout steps also omit it), but addingpersist-credentials: falseis a low-cost security best practice that limits token exposure in CI jobs that only run tests, audits, and builds.🔒️ Suggested fix for all checkout steps
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + persist-credentials: falseAlso applies to: 127-175, 176-205, 206-228
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/ci.yml around lines 40 - 57, Add persist-credentials: false to every actions/checkout step in the workflow, including the checkout steps used by dependency-audit and the other jobs referenced by the comment. Keep the existing pinned action versions and checkout behavior unchanged.Source: Linters/SAST tools
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/migration-0.0.12.md`:
- Around line 179-187: The migration workflow must bind account-tested artifacts
to the published artifacts instead of relying only on local receipt hashes.
Update the release process described around the hosted release workflow and
local receipt so it either enforces reproducible equality between locally tested
and independently built wheel/sdist hashes, or transfers and tests the exact
artifacts that the release workflow publishes, with verification occurring
before PyPI publication and GitHub Release creation.
- Around line 95-99: Update the migration documentation paragraph describing
buffered regular responses and Deep Research progress to state that provisional
text may be revoked by a late visibility patch before publication, while
buffering prevents it from being published prematurely; retain the surrounding
behavior details and references to the final terminal state.
In `@gpt2agent/install.py`:
- Around line 716-729: Validate the transport value before invoking any
installer, not only when it is "http". In the installation entry point
surrounding the transport preflight and target dispatch, reject every
unsupported transport (such as "bogus") with an error and return before
modifying configuration; preserve the existing mixed-target restriction for HTTP
and ensure validation applies consistently to all detected targets.
In `@gpt2agent/tools/automations.py`:
- Around line 81-96: Update the register function in the automations tool module
to accept the mandated optional conv parameter: use the signature register(mcp,
client: BackendClient, conv=None) while preserving the existing tool
registration behavior.
In `@gpt2agent/tools/images.py`:
- Around line 106-117: Update the download-host validation in the URL
normalization logic to reject non-canonical numeric or mixed-radix host forms
such as hexadecimal or abbreviated IPv4 representations, including values that
resolve to loopback. Add a dedicated validation helper or extend the existing
checks near `_invalid_download_url()` and apply it before returning the URL,
while preserving valid canonical hostnames and dotted-decimal IP handling.
In `@gpt2agent/tools/sites.py`:
- Around line 97-107: Update the register function in sites.py to accept the
optional conv=None parameter, matching the required signature register(mcp,
client: BackendClient, conv=None); leave the sites_access tool behavior
unchanged.
In `@scripts/verify_account_receipt.py`:
- Around line 1631-1636: Require the receipt output to be outside both the
checkout and the candidate distribution directory: update the validation around
_outside_checkout in the receipt gate to reject output paths nested under dist,
including when dist does not yet exist. Add a regression test covering an output
such as dist/"account-receipt.json" and assert the gate rejects it.
In `@scripts/verify_main_ci.py`:
- Around line 94-110: Update the retry handling around _fetch_runs so
urllib.error.HTTPError is caught before the broader URLError/OSError branch.
Immediately re-raise permanent HTTP status codes 401, 403, and 404 with their
response details, while retaining retries for transient network failures and
other retryable HTTP errors; apply the same distinction to the handling
referenced around lines 132-149.
- Around line 50-56: Update _run_order so the workflow run id from run["id"] is
the primary sort key, with run_attempt used only as a secondary tie-breaker if
needed; do not let retry count determine ordering across distinct runs, while
preserving validation and fallback handling for invalid values.
---
Nitpick comments:
In @.github/workflows/ci.yml:
- Around line 40-57: Add persist-credentials: false to every actions/checkout
step in the workflow, including the checkout steps used by dependency-audit and
the other jobs referenced by the comment. Keep the existing pinned action
versions and checkout behavior unchanged.
In `@gpt2agent/server.py`:
- Around line 330-344: Remove the https scheme from allowed_origins in
_transport_security_settings(), generating entries only for http:// loopback
hosts while preserving the existing host and port variants.
- Around line 659-682: Deduplicate the transport and server option definitions
used by the `run_p` subparser and the top-level `parser`. Introduce a shared
helper that adds `--config`, `--port`, `--host`, `--stdio`, and `--http` to a
supplied parser, including the mutually exclusive transport group and matching
help text, then invoke it for both parsers while preserving the existing CLI
behavior.
In `@gpt2agent/sse.py`:
- Around line 1389-1424: Extract the repeated SSE and sentinel-token header
setup into a shared async helper such as `_sentinel_headers`, preserving the
existing header values and conditional token handling. Update `stream`,
`image_gen`, `tool_call`, `deep_research`, and `deep_research_heavy` to call
this helper with their base headers, removing the duplicated boilerplate while
retaining each method’s existing behavior.
In `@gpt2agent/tools/automations.py`:
- Around line 22-47: The _nullable_next_run_times function must reject or stop
processing an input list larger than 100 before iterating through its entries.
Add an explicit top-level length check immediately after confirming value is a
list, matching normalize_scheduled_page’s bounded-array behavior, while
preserving the existing per-entry filtering and output cap.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 05940108-2901-46b5-b007-574008bccc12
📒 Files selected for processing (116)
.claude-plugin/marketplace.json.claude-plugin/plugin.json.github/workflows/ci.yml.github/workflows/public-surface-radar.yml.github/workflows/release.ymlCHANGELOG.mdCLAUDE.mdCONTRIBUTING.mdMANIFEST.inREADME.mdSECURITY.mdconfig.example.tomldocs/README.mddocs/clients.mddocs/configuration.mddocs/faq.mddocs/how-it-works.mddocs/migration-0.0.12.mddocs/quickstart.mddocs/superpowers/plans/2026-07-10-v0.0.12-account-native-release.mddocs/superpowers/reviews/2026-07-10-account-native-feature-coverage-cross-model-review.mddocs/superpowers/specs/2026-07-10-account-native-feature-coverage-design.mddocs/troubleshooting.mdgpt2agent/__init__.pygpt2agent/backend.pygpt2agent/capabilities.pygpt2agent/errors.pygpt2agent/install.pygpt2agent/message_visibility.pygpt2agent/model_catalog.pygpt2agent/request_policy.pygpt2agent/resources.pygpt2agent/resources/feature-coverage.v1.jsongpt2agent/resources/update-evidence.v1.jsongpt2agent/sentinel.pygpt2agent/server.pygpt2agent/setup.pygpt2agent/skills/deep-research/SKILL.mdgpt2agent/skills/deep-research/bin/deep_research.pygpt2agent/skills/gpt2agent/SKILL.mdgpt2agent/skills/gpt2agent/tools-reference.mdgpt2agent/sse.pygpt2agent/tool_contracts.pygpt2agent/tool_manifest.pygpt2agent/tools/__init__.pygpt2agent/tools/_errors.pygpt2agent/tools/_ids.pygpt2agent/tools/_redact.pygpt2agent/tools/_validation.pygpt2agent/tools/account.pygpt2agent/tools/apps.pygpt2agent/tools/automations.pygpt2agent/tools/capabilities.pygpt2agent/tools/codex.pygpt2agent/tools/conversations.pygpt2agent/tools/gpts.pygpt2agent/tools/images.pygpt2agent/tools/instructions.pygpt2agent/tools/memory.pygpt2agent/tools/plugins.pygpt2agent/tools/sites.pygpt2agent/tools/tools_features.pygpt2agent/tools/work.pygpt2agent/tools/writes.pypyproject.tomlrequirements.txtscripts/audit_release_governance.pyscripts/package_smoke.shscripts/public_surface_radar.pyscripts/release_evidence.pyscripts/verify_account_receipt.pyscripts/verify_main_ci.pyscripts/verify_pypi_artifacts.pyscripts/verify_release.pyserver.jsontests/fixtures/release_governance_pass.jsontests/test_account_catalogs.pytests/test_account_receipt.pytests/test_adapter_output_hardening.pytests/test_audit_2026_06_26.pytests/test_audit_2026_07_09_auth.pytests/test_audit_2026_07_09_streaming.pytests/test_audit_2026_07_09_tools.pytests/test_backend_contracts.pytests/test_backend_token.pytests/test_capabilities.pytests/test_deep_research_persistence.pytests/test_dr_clarification.pytests/test_generate_image_projection.pytests/test_heavy_dr_parser.pytests/test_image_download_url_projection.pytests/test_image_generation_provenance.pytests/test_image_turn_binding_red.pytests/test_install.pytests/test_model_catalog.pytests/test_none_guards.pytests/test_package_resources.pytests/test_parser_reviewer_regressions.pytests/test_plugins.pytests/test_prelanding_blockers.pytests/test_public_surface_radar.pytests/test_release_governance.pytests/test_release_metadata.pytests/test_request_policy.pytests/test_resources.pytests/test_secret_redaction.pytests/test_security_hardening.pytests/test_sentinel_contract_validation.pytests/test_sites.pytests/test_sse.pytests/test_sse_parser.pytests/test_tool_activity_receipt.pytests/test_tool_contracts.pytests/test_tools.pytests/test_v1_boundary_pointer_red.pytests/test_widget_author_lifecycle_red.py
✅ Files skipped from review due to trivial changes (10)
- gpt2agent/resources/update-evidence.v1.json
- gpt2agent/tools/capabilities.py
- gpt2agent/init.py
- .claude-plugin/marketplace.json
- .claude-plugin/plugin.json
- tests/fixtures/release_governance_pass.json
- config.example.toml
- server.json
- CHANGELOG.md
- docs/superpowers/reviews/2026-07-10-account-native-feature-coverage-cross-model-review.md
There was a problem hiding this comment.
Actionable comments posted: 6
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
gpt2agent/server.py (1)
635-656: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick winPrevent subparser defaults from erasing a leading
--http.The parent and
runparser reusehttp,stdio,config,port, andhostdestinations. Thusgpt2agent --http runcan lose the parent value, bypass the HTTP rejection, and construct the server. Python documents that a subparser using the same destination does not retain the parent value. Use distinct destinations ordefault=argparse.SUPPRESS, and test both flag orderings. (docs.python.org)Proposed fix
-run_p.add_argument("--config", type=Path, help="Path to config.toml") -run_p.add_argument("--port", type=int) -run_p.add_argument("--host") +run_p.add_argument("--config", type=Path, default=argparse.SUPPRESS, + help="Path to config.toml") +run_p.add_argument("--port", type=int, default=argparse.SUPPRESS) +run_p.add_argument("--host", default=argparse.SUPPRESS) run_transport.add_argument( "--stdio", action="store_true", + default=argparse.SUPPRESS, help="stdio transport (default; preferred for local MCP clients)", ) run_transport.add_argument( "--http", action="store_true", + default=argparse.SUPPRESS, help="deprecated compatibility flag; HTTP is disabled in 0.0.12", )As per coding guidelines, “the legacy HTTP flag must fail before server construction.”
Also applies to: 678-683
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@gpt2agent/server.py` around lines 635 - 656, Prevent the `run` subparser arguments from overwriting parent parser values in the argument parsing setup around `run_p` and `parser`. Use distinct destinations or `default=argparse.SUPPRESS` for shared `http`, `stdio`, `config`, `port`, and `host` options, preserving the leading `--http` value regardless of flag order. Ensure both `gpt2agent --http run` and `gpt2agent run --http` reject the legacy HTTP flag before server construction.
🧹 Nitpick comments (1)
scripts/verify_main_ci.py (1)
424-425: 🚀 Performance & Scalability | 🔵 Trivial | 💤 Low valueRedundant re-computation of the selected run.
select_exact_main_run(payload, args.commit)internally calls_selected_exact_main_run, and then line 425 calls it again directly. Both calls apply the same filter over the same (unpaginated, small) payload, so this is not a correctness issue — just avoidable duplicate work. Consider havingselect_exact_main_runoptionally return the selected run dict (or exposing it via an out-param) to avoid the second pass.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@scripts/verify_main_ci.py` around lines 424 - 425, Update select_exact_main_run and its caller to return or otherwise expose the already selected run record, then reuse that result instead of calling _selected_exact_main_run again in the surrounding flow. Preserve the existing state and run_id behavior while eliminating the duplicate filtering pass.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/superpowers/plans/2026-07-10-v0.0.12-account-native-release.md`:
- Line 5: Remove the blank line within the historical note’s blockquote in the
release plan, keeping all consecutive quoted lines contiguous to satisfy the
Markdown linter.
In `@gpt2agent/_secure_file.py`:
- Around line 236-244: Update the path validation before _open_private_directory
in the private JSON write flow to reject paths whose parent is the working
directory or filesystem root, including bare filenames such as auth.json and
root-based paths such as /auth.json. Preserve valid nested-directory paths and
the existing private JSON write behavior.
In `@scripts/create_release_tag.sh`:
- Around line 81-82: Strengthen validation of IRREVERSIBLE_STATE_FILE at every
referenced validation site, including the paths also noted in the comment, by
validating its parent directory before creating or relying on the marker.
Require the parent and its ancestor directories to have protected ownership and
permissions, rejecting group/world-writable or otherwise unsafe ancestry.
Preserve the existing absolute-path, existence, and symlink checks.
In `@scripts/hash_runtime_tree.sh`:
- Around line 55-66: Update the ancestor permission validation loop around
check_owner and the mode/owner checks so the sticky-bit exception applies only
to ancestors above $ROOT, not to the runtime root itself. Require $ROOT to be
non-group- and non-world-writable while preserving the existing exception for
eligible parent directories.
In `@scripts/release_evidence.py`:
- Around line 157-195: Update _account_handoff_record and the corresponding
account artifact handling at the other affected call sites to invoke
account_artifact_set only once, validate the returned snapshot against
account_artifact_set_sha256, and derive both account_handoff and artifacts from
that same validated result. Ensure verify_account_artifact_handoff reuses the
snapshot or its derived data rather than rescanning dist, preventing file
changes between verification and manifest generation.
In `@scripts/run_account_release.sh`:
- Around line 213-223: Update run_python_operator so GH_TOKEN is assigned and
exported inside a subshell rather than passed as a literal argument to
/usr/bin/env. Preserve the clean environment and fixed PATH, LANG, and LC_ALL
values while ensuring the token is available to the Python operator only through
its environment and never appears in process arguments. This change must cover
both callers, audit_release_governance.py and verify_main_ci.py, through the
shared helper.
---
Outside diff comments:
In `@gpt2agent/server.py`:
- Around line 635-656: Prevent the `run` subparser arguments from overwriting
parent parser values in the argument parsing setup around `run_p` and `parser`.
Use distinct destinations or `default=argparse.SUPPRESS` for shared `http`,
`stdio`, `config`, `port`, and `host` options, preserving the leading `--http`
value regardless of flag order. Ensure both `gpt2agent --http run` and
`gpt2agent run --http` reject the legacy HTTP flag before server construction.
---
Nitpick comments:
In `@scripts/verify_main_ci.py`:
- Around line 424-425: Update select_exact_main_run and its caller to return or
otherwise expose the already selected run record, then reuse that result instead
of calling _selected_exact_main_run again in the surrounding flow. Preserve the
existing state and run_id behavior while eliminating the duplicate filtering
pass.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 5085c541-0cf4-4ca4-ae79-e2fcf2f60cb5
📒 Files selected for processing (105)
.coderabbit.yaml.github/actions/publish-exact-github-release/action.yml.github/actions/publish-exact-github-release/publish.py.github/dependabot.yml.github/workflows/ci.yml.github/workflows/public-surface-radar.yml.github/workflows/release.ymlCHANGELOG.mdCLAUDE.mdCONTRIBUTING.mdREADME.mdSECURITY.mdconfig.example.tomldocs/clients.mddocs/configuration.mddocs/faq.mddocs/how-it-works.mddocs/migration-0.0.12.mddocs/superpowers/plans/2026-07-10-v0.0.12-account-native-release.mddocs/superpowers/reviews/2026-07-10-account-native-feature-coverage-cross-model-review.mddocs/superpowers/specs/2026-07-10-account-native-feature-coverage-design.mddocs/troubleshooting.mdgpt2agent/_account_transport_env.pygpt2agent/_secure_file.pygpt2agent/auth.pygpt2agent/backend.pygpt2agent/capabilities.pygpt2agent/install.pygpt2agent/resources/feature-coverage.v1.jsongpt2agent/sentinel.pygpt2agent/server.pygpt2agent/setup.pygpt2agent/skills/deep-research/bin/deep_research.pygpt2agent/skills/gpt2agent/SKILL.mdgpt2agent/skills/gpt2agent/tools-reference.mdgpt2agent/sse.pygpt2agent/tools/automations.pygpt2agent/tools/conversations.pygpt2agent/tools/images.pygpt2agent/tools/plugins.pygpt2agent/tools/sites.pyinstall.shpyproject.tomlrequirements-account-gate.inrequirements-account-gate.txtrequirements-build.inrequirements-build.txtrequirements.txtscripts/audit_release_governance.pyscripts/audit_retained_receipt.shscripts/bootstrap_account_gate.shscripts/create_release_tag.shscripts/hash_runtime_tree.shscripts/install_account_gate_runtime.shscripts/normalize_sdist.pyscripts/package_smoke.shscripts/release_evidence.pyscripts/release_tag_metadata.pyscripts/run_account_release.shscripts/verify_account_receipt.pyscripts/verify_github_release.pyscripts/verify_installed_adapter_corpus.pyscripts/verify_main_ci.pyscripts/verify_release_tools.pyscripts/verify_remote_action_pin.pytests/fixtures/installed_adapter_corpus.v1.jsontests/fixtures/release_governance_pass.jsontests/test_account_catalogs.pytests/test_account_gate_bootstrap.pytests/test_account_gate_runtime_installer.pytests/test_account_receipt.pytests/test_account_release_operator.pytests/test_audit_2026_06_26.pytests/test_audit_2026_07_09_package.pytests/test_backend_contracts.pytests/test_backend_token.pytests/test_backend_tools.pytests/test_build_lock.pytests/test_capabilities.pytests/test_deep_research.pytests/test_deep_research_persistence.pytests/test_exact_github_release_action.pytests/test_final_release_tag_binding.pytests/test_github_release_integrity.pytests/test_image_download_url_projection.pytests/test_install.pytests/test_installed_adapter_corpus.pytests/test_normalize_sdist.pytests/test_parser_reviewer_regressions.pytests/test_plugins.pytests/test_release_governance.pytests/test_release_metadata.pytests/test_release_tag_metadata.pytests/test_release_tag_operator.pytests/test_release_tag_prerequisites.pytests/test_resources.pytests/test_retained_receipt_audit_operator.pytests/test_runtime_tree_hash.pytests/test_secure_local_writes.pytests/test_security_hardening.pytests/test_sites.pytests/test_sse.pytests/test_tools.pytests/test_trusted_account_gate.pytests/test_writes.py
✅ Files skipped from review due to trivial changes (13)
- .coderabbit.yaml
- requirements-build.in
- tests/fixtures/installed_adapter_corpus.v1.json
- requirements-account-gate.txt
- config.example.toml
- gpt2agent/skills/gpt2agent/SKILL.md
- requirements-build.txt
- docs/faq.md
- SECURITY.md
- CHANGELOG.md
- CLAUDE.md
- docs/troubleshooting.md
- docs/superpowers/specs/2026-07-10-account-native-feature-coverage-design.md
🚧 Files skipped from review as they are similar to previous changes (20)
- requirements.txt
- gpt2agent/tools/automations.py
- tests/test_sites.py
- CONTRIBUTING.md
- gpt2agent/tools/sites.py
- .github/workflows/public-surface-radar.yml
- gpt2agent/resources/feature-coverage.v1.json
- .github/workflows/ci.yml
- gpt2agent/tools/conversations.py
- gpt2agent/sentinel.py
- tests/test_audit_2026_06_26.py
- tests/test_backend_token.py
- gpt2agent/skills/deep-research/bin/deep_research.py
- gpt2agent/backend.py
- gpt2agent/tools/plugins.py
- docs/superpowers/reviews/2026-07-10-account-native-feature-coverage-cross-model-review.md
- gpt2agent/tools/images.py
- gpt2agent/skills/gpt2agent/tools-reference.md
- tests/test_account_catalogs.py
- gpt2agent/sse.py
|
@coderabbitai full review |
✅ Action performedFull review finished. Your plan includes PR reviews subject to rate limits. More reviews will be available in 14 minutes. |
|
@coderabbitai approve |
✅ Action performedComments resolved. Approval is disabled; enable |
|
@coderabbitai review --type committed Please review only the four commits from |
|
@codex review Please review exact final candidate |
|
✅ Action performedReview finished.
|
|
Codex Review: Didn't find any major issues. Another round soon, please! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
|
@coderabbitai approve The incremental review of exact head |
|
(๑˃̵ᴗ˂̵)و ✅ Action performedComments resolved. Approval is disabled; enable |
|
Release gate status for exact head
No admin/ruleset bypass was used. No merge, tag, GitHub Release, or PyPI upload was performed. |
What & why
This is the v0.0.12 account-native foundation. It expands the bounded ChatGPT account surface from 25 to 32 MCP tools and adds two deterministic MCP resources, while hardening authentication, private-backend projections, SSE parsing, visibility filtering, output redaction, local transport, packaging, and release provenance.
It also adds multi-platform CI, dependency and MCP-compatibility checks, package/install smoke tests, public-surface drift detection, private account receipts, and release-governance gates. Voice/audio is deliberately excluded and remains a separate v0.0.13+ feature.
Exact candidate:
4e6e7cc71ba6aaaf9d940cfab50095dfa265e33dCandidate tree:
4d1690f4bacdd110b584bf183809deaeb523e8efType
Exact-candidate local verification
1638 passed, 10 skipped.1638 passed, 10 skippedon each interpreter.1638 passed, 10 skippedat each boundary.pip check, packaged resources, and 18 packaged-sdist tests: PASS.Retained artifact hashes:
c339cea..4e6e7cc):3222bc8eed7606358658878742e28f8bfb118dd54d2b0aa3e05f41426db98212539e84751014494de934583e78c2428ff6e6b97a289c520652e21629fca5ce13847f54104ec4734342a8637889bdde668c9c6060bf0c39bdd75f40a989bdc61e34be72142b8d99b110d5449f332492c670a87361fa63f945f450c6249ac35f6eSame-candidate cross-model verification
All reviewers were bound to commit
4e6e7cc71ba6aaaf9d940cfab50095dfa265e33d, tree4d1690f4bacdd110b584bf183809deaeb523e8ef, rangec339cea..4e6e7cc, and the same patch hash above:us.anthropic.claude-opus-4-6-v1): PASS, no P0-P2. One non-blocking P3 style note.Auto; no underlying model identity is inferred.These are static reviews and do not claim test execution. They supplement, rather than replace, the exact-SHA runtime gates.
Hosted exact-head verification
GitHub Actions run 29168606013 is bound to exact head
4e6e7ccand completed successfully:Required checksall passed.Checklist
APPROVEDreview on exact headAPPROVEDreview on exact headRemaining merge and release gates
This PR remains intentionally blocked.
Approval skipped: request-changes workflow disabled. The PR head contains.coderabbit.yamlwithreviews.request_changes_workflow: true, while the default branch does not yet contain that configuration; a success status is not an approval.This PR does not start Voice, export ChatGPT Voice through MCP, create a release tag, or publish a package.
Summary by CodeRabbit
New Features
chat/agentmodel-aware validation (optional thinking-effort).Security & Reliability
GPT2AGENT_MAX_IN_FLIGHT), and stricter fail-closed contract validation + secret redaction.Documentation
CI/Release