Skip to content

architecture: overview and handbook - #66

Closed
croadfeldt wants to merge 3 commits into
mainfrom
pr/da1-arch-overview
Closed

architecture: overview and handbook#66
croadfeldt wants to merge 3 commits into
mainfrom
pr/da1-arch-overview

Conversation

@croadfeldt

@croadfeldt croadfeldt commented Jun 16, 2026

Copy link
Copy Markdown
Collaborator

UC map — Cross-cutting substrate — supports all UCs.

Implements UDLM contracts: dcm-project/udlm#15 dcm-project/udlm#16 dcm-project/udlm#17 — foundations & layering of the UDLM substrate this architecture realizes.
Depends on the UDLM substrate landing first (Wave C); wave index: dcm-project/udlm#35.

Decision: Architecture overview, layering, design principles, and operator handbook as one unit.

Part of the staged croadfeldt/dcmdcm-project/dcm upstreaming: single-concern PRs, ≤3k lines, logical boundaries. (1619 lines, 7 files.)

Draft — pending team re-engagement.

Architecture overview, layering, design principles, and operator handbook as one unit.

Signed-off-by: Chris Roadfeldt <chris@roadfeldt.com>
@croadfeldt
croadfeldt force-pushed the pr/da1-arch-overview branch from d426893 to bff3c74 Compare June 17, 2026 16:43

---

## 1. API Path Format (AEP Colon Syntax)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure about the need for this. Why not to define what we want to use from AEP or what we don't want to use.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file isn't the AEP-adoption policy — it's a point-in-time consistency audit, the record of naming/path/terminology drift I found and fixed across the docs. What DCM actually adopts from AEP (and what it deliberately doesn't) lives in adopted-standards-dcm.md. Happy to add a pointer from here to that doc so the split is obvious — or, if you'd rather this audit record not sit in the architecture handbook at all, I'll move it out of the PR; it's history, not normative.


## 2. Approval tier model (runtime enforcement)

