Appearance
Handoff: SVC-004-default-profile-cutover-proof-bundle profile-service default profile cutover proof bundle
Scope
- Service/area:
profile-service - Task pack:
docs/agents/service-tasks/iam-profile-default-cutover-proof.md - Goal: package bounded profile ownership and non-default route evidence while keeping default profile/KYC promotion gated.
- Non-goals: editing
deploy/gateway/routes.json, IAM credential/session behavior, broaduser-servicework, or changes to legacy source.
Docs Read
docs/architecture/service-responsibility-matrix.mddocs/agents/service-tasks/profile-service.mddocs/agents/service-tasks/iam-profile-default-cutover-proof.mddocs/qa/iam-profile-default-cutover-proof.mddocs/qa/iam-profile-target-validation-smoke.mddocs/qa/profile-route-live-smoke.mddocs/qa/profile-route-browser-smoke.mddocs/qa/service-agent-goal-completion-audit.md
Legacy Evidence Read
/Users/velikho/Desktop/WORKING/HOCTAPAZ/node-platform/apps/api/src/modules/auth/**/Users/velikho/Desktop/WORKING/HOCTAPAZ/node-platform/apps/api/src/modules/app-data/**/Users/velikho/Desktop/WORKING/HOCTAPAZ/node-platform/apps/web/components/account/profile-settings-client.tsx- Legacy source was read-only evidence only.
Files Changed
go-platform/docs/agents/handoffs/SVC-004-default-profile-cutover-proof-bundle.mdgo-platform/docs/agents/service-agent-next-slice-closeout-ledger.jsongo-platform/docs/agents/service-agent-next-slice-closeout-ledger.mdgo-platform/docs/agents/service-agent-accepted-handoffs.md
Behavior Implemented
- Profile remains the owner of display profile, role-specific profile data, contacts, KYC state, and parent-child profile projections.
- IAM remains the owner of credentials, sessions, JWT/JWKS, roles, permissions, and authorization decisions; profile mutation guards reject those fields.
- Base/teacher profile live and browser rehearsals remain non-default; all profile/KYC default routes remain legacy-backed.
- The 2026-07-10 same-target fixture validation proves local backfill and UUID metadata behavior, but is explicitly not production-like target evidence.
Tests And Verification
GOTOOLCHAIN=go1.25.11 go test ./services/profile-service/...- Passed in the current readiness run.
PROFILE_SERVICE_POSTGRES_TEST_DATABASE_URL=postgres://... GOTOOLCHAIN=go1.25.11 go test ./services/profile-service/internal/repository -run TestPostgresProfileUUIDShadowDualWriteIntegration -count=1- Not run; no production-like DSN was configured.
make test-profile-routes test-profile-kyc-routes test-profile-admin-kyc-routes- Passed; profile, KYC, and admin KYC route examples remain non-default.
make test-iam-profile-default-cutover-proof-bundle- Self-test/runtime guard passed; the resulting fixture bundle is not cutover-grade.
make test-iam-profile-default-cutover-review-artifact- Correctly rejects the self-test bundle.
IAM_PROFILE_DEFAULT_CANDIDATE_ISOLATED_CONFIRM=disposable-populated make test-iam-profile-default-candidate-isolated- Passed on 2026-07-14 against the same fresh Profile owner database used by the backfill and UUID checks. It starts Profile with IAM, but only the bounded IAM read routes are candidate Gateway/browser paths; this is not a Profile route-promotion claim. Artifact:
output/qa/iam-profile-default-candidate-isolated-20260714-014803-522/.
- Passed on 2026-07-14 against the same fresh Profile owner database used by the backfill and UUID checks. It starts Profile with IAM, but only the bounded IAM read routes are candidate Gateway/browser paths; this is not a Profile route-promotion claim. Artifact:
- Required evidence:
production-like populated target validationis still open;migrator run-report evidenceexists only for the local fixture;candidate diff evidenceis IAM-auth-only;profile browser proofexists for non-default profile routes;rollback-after-candidate proofremains open for a profile candidate.
Route State
cutover gated; default profile promotion requires populated-target proof bundle, browser proof, candidate diff, and rollback proof
deploy/gateway/routes.json remains unchanged with profile and KYC compatibility routes on legacy_proxy.
Risks / Blockers
- Required production-like populated target validation and migrator run-report evidence are not attached.
- Profile candidate diff, candidate browser, and rollback-after-candidate artifacts are not complete as a single production-like bundle.
- The fixture/self-test bundle must not be labeled production-like.
Next Step
Run the profile-specific live/browser candidate rehearsals against the same production-like target used by IAM, attach candidate hashes and rollback artifacts, then request human promotion review without editing the default route table automatically.