ADR-0316: Portfolio Acceptance Criteria and Release Gates

accepted

ADR-0316 — Architecture Decision Record

Thông tin ADR

TrườngGiá trị
IDADR-0316
Tier03xx
Trạng tháiaccepted
Ngày tạo2026-03-06
Cập nhật lần cuối2026-03-06
Audit định kỳQuarterly
Thay thế
Bị thay thế bởi

Packs Áp dụng


---
title: "Portfolio SIT — {cycle-id} Milestone {N}"
date: "YYYY-MM-DD"
milestone: "M{N}"
cycle_id: "{cycle-id}"
verdict: PASS | FAIL | PARTIAL
---

## Tier 2 Results

| Scenario | Components | Result | Notes |
|----------|------------|--------|-------|
| SIT-INT-01 | claire-web-app → engine-gateway | PASS/FAIL | |
| SIT-INT-02 | engine-gateway → knowledge-gateway | PASS/FAIL | |
| SIT-INT-03 | Auth chain Supabase JWT | PASS/FAIL | |

## Waivers (if PARTIAL)

| Scenario | Reason | Approved by |
|----------|--------|-------------|

## Verdict: PASS / FAIL / PARTIAL
---
title: "Portfolio UAT — {cycle-id} Milestone {N}"
date: "YYYY-MM-DD"
milestone: "M{N}"
tester: "Daniel"
verdict: PASS | FAIL | DEFERRED-WITH-REASON
---

## Journey Results

| Journey | Description | Result | Notes |
|---------|-------------|--------|-------|
| J1 | Chat + Command + Engine Dashboard | PASS/FAIL | |
| J2 | Chat + KG Search | PASS/FAIL | |
| J3 | New user onboarding (M2+) | PASS/FAIL/N-A | |

## Issues Found

| Issue | Severity | Blocking? |
|-------|----------|-----------|

## Verdict: PASS / FAIL / DEFERRED-WITH-REASON
Per-project flow (autonomous, no portfolio coordination):
  plan → execute → verify → sit (ADR-0818) → uat (ADR-0814)
  → merge to main → staging auto-deploy → [RELEASE ON DEMAND]
  → git tag vX.Y.Z → deploy to production

Portfolio Milestone Review (after ALL projects in milestone released):
  → Collect per-project audit verdicts (L1 check)
  → Verify per-project git tags + production deploy (L2 check)
  → Run Portfolio SIT Gate — Tier 2 cross-component scenarios (L3)
  → Run Portfolio UAT Gate — integrated user journeys (L4)
  → [PORTFOLIO LAUNCH MARKER] — if L1-L4 all PASS

Portfolio Cycle Close (after Launch Marker):
  → Create Portfolio CHANGELOG (L5)
  → Create portfolio git tag
  → Update PORTFOLIO.md
  → Portfolio Cycle Close (ADR-0314)
## Portfolio PC{N} Milestone M{n} — {date}

### Shipped

| Project | Version | Key Deliverables |
|---------|---------|-----------------|
| claire-web-app | v4.0.0 | Daniel Parity: commands, portfolio view, KG search |
| engine-gateway | v2.0.0 | User context injection, dual auth |
| knowledge-gateway | v4.0.0 | Multi-user KB, Supabase JWT |

### New Integration Capabilities

- [Describe new cross-component flows now working]

### Portfolio SIT Results

- Tier 2 scenarios: N/N PASS
- Link: gsd-portfolio/.ACE/sit/portfolio-sit-pc{N}.md

### Portfolio UAT Results

- Journeys: N/N PASS
- Link: gsd-portfolio/.ACE/uat/portfolio-uat-pc{N}.md
gsd-portfolio/.ACE/
├── roadmap/                         (ADR-0314)
├── prd/                             (ADR-0314)
├── architecture/                    (ADR-0314)
├── allocation/                      (ADR-0314)
├── sit/                             (NEW — ADR-0316)
│   └── portfolio-sit-{cycle-id}.md
├── uat/                             (NEW — ADR-0316)
│   └── portfolio-uat-{cycle-id}.md
└── cycle-history/                   (ADR-0314, extended)
    └── {cycle-id}-close.md          (now includes Launch Marker metadata)

ADR-0316: Portfolio Acceptance Criteria and Release Gates

Status: Accepted Date: 2026-03-06 Context: Extends ADR-0314 — Portfolio Cycle was missing concrete acceptance criteria, cross-component SIT gate, Portfolio UAT gate, and a defined release/launch strategy.


Context

Problem / Why

ADR-0314 defined the Portfolio Cycle lifecycle (Planning P0-P4 → GSD Execution → Portfolio Milestone Review → Portfolio Cycle Close) but left Portfolio Milestone Review without concrete acceptance criteria. Specifically:

  1. No portfolio-level “done” definition — what does it mean for a portfolio milestone to be complete? Per-project audits exist (ADR-0814, ADR-0818) but no portfolio-level aggregation gate.

  2. Tier 2 SIT scenarios orphanedSIT-SCENARIOS.md defines cross-component scenarios (SIT-INT-01/02/03) but they are not enforced as a gate at Portfolio Milestone Review.

  3. No Portfolio UAT gate — per-project UAT exists (ADR-0814) but no integrated user journey validation across multiple projects.

  4. No release strategy at portfolio levelADR-0805 covers per-project release but doesn’t define when/how portfolio-level milestones are announced or tagged.

Constraints

  • Must be backward compatible with per-project release (ADR-0805) and per-project SIT/UAT (ADR-0818, ADR-0814).
  • Portfolio coordinator remains read-only for project .planning/; writes only to gsd-portfolio/.ACE/.
  • Portfolio review must not block per-project releases — projects ship independently.
  • Consistent with ADR-0314 principles P6 (Portfolio Coordination), P7 (Top-Down Decomposition), P8 (Dependency-First Sequencing).

Decision

Portfolio Acceptance Criteria Framework

A portfolio milestone is DONE when ALL of the following conditions are PASS:

LayerGateSource EvidenceLevel
L1All projects in milestone allocation have audit PASSEDPer-project v{version}-MILESTONE-AUDIT.mdHard
L2All projects have git tag + deployed to productionPer-project STATE.md (version, deployment)Hard
L3Portfolio SIT Gate (Tier 2 cross-component)gsd-portfolio/.ACE/sit/portfolio-sit-{cycle-id}.mdHard
L4Portfolio UAT Gate (integrated user journey)gsd-portfolio/.ACE/uat/portfolio-uat-{cycle-id}.mdHard
L5Portfolio CHANGELOG created + portfolio tag appliedgsd-portfolio/PORTFOLIO-CHANGELOG.md, git tagSoft (required for cycle close)

L1-L4 must all PASS before Portfolio Launch Marker is created. L5 is required to proceed to Portfolio Cycle Close.


Portfolio SIT Gate (Tier 2)

Trigger: After all projects in the milestone allocation are deployed to staging.

Definition of PASS:

  1. All Tier 2 scenarios in SIT-SCENARIOS.md scoped to this milestone have staging URLs and PASS
  2. SIT report created: gsd-portfolio/.ACE/sit/portfolio-sit-{cycle-id}.md
  3. Verdict: PASS / FAIL / PARTIAL
    • PARTIAL accepted only if failing scenario has an approved waiver with documented reason

Scenarios per milestone (PC1):

MilestoneScenariosGate
M1 (Daniel Parity)SIT-INT-01 (WA → EG), SIT-INT-02 (EG → KG proxy)Hard
M2 (Multi-User Foundation)SIT-INT-01, SIT-INT-02, SIT-INT-03 (Auth Chain Supabase JWT)Hard
M3 (Org Room Structure)SIT-INT-01, SIT-INT-02, SIT-INT-03 + new room scenariosHard

Report template: gsd-portfolio/.ACE/sit/portfolio-sit-{cycle-id}.md


Portfolio UAT Gate

Trigger: After Portfolio SIT Gate PASS.

Definition of PASS:

  1. Daniel runs integrated user journeys on staging covering all milestone scope
  2. All “happy paths” for the portfolio milestone verified
  3. UAT report created: gsd-portfolio/.ACE/uat/portfolio-uat-{cycle-id}.md
  4. Verdict: PASS / FAIL / DEFERRED-WITH-REASON

Integrated user journeys per milestone:

Journey IDDescriptionMilestoneComponents
J1Login → Chat → /claire:status command → Engine Dashboard viewM1, M2, M3claire-web-app + engine-gateway
J2Chat → KG Search query → results rendered in chatM1, M2, M3claire-web-app + knowledge-gateway
J3New user signup → onboarding → isolated chat contextM2, M3claire-web-app + knowledge-gateway + engine-gateway
J4Create room → invite member → room-scoped KB searchM3claire-web-app + knowledge-gateway

