fix: disable PostgreSQL TLS for refusing RDS endpoint

This commit is contained in:
2026-08-16 23:26:03 +08:00
parent acf368b6fe
commit ed978142eb
17 changed files with 340 additions and 180 deletions

View File

@@ -0,0 +1,94 @@
# Task: Disable PostgreSQL TLS for Go production
## Identity
- Task ID: 20260816-disable-postgres-tls-d4a89c12
- Mode: Feature
- Branch: main
- Worktree: D:\Datas\OthersProjects\NianAIGC
- Base commit: acf368b6fe290f44157ada79448673ab11808f7c
- Owner: codex
- Status: Ready for Integration
## Scope
- Change the Go PostgreSQL adapter so production never negotiates TLS, even
when the existing `DATABASE_URL` contains `sslmode=verify-full` and
`sslrootcert` from the previous deployment template.
- Align the Node migration client, ACK Secret/template checks, Go Deployment,
environment example, and deployment guide with plaintext PostgreSQL.
- Preserve explicit PostgreSQL selection, credentials, authorization,
migrations, pooling, and fail-closed startup behavior.
## Intent And Constraints
- The user explicitly chose code-side plaintext transport instead of changing
Alibaba Cloud RDS SSL configuration and accepted the resulting lack of
database link encryption.
- A newly built Go image must start with the existing TLS-bearing Secret; no
live Secret or RDS control-plane mutation is part of this task.
- Work test-first at the configuration/connection seam that reproduced the
production `server refused TLS connection` failure.
- Keep the change surgical and do not alter API, authentication, billing,
storage, or database schema behavior.
## Outcome
- Go `ParseConfig` removes case-insensitive `sslmode`/`sslrootcert` values,
writes `sslmode=disable`, never reads a CA, and records plaintext mode.
- Go `Open` normalizes the URL again and explicitly clears pgx `TLSConfig` and
fallbacks, so a direct or legacy `Config` cannot negotiate TLS.
- The migration Node client and retained server-only TypeScript adapter apply
the same normalization and pass `ssl: false` to `pg`.
- ACK no longer defines or mounts `zhinian-rds-ca`; migration and Go Secret
examples use `sslmode=disable`.
- Environment examples, both READMEs, deployment guidance, and manifest
assertions now disclose plaintext PostgreSQL transport and require private
network isolation.
- No live Alibaba Cloud or ACK configuration was changed.
## Verification
- RED: new Go tests failed because the old parser read `sslrootcert`, defaulted
to `verify-full`, and `Open` required TLS configuration.
- RED: new Node tests failed because the old clients tried to read a missing CA
and the ACK checker found the retained CA mount.
- GREEN: `go test ./...` passed for every backend package.
- GREEN: `npm test` passed 53 files / 160 tests.
- GREEN: `npx tsc --noEmit --incremental false` passed.
- GREEN: `npm run deploy:check` passed all seven checked-in ACK manifests.
- GREEN: `node --check` passed for both modified Node scripts.
- GREEN: `npm run build` exported all 14 static pages successfully.
- `git diff --check` passed with line-ending warnings only.
- First read-only `sol_reviewer` verdict: FAIL because `backend/README.md`
retained TLS claims and tests did not observe a real PostgreSQL startup
packet; both findings were fixed.
- Final read-only `sol_reviewer` verdict: PASS on both Standards and Spec after
the Go wire test observed plaintext StartupMessage `196608` (not SSLRequest
`80877103`) and the executable TypeScript configuration test passed.
## Follow-ups
- Build and deploy an immutable Go image, then verify startup bootstrap and
`/api/ready` against the live RDS instance.
- Reapplying the database Secret is not required for TLS removal because the
new clients override old TLS parameters, but the checked-in plaintext Secret
template should be used for future rotations.
- Reassess TLS if the network boundary or compliance requirements change.
## Promotion Candidates
- Target: RDS-001/current architecture/database deployment commitments.
Proposal: record that production PostgreSQL transport is intentionally
plaintext and code-enforced, superseding the prior verified-CA TLS default.
Evidence: production RDS refused TLS, the deterministic diagnosis task
`20260816-diagnose-go-rds-tls-9c4a7e21`, and the user's explicit 2026-08-16
instruction not to modify Alibaba Cloud and to remove TLS in code.
Future impact: future deployment templates and database clients must not
silently reintroduce TLS without a new operator decision and compatible RDS
configuration.
Semantic conflicts: canonical current state and commitments still describe
verified-CA TLS as the prior target.
Human confirmation required: already received for plaintext production
transport; canonical promotion still requires the serialized Integration
Gate.