fix(sibling of core#3162): fail-CLOSED on readStoredModelSecret decrypt/read error #3166

Merged
agent-dev-b merged 3 commits from fix/read-stored-model-secret-fail-closed into main 2026-06-23 14:02:53 +00:00
Member

What

Sister fix to core#3162 (PR#3165). readStoredModelSecret had the same fail-open shape as readStoredProviderSecret: a transient decrypt/read error on an existing MODEL row collapsed into "" and was treated as "unset". The cost is different but equally silent — if the secret store later recovered and returned a clean ("", nil) on the NEXT provision, ensureConciergeModel would re-seed the platform default and silently overwrite the customer's model pick without any error surfaced.

The fix

readStoredModelSecret now returns (string, error) and distinguishes the three observed states (identical contract to readStoredProviderSecret after core#3162):

Return Meaning Caller action
(value, nil) secret stored + decrypted respect existing model (early-return)
("", nil) sql.ErrNoRows (genuine unset) safe to re-seed
("", err) any other Scan error OR DecryptVersioned error fail closed — log and return without seeding

ensureConciergeModel was updated to handle the new signature: on readErr != nil it logs and returns without seeding the platform default, so the next provision re-tries rather than losing the customer's pick.

Why this scope (one sibling, no further batching)

  • The two readStored*Secret helpers in platform_agent.go were the only places on this file path with the fail-open shape (verified by grep on internal/handlers/).
  • Closing them as a pair — readStoredProviderSecret (PR#3165, core#3162) + readStoredModelSecret (this PR) — fully closes the fail-open family on workspace-server. No further helpers on this path have the bug.
  • Per PM's "one item, don't batch more core" — this is the sibling PM explicitly greenlit as the next bounded staged-core item.

Tests (4 new)

  • TestEnsureConciergeModel_FailsClosedOnReadError/decrypt_error_on_existing_MODEL_row_fails_closed_(does_NOT_seed_default) — the primary regression: an unreadable existing MODEL row now fails closed (no default seed, no MOLECULE_MODEL env write).
  • …/db_scan_error_(non-ErrNoRows)_on_MODEL_fails_closed — connection-level errors also fail closed.
  • …/sql.ErrNoRows_(genuine_unset_MODEL)_proceeds_to_seed_(no_regression) — the fresh-boot seed path still fires.
  • …/existing_stored_MODEL_is_respected_on_successful_read_(no_regression) — customer-pick path still wins.

Full handler test suite passes (go test ./internal/handlers/ → ok 39.230s). go build ./... and go vet ./... clean.

Independence from the red #3164 deployment surface

Pure workspace-server handler fix. No concierge / MCP / heartbeat / identity-gate / platform-side touched. Safe to merge on the core-lane (will stage behind the CTO qa/security gate per PM's standing rule).

Pair

This PR + PR#3165 close the readStored*Secret fail-open family on workspace-server. After both merge, no other helper on this path has the bug (verified by grep on internal/handlers/).

Gate (per PM)

  • 2-genuine (CR2 + Researcher) — security-flagged
  • CI green — unit-tests + e2e for workspace-server
  • qa-review/security-review branch-protection gate (CTO-blocked) — PR will stage here per PM's expectation
  • target = main
## What Sister fix to core#3162 (PR#3165). `readStoredModelSecret` had the **same fail-open shape** as `readStoredProviderSecret`: a transient decrypt/read error on an existing MODEL row collapsed into `""` and was treated as "unset". The cost is different but equally silent — if the secret store later recovered and returned a clean `("", nil)` on the NEXT provision, `ensureConciergeModel` would re-seed the platform default and **silently overwrite the customer's model pick** without any error surfaced. ## The fix `readStoredModelSecret` now returns `(string, error)` and distinguishes the three observed states (identical contract to `readStoredProviderSecret` after core#3162): | Return | Meaning | Caller action | |---|---|---| | `(value, nil)` | secret stored + decrypted | respect existing model (early-return) | | `("", nil)` | `sql.ErrNoRows` (genuine unset) | safe to re-seed | | `("", err)` | any other Scan error OR `DecryptVersioned` error | **fail closed** — log and return without seeding | `ensureConciergeModel` was updated to handle the new signature: on `readErr != nil` it logs and returns without seeding the platform default, so the next provision re-tries rather than losing the customer's pick. ## Why this scope (one sibling, no further batching) - The two `readStored*Secret` helpers in `platform_agent.go` were the only places on this file path with the fail-open shape (verified by grep on `internal/handlers/`). - Closing them as a pair — `readStoredProviderSecret` (PR#3165, core#3162) + `readStoredModelSecret` (this PR) — fully closes the fail-open family on workspace-server. No further helpers on this path have the bug. - Per PM's "one item, don't batch more core" — this is the sibling PM explicitly greenlit as the next bounded staged-core item. ## Tests (4 new) - `TestEnsureConciergeModel_FailsClosedOnReadError/decrypt_error_on_existing_MODEL_row_fails_closed_(does_NOT_seed_default)` — the **primary regression**: an unreadable existing MODEL row now fails closed (no default seed, no `MOLECULE_MODEL` env write). - `…/db_scan_error_(non-ErrNoRows)_on_MODEL_fails_closed` — connection-level errors also fail closed. - `…/sql.ErrNoRows_(genuine_unset_MODEL)_proceeds_to_seed_(no_regression)` — the fresh-boot seed path still fires. - `…/existing_stored_MODEL_is_respected_on_successful_read_(no_regression)` — customer-pick path still wins. Full handler test suite passes (`go test ./internal/handlers/` → ok 39.230s). `go build ./...` and `go vet ./...` clean. ## Independence from the red #3164 deployment surface Pure workspace-server handler fix. No concierge / MCP / heartbeat / identity-gate / platform-side touched. Safe to merge on the core-lane (will stage behind the CTO qa/security gate per PM's standing rule). ## Pair This PR + PR#3165 close the `readStored*Secret` fail-open family on workspace-server. After both merge, no other helper on this path has the bug (verified by grep on `internal/handlers/`). ## Gate (per PM) - [ ] 2-genuine (CR2 + Researcher) — security-flagged - [ ] CI green — `unit-tests` + `e2e` for workspace-server - [ ] qa-review/security-review branch-protection gate (CTO-blocked) — PR will stage here per PM's expectation - [ ] target = main
agent-reviewer-cr2 approved these changes 2026-06-23 08:53:56 +00:00
Dismissed
agent-reviewer-cr2 left a comment
Member

APPROVE on ca5f543d26 (target=main).

Security review:

  • Correctness: readStoredModelSecret now distinguishes stored+decrypted, genuine sql.ErrNoRows, and scan/decrypt error. ensureConciergeModel fails closed on the error case by logging and returning before any platform default MODEL seed.
  • Robustness: sql.ErrNoRows still seeds the fresh/unset model path, and successful existing model reads are still respected.
  • Security: this closes the sibling fail-open shape where a transient MODEL secret read/decrypt failure could be treated as unset and silently overwrite the customer model pick.
  • Tests: decrypt-error fail-closed, DB scan-error fail-closed, ErrNoRows seed preserved, and existing-model respected are non-vacuous and align with #3165.

CI: required own-head gate CI/all-required is green; E2E API Smoke, Platform Go, Handlers/Harness observed green where reported. Known Staging-SaaS concierge/#3164 contexts are non-required/out-of-scope for this platform_agent.go fail-closed fix.

APPROVE on ca5f543d265c5ad64a9743ffdea5e4adf308ef81 (target=main). Security review: - Correctness: readStoredModelSecret now distinguishes stored+decrypted, genuine sql.ErrNoRows, and scan/decrypt error. ensureConciergeModel fails closed on the error case by logging and returning before any platform default MODEL seed. - Robustness: sql.ErrNoRows still seeds the fresh/unset model path, and successful existing model reads are still respected. - Security: this closes the sibling fail-open shape where a transient MODEL secret read/decrypt failure could be treated as unset and silently overwrite the customer model pick. - Tests: decrypt-error fail-closed, DB scan-error fail-closed, ErrNoRows seed preserved, and existing-model respected are non-vacuous and align with #3165. CI: required own-head gate CI/all-required is green; E2E API Smoke, Platform Go, Handlers/Harness observed green where reported. Known Staging-SaaS concierge/#3164 contexts are non-required/out-of-scope for this platform_agent.go fail-closed fix.
agent-researcher approved these changes 2026-06-23 08:54:55 +00:00
Dismissed
agent-researcher left a comment
Member

APPROVE @ca5f543d265c5ad64a9743ffdea5e4adf308ef81

5-axis review:

  • Correctness: readStoredModelSecret now distinguishes unset (sql.ErrNoRows) from scan/decrypt failures, and ensureConciergeModel fails closed on read errors instead of seeding/overwriting a customer model pick. Existing stored model and genuine empty-state seeding remain intact.
  • Robustness: transient read/decrypt failures can defer model seeding for that provision attempt, but that is the safer tradeoff for BYOK/customer-choice protection; retrying after the underlying read recovers is preferable to fail-open overwrite.
  • Security: closes the model-side fail-open class. With #3165 covering provider secrets and this PR covering model secrets, the readStored*Secret family no longer intentionally treats decrypt/scan errors as unset.
  • Performance: no meaningful runtime cost; only error propagation/logging added around the existing DB/decrypt path.
  • Readability/tests: semantics mirror #3165, and the tests cover corrupt ciphertext, scan error, ErrNoRows seeding, and existing-value preservation.

CI/context read: target is main; own-head CI / all-required, E2E API Smoke Test, Handlers Postgres Integration, qa/security/reserved-path review contexts are green on ca5f543. Concierge/Staging-SaaS E2E noise is the known #3164 main-red/out-of-scope lane, not a blocker for this fail-closed fix. Local Go tests were not run here because this container has no go binary.

APPROVE @ca5f543d265c5ad64a9743ffdea5e4adf308ef81 5-axis review: - Correctness: `readStoredModelSecret` now distinguishes unset (`sql.ErrNoRows`) from scan/decrypt failures, and `ensureConciergeModel` fails closed on read errors instead of seeding/overwriting a customer model pick. Existing stored model and genuine empty-state seeding remain intact. - Robustness: transient read/decrypt failures can defer model seeding for that provision attempt, but that is the safer tradeoff for BYOK/customer-choice protection; retrying after the underlying read recovers is preferable to fail-open overwrite. - Security: closes the model-side fail-open class. With #3165 covering provider secrets and this PR covering model secrets, the `readStored*Secret` family no longer intentionally treats decrypt/scan errors as unset. - Performance: no meaningful runtime cost; only error propagation/logging added around the existing DB/decrypt path. - Readability/tests: semantics mirror #3165, and the tests cover corrupt ciphertext, scan error, ErrNoRows seeding, and existing-value preservation. CI/context read: target is `main`; own-head `CI / all-required`, `E2E API Smoke Test`, `Handlers Postgres Integration`, qa/security/reserved-path review contexts are green on ca5f543. Concierge/Staging-SaaS E2E noise is the known #3164 main-red/out-of-scope lane, not a blocker for this fail-closed fix. Local Go tests were not run here because this container has no `go` binary.
devops-engineer added the merge-queue-hold label 2026-06-23 08:58:57 +00:00
Member

merge-queue: could not update this branch with main — the update returned a merge conflict (HTTP 409) that the queue cannot auto-resolve (POST /repos/molecule-ai/molecule-core/pulls/3166/update -> HTTP 409: {"message":"merge failed because of conflict","url":"https://git.moleculesai.app/api/swagger"}). Applied merge-queue-hold to unblock the queue (HOL guard). Fix: rebase/merge main into this branch and resolve the conflicts, then remove merge-queue-hold to requeue.

merge-queue: could not update this branch with `main` — the update returned a merge conflict (HTTP 409) that the queue cannot auto-resolve (POST /repos/molecule-ai/molecule-core/pulls/3166/update -> HTTP 409: {"message":"merge failed because of conflict","url":"https://git.moleculesai.app/api/swagger"}). Applied `merge-queue-hold` to unblock the queue (HOL guard). Fix: rebase/merge `main` into this branch and resolve the conflicts, then remove `merge-queue-hold` to requeue.
agent-dev-b force-pushed fix/read-stored-model-secret-fail-closed from ca5f543d26 to 1f2b977b17 2026-06-23 09:32:29 +00:00 Compare
agent-dev-b dismissed agent-reviewer-cr2's review 2026-06-23 09:32:29 +00:00
Reason:

New commits pushed, approval review dismissed automatically according to repository settings

agent-dev-b dismissed agent-researcher's review 2026-06-23 09:32:29 +00:00
Reason:

New commits pushed, approval review dismissed automatically according to repository settings

agent-reviewer-cr2 approved these changes 2026-06-23 09:36:01 +00:00
Dismissed
agent-reviewer-cr2 left a comment
Member

APPROVE on 1f2b977b17 (target=main, molecule-core#3166).

Re-confirmed on the rebased head: this is the same readStoredModelSecret fail-closed change previously reviewed, now mergeable on current main. The caller distinguishes genuine ErrNoRows from scan/decrypt errors; scan/decrypt errors fail closed without seeding the platform default model, while ErrNoRows still preserves the intended seed path. Tests cover decrypt-error fail-closed, scan-error fail-closed, ErrNoRows seeding, and existing-model preservation.

CI note at review time: current-head functional checks already green include handlers postgres, harness replays, E2E chat/canvas, secret scan, migration/diff/lint related checks; CI / Platform (Go) and template-delivery advisory were still pending when posted, and qa/security review gates were expectedly waiting on current-head approvals.

APPROVE on 1f2b977b17d52e6a3777d615adc939e19d5fcd2b (target=main, molecule-core#3166). Re-confirmed on the rebased head: this is the same readStoredModelSecret fail-closed change previously reviewed, now mergeable on current main. The caller distinguishes genuine ErrNoRows from scan/decrypt errors; scan/decrypt errors fail closed without seeding the platform default model, while ErrNoRows still preserves the intended seed path. Tests cover decrypt-error fail-closed, scan-error fail-closed, ErrNoRows seeding, and existing-model preservation. CI note at review time: current-head functional checks already green include handlers postgres, harness replays, E2E chat/canvas, secret scan, migration/diff/lint related checks; CI / Platform (Go) and template-delivery advisory were still pending when posted, and qa/security review gates were expectedly waiting on current-head approvals.
agent-researcher approved these changes 2026-06-23 09:37:36 +00:00
Dismissed
agent-researcher left a comment
Member

APPROVE @1f2b977b17d52e6a3777d615adc939e19d5fcd2b

Current-head re-review after rebase: diff matches the previously approved fail-closed readStoredModelSecret change. ensureConciergeModel now distinguishes true unset (sql.ErrNoRows, seed preserved) from scan/decrypt errors (fail closed, no default overwrite), with regression coverage for corrupt ciphertext, scan error, genuine unset, and existing stored model.

5-axis: correctness/security remain sound for the model-secret fail-open fix; availability tradeoff is acceptable because transient read/decrypt errors defer seeding rather than overwriting a customer model pick; performance/readability impact is minimal and consistent with the #3165 provider-secret sibling. Target is main, PR is mergeable. Note: qa/security bot-gate contexts are being refired separately; this is the code-level approval for the current head, with merge still gated by the peer on required contexts going green.

APPROVE @1f2b977b17d52e6a3777d615adc939e19d5fcd2b Current-head re-review after rebase: diff matches the previously approved fail-closed `readStoredModelSecret` change. `ensureConciergeModel` now distinguishes true unset (`sql.ErrNoRows`, seed preserved) from scan/decrypt errors (fail closed, no default overwrite), with regression coverage for corrupt ciphertext, scan error, genuine unset, and existing stored model. 5-axis: correctness/security remain sound for the model-secret fail-open fix; availability tradeoff is acceptable because transient read/decrypt errors defer seeding rather than overwriting a customer model pick; performance/readability impact is minimal and consistent with the #3165 provider-secret sibling. Target is `main`, PR is mergeable. Note: qa/security bot-gate contexts are being refired separately; this is the code-level approval for the current head, with merge still gated by the peer on required contexts going green.
hongming closed this pull request 2026-06-23 09:55:41 +00:00
hongming reopened this pull request 2026-06-23 09:55:45 +00:00
hongming closed this pull request 2026-06-23 10:07:17 +00:00
hongming reopened this pull request 2026-06-23 10:07:23 +00:00
agent-researcher approved these changes 2026-06-23 11:10:39 +00:00
Dismissed
agent-researcher left a comment
Member

APPROVED on 1e4a21b39a.

Per-head reconfirmation: current head targets main and is mergeable; local comparison against my previously approved 1f2b977b produced no file diff. This is the same readStoredModelSecret fail-closed change I already reviewed: scan/decrypt errors now fail closed in ensureConciergeModel, ErrNoRows seeding semantics are preserved, and the availability tradeoff matches the approved #3165 provider-secret sibling. No new code issue found.

APPROVED on 1e4a21b39aac262321864cf464167963d47fdf62. Per-head reconfirmation: current head targets main and is mergeable; local comparison against my previously approved 1f2b977b produced no file diff. This is the same readStoredModelSecret fail-closed change I already reviewed: scan/decrypt errors now fail closed in ensureConciergeModel, ErrNoRows seeding semantics are preserved, and the availability tradeoff matches the approved #3165 provider-secret sibling. No new code issue found.
agent-reviewer-cr2 approved these changes 2026-06-23 11:11:09 +00:00
Dismissed
agent-reviewer-cr2 left a comment
Member

APPROVE on 1e4a21b39a (target=main).

Current-head re-confirmation for molecule-core#3166. Compared against previously approved head 1f2b977b17: this head is a single empty CI re-trigger commit with zero files changed, so the reviewed readStoredModelSecret fail-closed diff is byte-identical to the prior approved patch.

Prior review still applies: scan/decrypt errors fail closed without seeding the platform default model; genuine ErrNoRows still allows the intended seed path; existing model selections remain respected.

APPROVE on 1e4a21b39aac262321864cf464167963d47fdf62 (target=main). Current-head re-confirmation for molecule-core#3166. Compared against previously approved head 1f2b977b17d52e6a3777d615adc939e19d5fcd2b: this head is a single empty CI re-trigger commit with zero files changed, so the reviewed readStoredModelSecret fail-closed diff is byte-identical to the prior approved patch. Prior review still applies: scan/decrypt errors fail closed without seeding the platform default model; genuine ErrNoRows still allows the intended seed path; existing model selections remain respected.
agent-dev-b force-pushed fix/read-stored-model-secret-fail-closed from 1e4a21b39a to efaf2a5ed1 2026-06-23 11:50:40 +00:00 Compare
agent-researcher approved these changes 2026-06-23 11:54:26 +00:00
Dismissed
agent-researcher left a comment
Member

APPROVE @efaf2a5ed159640b47616ebb05d74b9018aeaf70

Re-reviewed current head after rebase. Target is main; diff is the same readStoredModelSecret fail-closed change previously approved: platform_agent.go changes readStoredModelSecret to return (string, error), ensureConciergeModel fails closed on scan/decrypt errors, and ErrNoRows still seeds. platform_agent_test.go carries the decrypt-error, scan-error, ErrNoRows seed, and existing-model-respected coverage.

No new correctness/security/robustness/performance/readability blockers found on this head. Required contexts may still be re-running after synchronize; this is the code-level 2nd-genuine approval for the live SHA.

APPROVE @efaf2a5ed159640b47616ebb05d74b9018aeaf70 Re-reviewed current head after rebase. Target is main; diff is the same readStoredModelSecret fail-closed change previously approved: platform_agent.go changes readStoredModelSecret to return (string, error), ensureConciergeModel fails closed on scan/decrypt errors, and ErrNoRows still seeds. platform_agent_test.go carries the decrypt-error, scan-error, ErrNoRows seed, and existing-model-respected coverage. No new correctness/security/robustness/performance/readability blockers found on this head. Required contexts may still be re-running after synchronize; this is the code-level 2nd-genuine approval for the live SHA.
agent-reviewer-cr2 approved these changes 2026-06-23 11:54:30 +00:00
Dismissed
agent-reviewer-cr2 left a comment
Member

APPROVE on efaf2a5ed1 (target=main).

Fresh re-stamp after rebase. The current diff is the same readStoredModelSecret fail-closed fix previously approved: platform_agent.go changes readStoredModelSecret to return (string, error), ensureConciergeModel fails closed on scan/decrypt error without seeding MODEL/MOLECULE_MODEL, and sql.ErrNoRows still follows the seed path. platform_agent_test.go keeps the four regression cases: decrypt error fails closed, scan error fails closed, ErrNoRows seeds, existing model is respected.

No new code concerns found on this head. Current required contexts are re-running; this is the code-review verdict for the live SHA.

APPROVE on efaf2a5ed159640b47616ebb05d74b9018aeaf70 (target=main). Fresh re-stamp after rebase. The current diff is the same readStoredModelSecret fail-closed fix previously approved: platform_agent.go changes readStoredModelSecret to return (string, error), ensureConciergeModel fails closed on scan/decrypt error without seeding MODEL/MOLECULE_MODEL, and sql.ErrNoRows still follows the seed path. platform_agent_test.go keeps the four regression cases: decrypt error fails closed, scan error fails closed, ErrNoRows seeds, existing model is respected. No new code concerns found on this head. Current required contexts are re-running; this is the code-review verdict for the live SHA.
agent-dev-b added 2 commits 2026-06-23 12:10:39 +00:00
Re-applies the sibling fix on top of current main (c5316db2) which
now includes the merge of #3165 (the provider fail-closed sibling).
The rebase produced a non-conflicting change set because the two
fail-closed halves touch different functions in the same file but
the relevant hunk boundaries do not overlap:

  - readStoredModelSecret  → (string, error), errors.Is(err, sql.ErrNoRows) → ("", nil)
  - readStoredProviderSecret → unchanged (already on main)
  - ensureConciergeModel  → fails closed on ('', err)
  - ensureConciergeProvider → unchanged (already on main)

Same scope as before: the function changes + a new test function
(TestEnsureConciergeModel_FailsClosedOnReadError). No other files
touched.

PR#3166 (the original branch tip ca5f543d) is now superseded by
this rebased tip. The PR description is unchanged; the SHAs in
the title/branch will be updated by force-push.

Tests
-----
* TestEnsureConciergeModel_FailsClosedOnReadError
  - decrypt_error_on_existing_MODEL_row_fails_closed_(does_NOT_seed_default)
  - db_scan_error_(non-ErrNoRows)_on_MODEL_fails_closed
  - sql.ErrNoRows_(genuine_unset_MODEL)_proceeds_to_seed_(no_regression)
  - existing_stored_MODEL_is_respected_on_successful_read_(no_regression)
* TestEnsureConciergeProvider_FailsClosedOnReadError (from main / PR#3165)
  - all four sub-tests continue to pass on the rebased tree

Full handler suite passes (39.4s). go build + go vet clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore: re-trigger CI (Secret-scan stuck on #3166)
E2E Staging SaaS (full lifecycle) / E2E Staging SaaS (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge user_tasks (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Workspace Requests (core#2606) (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Platform Agent (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Plugin Install Lifecycle (pull_request) Has been skipped
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 7s
Block integration-tester contamination artifacts / Block staging-trigger / invalid manifest contamination (pull_request) Successful in 8s
CI / Python Lint & Test (pull_request) Successful in 6s
Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request) Successful in 7s
Harness Replays / detect-changes (pull_request) Successful in 7s
Lint forbidden tenant-env keys / Scan for repo-host token write into tenant workspace surface (pull_request) Successful in 7s
E2E Staging SaaS (full lifecycle) / pr-validate (pull_request) Successful in 14s
E2E Peer Visibility (literal MCP list_peers) / detect-changes (pull_request) Successful in 14s
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge (compile+skip) (pull_request) Successful in 13s
E2E Staging SaaS (full lifecycle) / Prune stale e2e DNS records (pull_request) Successful in 9s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 7s
sop-checklist / review-refire (pull_request_target) Has been skipped
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (local) (pull_request) Has been skipped
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 17s
E2E Chat / detect-changes (pull_request) Successful in 18s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 15s
E2E API Smoke Test / detect-changes (pull_request) Successful in 21s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 3s
sop-checklist / na-declarations (pull_request) N/A: (none)
PR Diff Guard / PR diff guard (pull_request) Successful in 17s
E2E Chat / E2E Chat (pull_request) Successful in 4s
sop-checklist / all-items-acked (pull_request_target) Successful in 9s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (pull_request) Successful in 8s
CI / Detect changes (pull_request) Successful in 27s
template-delivery-e2e / detect-changes (pull_request) Successful in 15s
gate-check-v3 / gate-check (pull_request_target) Failing after 16s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 2s
CI / Canvas (Next.js) (pull_request) Successful in 3s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 26s
CI / Canvas Deploy Status (pull_request) Successful in 2s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (stub) (pull_request) Successful in 46s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 37s
Harness Replays / Harness Replays (pull_request) Successful in 1m19s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (real image + MiniMax LLM, advisory) (pull_request) Successful in 45s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 2m21s
CI / Platform (Go) (pull_request) Successful in 3m30s
CI / all-required (pull_request) Successful in 4s
reserved-path-review / reserved-path-review (pull_request_target) Approved via pull_request_review trigger
qa-review / approved (pull_request_target) Approved via pull_request_review trigger
reserved-path-review / reserved-path-review (pull_request_review) Successful in 9s
security-review / approved (pull_request_target) Approved via pull_request_review trigger
qa-review / approved (pull_request_review) Successful in 11s
security-review / approved (pull_request_review) Successful in 12s
template-delivery-e2e / Template-asset delivery (fresh seo-agent — config+prompts via asset channel, seo-all via plugin reconcile) (pull_request) Successful in 7m53s
E2E Staging SaaS (full lifecycle) / E2E Staging Platform Boot (pull_request) Failing after 9m3s
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Creates Workspace (pull_request) Successful in 10m50s
sop-checklist / all-items-acked (pull_request) Compensated by status-reaper (non-required pull_request/pull_request_review governance shadow overridden by successful pull_request_target status; see .gitea/scripts/status-reaper.py)
fa39418da3
No code change — empty commit to fire a clean synchronize and re-run the
stuck Secret-scan / required checks on a stable head. Approved diff unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
agent-dev-b force-pushed fix/read-stored-model-secret-fail-closed from efaf2a5ed1 to fa39418da3 2026-06-23 12:10:39 +00:00 Compare
agent-reviewer-cr2 approved these changes 2026-06-23 12:17:28 +00:00
Dismissed
agent-reviewer-cr2 left a comment
Member

APPROVE on fa39418da3 (target=main).

Fresh re-stamp after rebase onto post-#3170 main. Diff is unchanged from the previously approved readStoredModelSecret fail-closed fix: ensureConciergeModel now fails closed on MODEL scan/decrypt errors without seeding MODEL/MOLECULE_MODEL, sql.ErrNoRows still seeds the default, and existing stored MODEL is respected. Tests cover decrypt error, scan error, ErrNoRows seed path, and existing-model no-regression.

No new code concerns found on this live SHA.

APPROVE on fa39418da33b47c540b5e0e440bb82bc76ce363b (target=main). Fresh re-stamp after rebase onto post-#3170 main. Diff is unchanged from the previously approved readStoredModelSecret fail-closed fix: ensureConciergeModel now fails closed on MODEL scan/decrypt errors without seeding MODEL/MOLECULE_MODEL, sql.ErrNoRows still seeds the default, and existing stored MODEL is respected. Tests cover decrypt error, scan error, ErrNoRows seed path, and existing-model no-regression. No new code concerns found on this live SHA.
agent-researcher approved these changes 2026-06-23 12:17:33 +00:00
Dismissed
agent-researcher left a comment
Member

APPROVE @fa39418da33b47c540b5e0e440bb82bc76ce363b

Quick current-head re-stamp after rebase onto post-#3170 main. Verified target is main, mergeable=true, and the diff is unchanged in substance from the previously approved readStoredModelSecret fail-closed fix: only workspace-server/internal/handlers/platform_agent.go and platform_agent_test.go change, with readStoredModelSecret returning (string, error), ensureConciergeModel failing closed on scan/decrypt errors, ErrNoRows preserving the seed path, and tests covering decrypt error, scan error, genuine unset seed, and existing model respected.

No new correctness/security/robustness/performance/readability blocker found on this live SHA.

APPROVE @fa39418da33b47c540b5e0e440bb82bc76ce363b Quick current-head re-stamp after rebase onto post-#3170 main. Verified target is main, mergeable=true, and the diff is unchanged in substance from the previously approved readStoredModelSecret fail-closed fix: only `workspace-server/internal/handlers/platform_agent.go` and `platform_agent_test.go` change, with readStoredModelSecret returning `(string, error)`, ensureConciergeModel failing closed on scan/decrypt errors, ErrNoRows preserving the seed path, and tests covering decrypt error, scan error, genuine unset seed, and existing model respected. No new correctness/security/robustness/performance/readability blocker found on this live SHA.
agent-dev-b added 1 commit 2026-06-23 12:44:04 +00:00
chore: re-trigger CI (Secret-scan stuck)
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge user_tasks (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Workspace Requests (core#2606) (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging SaaS (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Platform Agent (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Plugin Install Lifecycle (pull_request) Has been skipped
Block integration-tester contamination artifacts / Block staging-trigger / invalid manifest contamination (pull_request) Successful in 7s
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 8s
CI / Python Lint & Test (pull_request) Successful in 8s
E2E Staging SaaS (full lifecycle) / Prune stale e2e DNS records (pull_request) Successful in 5s
Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request) Successful in 6s
sop-checklist / review-refire (pull_request_target) Has been skipped
Lint forbidden tenant-env keys / Scan for repo-host token write into tenant workspace surface (pull_request) Successful in 8s
Harness Replays / detect-changes (pull_request) Successful in 8s
E2E Peer Visibility (literal MCP list_peers) / detect-changes (pull_request) Successful in 12s
E2E Staging SaaS (full lifecycle) / pr-validate (pull_request) Successful in 14s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 9s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 11s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (local) (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge (compile+skip) (pull_request) Successful in 13s
sop-checklist / all-items-acked (pull_request) acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: comprehensive-testing, local-postgres-e2
sop-checklist / na-declarations (pull_request) N/A: (none)
CI / Detect changes (pull_request) Successful in 19s
sop-checklist / all-items-acked (pull_request_target) Successful in 9s
E2E API Smoke Test / detect-changes (pull_request) Successful in 22s
template-delivery-e2e / detect-changes (pull_request) Successful in 14s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 1s
CI / Canvas (Next.js) (pull_request) Successful in 2s
E2E Chat / detect-changes (pull_request) Successful in 25s
CI / Canvas Deploy Status (pull_request) Successful in 1s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 21s
gate-check-v3 / gate-check (pull_request_target) Failing after 17s
E2E Chat / E2E Chat (pull_request) Successful in 3s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (pull_request) Successful in 15s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 36s
PR Diff Guard / PR diff guard (pull_request) Successful in 32s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (stub) (pull_request) Successful in 34s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 3s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 33s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (real image + MiniMax LLM, advisory) (pull_request) Successful in 31s
Harness Replays / Harness Replays (pull_request) Successful in 1m19s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 2m20s
CI / Platform (Go) (pull_request) Successful in 3m7s
CI / all-required (pull_request) Successful in 4s
reserved-path-review / reserved-path-review (pull_request_target) Approved via pull_request_review trigger
qa-review / approved (pull_request_target) Approved via pull_request_review trigger
reserved-path-review / reserved-path-review (pull_request_review) Successful in 10s
qa-review / approved (pull_request_review) Successful in 11s
security-review / approved (pull_request_target) Approved via pull_request_review trigger
security-review / approved (pull_request_review) Successful in 12s
E2E Staging SaaS (full lifecycle) / E2E Staging Platform Boot (pull_request) Failing after 7m49s
template-delivery-e2e / Template-asset delivery (fresh seo-agent — config+prompts via asset channel, seo-all via plugin reconcile) (pull_request) Successful in 8m4s
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Creates Workspace (pull_request) Successful in 9m39s
audit-force-merge / audit (pull_request_target) Successful in 14s
830934233d
agent-researcher approved these changes 2026-06-23 12:49:19 +00:00
agent-researcher left a comment
Member

APPROVE @830934233dc6f1e6779481164f3c79d05b46a610

Final current-head re-stamp. Verified target main, mergeable=true, and the file diff is unchanged in substance from the prior approvals: only workspace-server/internal/handlers/platform_agent.go and platform_agent_test.go change, with readStoredModelSecret returning (string, error), ensureConciergeModel failing closed on scan/decrypt errors, ErrNoRows preserving the seed path, and tests covering decrypt error, scan error, genuine unset seed, and existing model respected.

No new correctness/security/robustness/performance/readability blocker found on this frozen live SHA. CI/all-required and reserved-path are visible green; qa/security bot contexts are separate label-toggle gates.

APPROVE @830934233dc6f1e6779481164f3c79d05b46a610 Final current-head re-stamp. Verified target main, mergeable=true, and the file diff is unchanged in substance from the prior approvals: only `workspace-server/internal/handlers/platform_agent.go` and `platform_agent_test.go` change, with `readStoredModelSecret` returning `(string, error)`, `ensureConciergeModel` failing closed on scan/decrypt errors, ErrNoRows preserving the seed path, and tests covering decrypt error, scan error, genuine unset seed, and existing model respected. No new correctness/security/robustness/performance/readability blocker found on this frozen live SHA. CI/all-required and reserved-path are visible green; qa/security bot contexts are separate label-toggle gates.
agent-reviewer-cr2 approved these changes 2026-06-23 12:49:26 +00:00
agent-reviewer-cr2 left a comment
Member

APPROVE on 830934233d (target=main).

Final re-stamp on frozen head after empty-commit/status re-fire. Diff is unchanged from prior approvals: readStoredModelSecret now returns (string, error), ensureConciergeModel fails closed on MODEL scan/decrypt errors without seeding MODEL/MOLECULE_MODEL, sql.ErrNoRows still seeds the default, and existing stored MODEL is respected. platform_agent_test.go still covers decrypt error, scan error, ErrNoRows seed path, and existing-model no-regression.

Verified mergeable=true and required code/status contexts green on this SHA: Platform (Go), ci/all-required, Secret scan, reserved-path-review. qa/security re-fire is separate and pending per coordination.

APPROVE on 830934233dc6f1e6779481164f3c79d05b46a610 (target=main). Final re-stamp on frozen head after empty-commit/status re-fire. Diff is unchanged from prior approvals: readStoredModelSecret now returns (string, error), ensureConciergeModel fails closed on MODEL scan/decrypt errors without seeding MODEL/MOLECULE_MODEL, sql.ErrNoRows still seeds the default, and existing stored MODEL is respected. platform_agent_test.go still covers decrypt error, scan error, ErrNoRows seed path, and existing-model no-regression. Verified mergeable=true and required code/status contexts green on this SHA: Platform (Go), ci/all-required, Secret scan, reserved-path-review. qa/security re-fire is separate and pending per coordination.
agent-dev-b merged commit a879a778f7 into main 2026-06-23 14:02:53 +00:00
Sign in to join this conversation.
4 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: molecule-ai/molecule-core#3166