Skip to content

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, broad user-service work, or changes to legacy source.

Docs Read

  • docs/architecture/service-responsibility-matrix.md
  • docs/agents/service-tasks/profile-service.md
  • docs/agents/service-tasks/iam-profile-default-cutover-proof.md
  • docs/qa/iam-profile-default-cutover-proof.md
  • docs/qa/iam-profile-target-validation-smoke.md
  • docs/qa/profile-route-live-smoke.md
  • docs/qa/profile-route-browser-smoke.md
  • docs/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.md
  • go-platform/docs/agents/service-agent-next-slice-closeout-ledger.json
  • go-platform/docs/agents/service-agent-next-slice-closeout-ledger.md
  • go-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/.
  • Required evidence: production-like populated target validation is still open; migrator run-report evidence exists only for the local fixture; candidate diff evidence is IAM-auth-only; profile browser proof exists for non-default profile routes; rollback-after-candidate proof remains 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.

Go-platform documentation is generated from repository Markdown.