Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 52 additions & 2 deletions docs/adr/0005-unified-technology-request-registry.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# ADR 0005 — Unified Technology Request: request registry & governance tracking

**Status:** Proposed — for discussion with the UTR working group (Hunter, Victoravich, Bartlett, Ewart, Robison)
**Status:** Accepted for the registry layer and Phase 1 (shipped 2026-07-24). The cross-institutional pieces — the TDX boundary, the prioritization model, and approved-tools ownership — remain **proposed**, pending the UTR working group (Hunter, Victoravich, Bartlett, Ewart, Robison). See the 2026-07-27 amendment.
**Date:** 2026-07-23
**Deciders:** Pending — Barrie Robison (IIDS) + UTR working group
**Deciders:** Barrie Robison (IIDS), for the registry design and Phase 1 as built. Working-group ratification outstanding for the pieces that bind other offices.
**Related:** [ADR 0001](./0001-product-lifecycle-taxonomy.md) (lifecycle), [ADR 0004](./0004-clickup-ingestion-boundary.md) (ingestion pattern this extends), Migration 012 (enterprise-replacement facts), `UnifiedTechRequest/Unified Technology Request Process.pptx` (July 2026 draft), UTR meeting notes + email thread of 2026-07-20 → 2026-07-23

## Context
Expand Down Expand Up @@ -373,3 +373,53 @@ story with no public vs. internal distinction**.
- This supersedes the "internal first" posture above **for the request
queue**. Prioritization rounds (Phase 4) will make their own
visibility call when they land.

### 2026-07-27 — Status: Proposed → Accepted for Phase 1

**Context.** This ADR was written as a proposal to the UTR working group
and its header still said `Proposed` / `Deciders: Pending` three days
after Phase 1 shipped. A documentation audit flagged the mismatch: the
index in [`docs/adr/README.md`](./README.md) was telling readers that a
decision embodied in live tables, live code, and a public surface had not
been made yet.

The confusion is real rather than clerical. This ADR does two different
things. It designs a registry **this repo owns and can build alone**, and
it proposes a division of labour that **binds other offices** — TDX as
the workflow system of record, a shared prioritization model, OIT's
ownership of the approved-tools list. The first was decided and built.
The second is still a proposal, and nothing here can accept it on the
working group's behalf.

**Decision.** Split the status rather than flatten it.

- **Accepted** — the registry layer and Phase 1 as built: `tech_requests`,
`tech_request_events`, `tech_request_links`,
`tech_request_project_links`, and `roi_claims` (Migration 018);
`lib/utr.ts` and `lib/requests.ts`; the backfill of ClickUp requests,
site submissions, and the GEO/Scrunch records; the survey candidates
registered by Migration 019; and `/portfolio/pipeline` as the single
all-origin queue (the Phase 2 line item pulled forward per the
2026-07-24 amendment). Decided by the portfolio owner; these needed no
external dependency, which is exactly why Phase 1 was scoped that way.
- **Still proposed** — §1's assignment of workflow to TDX, §5's
`sync-tdx.ts` boundary, the prioritization model (open question 1), and
approved-tools ownership (open question 2). These describe how other
offices would work and are for the working group to ratify, amend, or
reject.
- **Not yet built** — Phases 2, 3, and 4. No `project_interest_pool`,
`governance_flags`, `project_gates`, or `prioritization_*` tables
exist; `lib/approved-tools.ts`, `/standards/approved-tools`,
`/internal/prioritization`, and `scripts/sync-tdx.ts` are all
unwritten. Phase 4's TDX sync remains blocked on API access.

**Why not simply mark the whole thing Accepted.** It would assert that a
group which has not met on it signed off on a division of institutional
labour. The site's own standard is that every claim names a human and
holds up; an ADR header overclaiming ratification fails that standard in
the audit trail itself.