UDLM defines the authority tier vocabulary (auto / reviewed / verified /

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please clarify what this means

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks — you're right the terms landed cold. I added a one-line gloss at first mention: the four tiers are an escalating human-gate ladder — auto = no human gate, reviewed = one approver, verified = two independent approvers, authorized = a quorum vote by a named group. UDLM owns the vocabulary; the table right below records how DCM enforces each.

calling the vote-recording API. A Slack bot that collects emoji reactions and
then calls DCM's Admin API is a valid implementation.

### 2.1 Admin API as integration point

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure whether this is about request approval but this should be done by approval policy/logic. If delegated to third party system it should be approved there. Why do we need this api?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed — the decision happens wherever the org runs it, and DCM deliberately doesn't build a deliberation/voting platform (the list just above is only membership, quorum, notification, recording). The endpoint exists only so the external system can report the outcome back: DCM holds the request pipeline, so it has to be told the result to advance or reject and to record it in its own audit trail. Approve in ServiceNow/Slack/Jira; call the endpoint to record what was decided.


### 2.2 Deadline and escalation

DCM manages the approval window and fires escalation notifications:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

assuming that dcm will take responsibility for escalations this config is not enough. How do we know who is the recipient of the escalation? should it be reoccurring? if so for how long? should it be static value or exponential?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fair — escalate alone is under-specified, and the deeper answer is that the ladder is profile/organization-defined, not a fixed platform one. ADR-007 (UDLM) settles this: profiles are composed sets that set floors, and the approval/escalation ladder is part of a profile's operational config, not something the platform hard-codes. The platform supplies the mechanism — escalation target group (platform-admin by default) via the Notification Service, with a bounded repeat cadence and max attempts; the profile supplies the ladder. So the recipient and retry behavior are declared, not ad hoc.


## 3. Profile-governed system constraints

DCM ships six built-in profiles (`minimal`, `dev`, `standard`, `prod`, `fsi`,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

built-in profiles are restrictive and the admin should be able to decide what they need and to me it should be codified in policies. Is there any other place or reason why we constrain the system?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good push. The six built-ins are presets, not a closed set: ADR-007 (UDLM) makes profiles first-class composed sets that set floors — built-ins are immutable, and any modification forks a new custom profile (copy-on-write, reproducible and audited). Everything you'd want to tune — thresholds, tiers, automation level, review windows — is admin-tunable that way; the only thing not switchable is the small non-negotiable floor (CPX-001 and the other security invariants). So it's constrained only at that floor, on purpose.


---

## 6. System policies (DCM realization)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how this be enforced for policies defined by admins/SRE?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These apply to DCM's project documentation, not to admin/SRE policy artifacts — so there's nothing to enforce at runtime here. Admin/SRE-authored policies are governed separately by the policy validation pipeline (schema validation plus the governance policies), not by these doc-discipline rules. Happy to make that scope explicit in the doc so it doesn't read as a runtime constraint.

Comment thread architecture/layering.md
│ • ingress / egress, APIs, service boundaries │
│ • drift detection, recovery utilities, expiration │
│ • persistence (PostgreSQL mandated for this realization) │
│ • specific 9-layer canonical location hierarchy │

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please clarify what 9-layer hierarchy is

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks — that was a dangling forward reference. I added the gloss and link at first mention: it's DCM's canonical location topology, Country → Region → … → Unit, nine levels — DCM's concrete choice for UDLM's abstract layered-topology contract — fully defined in topology/canonical-9-layer-hierarchy.md.

Comment thread architecture/layering.md

## Compatibility model (LOCKED)

**UDLM enforces wire-level compatibility at the data/event/contract boundary;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what about backward compatibility for udlm? how it should be evolved?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UDLM's evolution is governed in the UDLM repo, not here: SPEC MAJOR/MINOR, with wire-level compatibility guaranteed within a MAJOR (UDLM CONFORMANCE §9). DCM pins a UDLM MAJOR, and the "Compatibility model (LOCKED)" section just below states DCM enforces wire-compat at the data/event/contract boundary. So backward compatibility is a UDLM-side guarantee DCM consumes; happy to add the cross-link to the UDLM versioning doc so that isn't left implicit.


DCM ships with six built-in profiles: `minimal`, `dev`, `standard`, `prod`,
`fsi`, `sovereign`. The profile controls dozens of enforcement and threshold
settings simultaneously: credential lifetimes, TLS requirements, MFA

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

now I see what configuration profiles influence. I see a gap with this. I have been thinking about the profiles for infrastructure DCM manages where as they are purely about the control plane. How do we cover the infra?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a genuinely important line to draw — thank you. I added a subsection (§5.1, "Profiles govern the control plane, not the managed infrastructure"): profiles govern how the control plane behaves — strictness, thresholds, automation — while the infrastructure DCM manages is shaped by a different set of levers (placement/validation/transformation policies, catalog and composite-service definitions, and provider capability declarations). Profile = how the control plane operates; policy + catalog + provider = what gets built and under what constraints.

Comment thread architecture/overview.md Outdated

---

## Reading order for new contributors

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should be at the beginning of this markdown

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed — I moved "Reading order for new contributors" up to right after the intro, ahead of the repo-organization tables. It's the first thing a new reader needs.

Brings this PR's files up to the current DCM spec state (post UDLM/DCM
separation, AEP alignment, taxonomy reconciliation, and review resolutions).
Content-only update on existing paths.

Signed-off-by: croadfeldt <chris@roadfeldt.com>
croadfeldt referenced this pull request in croadfeldt/dcm Jul 10, 2026
review: resolve open review comments (dcm #64/#66/#69 doc edits)
@croadfeldt
croadfeldt force-pushed the pr/da1-arch-overview branch 2 times, most recently from e740b32 to 67663cc Compare July 11, 2026 00:00
croadfeldt referenced this pull request in croadfeldt/dcm Jul 12, 2026
review: resolve open review comments (dcm #64/#66/#69 doc edits)
@croadfeldt
croadfeldt force-pushed the pr/da1-arch-overview branch from 0d1c5b5 to 65ddc44 Compare July 15, 2026 04:06
@croadfeldt

Copy link
Copy Markdown
Collaborator Author

Thanks @pkliczewski — captured, not closed. Superseded by the ordered, scoped set (#109#117), tracked in #108; your feedback carries forward as CF-7 (profiles vs policies → the ADR-049/050 invariant-vs-policy split), CF-6 (adopt AEP by reference), CF-12 (legibility). See #108; please re-review on the new set.

@croadfeldt croadfeldt closed this Jul 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants