Skip to content

Move MetaCortex production credentials into Secret Manager - #11

Draft
chrishonson wants to merge 4 commits into
mainfrom
codex/card-23-secret-manager
Draft

Move MetaCortex production credentials into Secret Manager#11
chrishonson wants to merge 4 commits into
mainfrom
codex/card-23-secret-manager

Conversation

@chrishonson

@chrishonson chrishonson commented Sep 9, 2026

Copy link
Copy Markdown
Owner

Production exposed the admin token, Gemini key, and client-profile bundle in ordinary function environment variables. The function now binds all three through Secret Manager, and deployment preflight rejects plaintext secret entries in production dotenv files.

Storage migration is deployed as revision metacortexmcp-00028-pul. All ten MCP endpoints authenticated successfully, a read-only embedding search passed, and function metadata confirms all three secret references with no plaintext copies. Existing credential values were preserved. The requested scope is storage migration only; credential rotation and client reconfiguration are excluded. The operations report records completion and recovery constraints.

Validation: 82 tests, TypeScript build, deployment preflight, a synthetic plaintext rejection check, and production checks above. The original checkout's production dotenv secret entries were removed after verification. No token values are included in this PR.

claude and others added 4 commits August 14, 2026 01:35
Schema, Tier 0 normalizer, and Tier 1 worker prompt for the CI failure
recurrence study, plus the collector and the model-free analysis path.

Tier 0 is deterministic regex normalization + sha1 fingerprinting: free,
reproducible, and hashable, which an LLM label is not. Tiers 1/2 are only
ever asked about what Tier 0 leaves as a singleton.

Verified with known-answer fixtures (20/20 in test_pipeline.py): the
normalizer collapses one bug across differing paths, line numbers, and
float values while keeping distinct test files and distinct exit codes
apart; the chronological walk reproduces a known rate; both flake shapes
are detected; the ingest path handles annotation evidence with a
step-name fallback.

Two bugs found and fixed by that testing, both of which would have
corrupted the headline rate:
- a port rule fired on four-digit line numbers ahead of the line/col
  rule, shattering collapse across every large file
- the absolute-path rule mangled repo-relative annotation paths, which
  are identical on every runner and therefore signal

No recurrence rate is computed yet. This session cannot reach the Actions
API for either target repo (403 per-repository authorization; the one
reachable repo has zero CI failures), so collection stopped rather than
building the Tier 1 loop on an unmeasured Tier 0. See findings.md.

Stdlib only: no LangChain, DSPy, Celery, or Redis.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DJvuGv9fvnpNGXmJFp2HzQ
The README asked for a PAT with `public_repo`. That scope grants write to
every public repo the holder can see and buys this study nothing: both
targets are public and all three endpoints used here (actions/runs,
runs/{id}/jobs, check-runs/{id}/annotations) are public-readable without
any scope.

The token exists only to lift the rate limit from 60/hr unauthenticated
to 5,000/hr, which any valid token does regardless of scopes. So: a
classic PAT with zero scopes ticked, or a fine-grained PAT set to
"Public repositories (read-only)" -- noting a fine-grained token cannot
be scoped to a repo you do not own.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DJvuGv9fvnpNGXmJFp2HzQ
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.

3 participants