**Follow-up.** When the working group does take this up, record the
outcome as a further amendment — including a rejection, if that is the
outcome. The header should stop hedging once there is something real to
point at.
6 changes: 5 additions & 1 deletion docs/adr/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ By convention, follow the shape of [`0001-product-lifecycle-taxonomy.md`](./0001
# ADR NNNN — Short title

**Status:** Proposed | Accepted | Superseded by [ADR NNNN](./NNNN-...)
(an ADR that decides some things this repo owns and proposes
others that bind another office may scope its status — see
ADR 0005 — but say which part is which, and never let a
header imply a ratification that hasn't happened)
**Date:** YYYY-MM-DD
**Deciders:** Names of the people who actually made the call
**Supersedes:** (optional) Pointer to the ADR or pattern this replaces
Expand Down Expand Up @@ -82,6 +86,6 @@ ADRs are **append-only**. To change a decision:
| [0002](./0002-strategic-plan-alignment-explorer.md) | Strategic Plan Alignment Explorer | Accepted | 2026-05-03 |
| [0003](./0003-strategic-plan-map-home.md) | Strategic-Plan Map Home + `/explore` Retirement | Accepted | 2026-05-05 |
| [0004](./0004-clickup-ingestion-boundary.md) | ClickUp Ingestion Boundary | Accepted | 2026-07-10 |
| [0005](./0005-unified-technology-request-registry.md) | Unified Technology Request: Request Registry & Governance Tracking | Proposed | 2026-07-23 |
| [0005](./0005-unified-technology-request-registry.md) | Unified Technology Request: Request Registry & Governance Tracking | Accepted (Phase 1); cross-institutional pieces proposed | 2026-07-23 |
| [0006](./0006-coordination-surface-split.md) | Split `/coordination` out of `/standards` | Accepted | 2026-07-25 |
| [0007](./0007-site-assistant-tool-grounded-qa.md) | Site Assistant: Tool-Grounded Q&A with Strict Citation | Accepted | 2026-07-27 |
33 changes: 20 additions & 13 deletions lib/governance/vocabularies.ts
Original file line number Diff line number Diff line change
Expand Up @@ -572,76 +572,83 @@ export const vocabularyGroups: VocabularyGroup[] = [
"code": "idea",
"label": "Idea",
"displayOrder": 1,
"description": "Named with a unit-of-interest; not yet committed to build.",
"verificationRule": "No committed operationalOwner OR no committed iidsSponsor; repoUrl empty or repo has zero commits."
"description": "Named with a unit-of-interest; no owner or sponsor engaged yet.",
"verificationRule": "No committed operationalOwner AND no committed iidsSponsor (either one engaged makes it scoping); repoUrl empty or repo has zero commits."
},
{
"code": "scoping",
"label": "Scoping",
"displayOrder": 2,
"description": "Named humans engaged; feasibility and shape being worked out before a formal go decision.",
"verificationRule": "A named operationalOwners[0] OR iidsSponsor is engaged (neither means it is still idea); no liveUrl; pilotCohort empty. No repo-cadence requirement — scoping produces framing and feasibility work, not necessarily commits."
},
{
"code": "approved",
"label": "Approved",
"displayOrder": 2,
"displayOrder": 3,
"description": "Committed to build with named owner and sponsor; not yet under active development.",
"verificationRule": "operationalOwners[0] set AND iidsSponsor set AND non-empty description; no liveUrl; repo (if present) has <10 commits OR no commits in last 14 days."
},
{
"code": "building",
"label": "Building",
"displayOrder": 3,
"displayOrder": 4,
"description": "Active development. Code exists but not yet for real users.",
"verificationRule": "repoUrl set; lastCommitDate within last 60 days; no liveUrl (or liveUrl flagged liveUrlIsStaging:true); pilotCohort empty."
},
{
"code": "prototype",
"label": "Prototype",
"displayOrder": 4,
"displayOrder": 5,
"description": "Demo-able but quiet — feature-complete or dormant.",
"verificationRule": "pilotCohort empty; either lastCommitDate older than 30 days OR featureComplete:true."
},
{
"code": "piloting",
"label": "Piloting",
"displayOrder": 5,
"displayOrder": 6,
"description": "In use by a bounded, named cohort.",
"verificationRule": "liveUrl set; pilotCohort populated with size > 0 and a bounded scope."
},
{
"code": "production",
"label": "Production",
"displayOrder": 6,
"displayOrder": 7,
"description": "In real institutional use beyond the pilot cohort.",
"verificationRule": "Publicly-accessible artifact: liveUrl OR a public repoUrl (isPrivateRepo:false) for repo-as-artifact deliverables (infrastructure, scaffolds, appliances). productionScope and supportContact populated."
},
{
"code": "maintained",
"label": "Maintained",
"displayOrder": 7,
"displayOrder": 8,
"description": "In production but in maintenance-only mode.",
"verificationRule": "Inherits production accessibility (liveUrl or public repo); no commits to main in last 90 days; no open feature issues — only bug-, security-, or chore-labeled."
},
{
"code": "paused",
"label": "Paused",
"displayOrder": 8,
"displayOrder": 9,
"description": "Deliberately on hold — not abandoned; expected to resume.",
"verificationRule": "Deliberate hold, so no commit-cadence requirement; pilotCohort empty."
},
{
"code": "sunsetting",
"label": "Sunsetting",
"displayOrder": 9,
"displayOrder": 10,
"description": "Being wound down with a planned successor.",
"verificationRule": "sunsetDate (ISO) set; replacedBy populated — successor project slug or the literal 'manual-process'."
},
{
"code": "archived",
"label": "Archived",
"displayOrder": 10,
"displayOrder": 11,
"description": "Stopped. Record kept for institutional memory.",
"verificationRule": "liveUrl returns 404 / is null / domain dead, or (for repo-as-artifact) repoUrl is archived/deleted; service stopped."
},
{
"code": "tracked",
"label": "Tracked",
"displayOrder": 11,
"displayOrder": 12,
"description": "Externally-owned project IIDS observes but does not build.",
"verificationRule": "trackingOnly:true; bypasses the operational ladder."
}
Expand All @@ -658,7 +665,7 @@ export const vocabularyGroups: VocabularyGroup[] = [
"label": "Exploring",
"displayOrder": 1,
"description": "Thinking about it / committed to build.",
"verificationRule": "Rolls up from ProjectStatus values: idea, approved."
"verificationRule": "Rolls up from ProjectStatus values: idea, scoping, approved."
},
{
"code": "building",
Expand Down
2 changes: 1 addition & 1 deletion vendor/data-governance
Loading