Report template: gsd-portfolio/.ACE/uat/portfolio-uat-{cycle-id}.md


Hybrid Release Model

Core principle (P9 — Release First, Review After): Each project releases on demand when its per-project gates pass. Portfolio Milestone Review runs AFTER all projects are released, not before.

Why hybrid:

  • Projects that are ready ship immediately — no waiting for slower sibling projects
  • Portfolio Launch Marker = official announcement moment when the integrated platform is verified
  • Staging may be partial for some time (M2 released, M3 pending) — expected and documented

Portfolio CHANGELOG & Tag Convention

CHANGELOG path: gsd-portfolio/PORTFOLIO-CHANGELOG.md

Section format per milestone:

Git tag format: portfolio/{cycle-id}/m{n}

  • Example: portfolio/pc1/m1, portfolio/pc1/m2

Announce (optional): Update PORTFOLIO.md milestone completion section; send via messaging-agent Telegram if available.


Three New Principles (extends ADR-0314 P6-P8)

#PrincipleDescription
P9Release First, Review AfterProjects release on demand; portfolio review does not block individual releases
P10Cross-Component VerificationPortfolio SIT Tier 2 is a hard gate before Portfolio Launch Marker — integration must be verified end-to-end
P11Portfolio CHANGELOGEach portfolio milestone has its own CHANGELOG entry and git tag — cross-project traceability and official launch marker

.ACE Directory Extension


Commands

CommandStepDescription
/claire:portfolio-sitPortfolio SIT GateVerify per-project SITs + run Tier 2 scenarios; create report
/claire:portfolio-uatPortfolio UAT GateDaniel runs integrated journeys; create UAT report
/claire:portfolio-launchPortfolio Launch MarkerCreate CHANGELOG + portfolio tag + update PORTFOLIO.md

These are used after /claire:portfolio-review confirms L1-L2 pass, in sequence: portfolio-sit → portfolio-uat → portfolio-launch → portfolio-close.


Consequences

Positive

  1. Concrete “done” criteria — Portfolio milestone has an unambiguous 5-layer checklist; no subjective interpretation.
  2. Cross-component integration verified — Tier 2 SIT scenarios enforced at portfolio level; integration failures caught before launch announcement.
  3. Non-blocking releases — P9 ensures fast projects don’t wait for slow projects; delivery velocity preserved.
  4. Official launch moment — Portfolio CHANGELOG + tag creates a clear “this integrated platform is live” signal.
  5. Traceable — Every portfolio milestone has SIT report, UAT report, CHANGELOG, and git tag. Auditable.

Negative

  1. Portfolio SIT + UAT is manual overhead — ~1-2 hours per milestone for Daniel to run integrated journeys.
    • Mitigation: Tier 2 scenarios are scripted; UAT journeys are defined upfront (J1-J4). Reduce friction.
  2. Portfolio Launch Marker may lag individual project releases — the official “launch” happens after all projects release + portfolio gates pass.
    • Mitigation: P9 (Release First) means users get value immediately; Launch Marker is for formal announcement only.

References

ADRRelationship
ADR-0314Extended with L3-L5 gates and P9-P11 principles
ADR-0818Per-project SIT gate (L1 prerequisite); Tier 2 scenarios promoted to Portfolio SIT Gate (L3)
ADR-0814Per-project UAT gate (L1 prerequisite); Portfolio UAT Gate (L4) is cross-project analog
ADR-0807Per-project release lifecycle; Portfolio Hybrid Model builds on it
ADR-0805Per-project release strategy; Portfolio CHANGELOG + tag extends it at portfolio level
ADR-0309Tier 2 SIT scenarios are the runtime verification of ADR-0309 integration contracts

External References

Governance: [ADR-0000: ADR Governance & Lifecycle](../ADR-0000-adr-governance-lifecycle-standard.md)


Decision Made: 2026-03-06 Implementation Status: Active — applies from Portfolio Cycle PC1 Milestone M2 onwards Confidence: High — extends proven per-project gate model (ADR-0818, ADR-0814) to portfolio level; Hybrid release model avoids coupling project delivery timelines