Repository navigation
gpt-6.1-sol, security and reliability fixes, working deploys - #3
Merged
Merged
Conversation
- http(s)-only URL schema for every link field - View statuses carry investigationId; image URLs travel only as occurrences; per-platform external ids; Wikipedia URL identity as a PAGE_ID | TITLE union - Typed content-script/background message maps; drop the protocol `v` field - Public output schemas: provenance-discriminated origin, typed provider - Drop the InvestigationModel enum (model is recorded as the provider id) - Normalization: <br>/<hr> separate words; Wikipedia boilerplate excluded by structural markers and localized section titles Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Investigator - gpt-6.1-sol in one request config (web_search with sources, verified reasoning summaries); OPENAI_MODEL_ID removed - Investigation.model is the model that ran, recorded at completion - One audit record per provider request (fact-check rounds, validations); typed SDK responses; incomplete responses fail without retries - One request-shaped probe for worker startup and user-key validation; live smoke script (pnpm smoke:openai) Security and correctness - Post URL/author from server-verified data; client URLs validated - User OpenAI keys verified before use, never take over server-paid runs, and are dropped (not FAILED) when OpenAI rejects them - SSRF-safe fetching (validated, pinned addresses) for images and fetch_url - FAILED is terminal; attempt numbers never reset; audit is insert-only - recordViewAndGetStatus reports INVESTIGATING/FAILED with investigationId - Interim claims carry forward from the latest finished investigation, limited to claims whose text is still in the version Queue - Selector admits at most SELECTOR_DAILY_BUDGET investigations per UTC day - Lease ⇔ PROCESSING enforced by deferred triggers; one recovery path; lease loss aborts the run; update lineage shared with the selector Migrations 0024 (model + per-request audit) and 0025 (admission origin, lease invariant, input snapshot). Removes the unused attestation HMAC and public tRPC router. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Resume polling for posts investigated by others (INVESTIGATING + id) - Idempotent injection with a side-effect-free PING; distinct GET_VISIBILITY and background-driven LOCATION_CHANGED; unique session ids - Error replies delivered; only real context invalidation resets silently - One text index for adapters, claim mapping and mutation baseline; highlight marks never leave the page - Claim markdown renders no images; typed message maps end to end - Settings load as a union; an invalid API URL is an error, not a fallback - Live-site fixes: logged-out X, Substack isAccessibleForFree paywall, fr.wikipedia cachelinks, Wikipedia video detection, LessWrong /w/ tags; Substack subscribe/share/embed chrome excluded - Remove the unused attestation secret; http://*/* optional; Firefox 128+ - e2e suite runs headless (Chromium new headless, no xvfb) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Parse every GraphQL response with the shared public schemas - SvelteKit error()/+error.svelte (404/400/502) instead of errors as data; API_BASE_URL checked at startup - Only http(s) links; no images in reasoning markdown; Content Security Policy - Playwright runs headless on the full Chromium build Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Deploy job assumes AWS_DEPLOY_ROLE_ARN via GitHub OIDC, joins the tailnet (tag:ci) and builds its kubeconfig with `aws eks update-kubeconfig`; static AWS keys and KUBE_CONFIG_DATA are gone - src/aws/ci-iam/setup.sh bootstraps the role, its least-privilege policy and an EKS access entry (group openerrata-ci); src/kubernetes/ci-rbac binds the group and revokes the old ServiceAccount token - Managed RDS public access, ingress CIDRs and engine version are explicit config; bucket public-read policy removed, public access fully blocked; blob writer key status declared Active - Deploys serialized per stack without cancellation; pods wait for migrations; config checksums restart pods; non-root pods and images - Extension store publishing fails loudly on missing secrets; actions, Node and pnpm pinned Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- docker-compose: Postgres 17 (matches CI) and Versity S3 Gateway in place of the no-longer-pullable MinIO images - api/.env.example replaces the root example and boots the app as-is - packageManager pins pnpm; lockfile for the new frontend/api dependencies - SPEC, README, AGENTS and PRIVACY updated for all of the above Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Restores the shared package's function-coverage threshold (CI: 89% < 90%). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Switches investigations to gpt-6.1-sol, fixes the security and correctness bugs found in a full review, makes the extension work on the live sites again, and repairs the deploy pipeline (broken since March).
Commits are by package, so intermediate commits don't build on their own. The final tree passes typecheck, lint/knip/prettier, 680 unit, 99 integration, migration drift, build, extension e2e 21/21 and frontend e2e 13/13 (both headless). The API and frontend images run as non-root with both migrations. A live smoke test against gpt-6.1-sol passed:
pnpm --filter @openerrata/api smoke:openai.What changes
gpt-6.1-solis set in one request config,api/src/lib/investigators/openai-request-config.ts.Investigation.modelrecords the model that actually ran, written at completion. It used to be a hardcodedOPENAI_GPT_5.javascript:link injection on the public site.fetch_urlare SSRF-safe.SELECTOR_DAILY_BUDGETselector admissions per UTC day, matching SPEC; it was per 5-minute run.<br>now separates words.AWS_DEPLOY_ROLE_ARN), Tailscale (tag:ci) andaws eks update-kubeconfigreplace the static AWS keys andKUBE_CONFIG_DATA.10.0.0.0/16, over the existing VPC peering).Migrations
0024:Investigation.modelbecomes the recorded provider id, and the audit moves toInvestigationAttemptRequestrows. Existing audits become oneLEGACY_COMBINEDrequest each. It aborts if any COMPLETE investigation lacks exactly one SUCCEEDED attempt.0025: adds investigation admission origin/time, deferred lease-invariant triggers and input snapshot fields. It repairs non-https post URLs and drops unused columns.Already done outside the repo
openerrata-github-actions-deploy, its policy, and an EKS access entry mapping it to groupopenerrata-ci.AWS_DEPLOY_ROLE_ARNandPULUMI_MANAGED_DATABASE_{PUBLICLY_ACCESSIBLE=false, INGRESS_CIDRS=10.0.0.0/16, ENGINE_VERSION=17}. 17.9 is the current default minor, so this causes no restart.TS_OAUTH_CLIENT_IDandTS_AUDIENCEare set.Rollout
staging. This deploys staging and is the first test of the new deploy path.staging→mainand publish 0.4.0 at the same time. The API's minimum supported extension version becomes 0.4.0, and the new extension needs the new API.AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_REGIONandKUBE_CONFIG_DATAsecrets and theopenerrata-ciIAM user. The commands are in the README.Behavior changes
🤖 Generated with Claude Code