Problem / why
Hotfix is environment-major and uses a global tag and branch namespace today
(internal/hotfix/finalize.go, internal/hotfix/lifecycle.go). For a multi-component manifest,
a hotfix must diverge only one component's environment while siblings keep tracking trunk.
Scope (firm intent, to be refined after P1)
- Key hotfix divergence (
Ref / BaseSHA / Patches) under the component dimension.
- Segment the branch namespace per component:
EnvBranchPrefix becomes env/<comp>/<env>.
- Scope hotfix tag queries (
HotfixTagsForBase) to the component's tag_prefix namespace,
replacing the global tag enumeration.
- Port the hotfix finalize overlay to
state.components[comp][env].
Files / areas touched
internal/hotfix/finalize.go, internal/hotfix/lifecycle.go,
internal/promote/finalize.go (rejoin block).
Tests and coverage required
- e2e: a hotfix diverges only A's environment while B tracks trunk.
- A single-component regression test that hotfix is unchanged.
Acceptance criteria
- A per-component hotfix affects only that component's branch / tag namespace and state subtree.
- Single-component hotfix is unchanged.
Dependencies
Blocked by the independent promotion milestone.
Problem / why
Hotfix is environment-major and uses a global tag and branch namespace today
(
internal/hotfix/finalize.go,internal/hotfix/lifecycle.go). For a multi-component manifest,a hotfix must diverge only one component's environment while siblings keep tracking trunk.
Scope (firm intent, to be refined after P1)
Ref/BaseSHA/Patches) under the component dimension.EnvBranchPrefixbecomesenv/<comp>/<env>.HotfixTagsForBase) to the component'stag_prefixnamespace,replacing the global tag enumeration.
state.components[comp][env].Files / areas touched
internal/hotfix/finalize.go,internal/hotfix/lifecycle.go,internal/promote/finalize.go(rejoin block).Tests and coverage required
Acceptance criteria
Dependencies
Blocked by the independent promotion milestone.