Skip to content

Commit a738677

Browse files
unionalclaude
andcommitted
docs(web): fold the specification relation into the existing model pages
Connections gains what a connection actually relates, and the three kinds of strain gain their derivation rather than standing as an observed list. Canonical execution gains a step: criteria are derived from the Request before the replay runs, so neither party to the comparison authored the bar. That is the mechanism the "can the comparison indict the workflow" question was asking for, and open-questions now says so — along with what it does not answer. Also records the topology-universality question raised in design discussion: the artifact catalog and unit-of-change edges look portable, governance targets are local by construction. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NVUmAFcaehyGJRUSxUUtFU
1 parent 6004912 commit a738677

3 files changed

Lines changed: 69 additions & 6 deletions

File tree

apps/web/src/content/docs/model/canonical-execution.md

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: Canonical execution
3-
description: How confluence is bought — distill a change to a Request, replay it, compare
3+
description: How confluence is bought — distill a change to a Request, derive its criteria, replay it, compare
44
---
55

66
:::caution[Design, not implementation]
@@ -26,18 +26,40 @@ landed. It is lifted, distilled, and replayed:
2626
1. **Lift** the raw diff from lines into artifact-set vocabulary.
2727
2. **Distill** it to a **Request** — the intent behind the change, separated from the
2828
particular expression of it — together with the workflow that applies.
29-
3. **Replay** the Request through that workflow from its starting point.
30-
4. **Compare** the replayed delta against the change that arrived.
29+
3. **Derive the criteria** the settled state must satisfy, from the Request.
30+
4. **Replay** the Request through that workflow from its starting point.
31+
5. **Compare** the replayed delta against the change that arrived.
3132

3233
The replay is an *independent derivation*. It does not read the incoming change as an
3334
answer; it derives its own and then looks.
3435

3536
**Status: Thesis.** Flagged by its author as needing further design and analysis. The
3637
loop's shape is agreed; several of its parts are not.
3738

39+
## Criteria are derived before the replay, not after
40+
41+
Step 3 is ordered deliberately, and the order is the whole of its value.
42+
43+
A [specification](/cyber-truss/model/specification/) is intent plus criteria, and the
44+
comparison in step 5 is a comparison of criteria. If those criteria were read off the
45+
replay's output, the comparison would be checking the workflow against itself and could
46+
only ever conclude *"the incoming change is wrong."*
47+
48+
Derived from the Request instead, the criteria are authored by neither party to the
49+
comparison. A workflow that produces something conforming-but-wrong now fails criteria it
50+
did not write. This is the same move SDD makes by freezing the `.feature` suite before the
51+
implementation exists, generalized from one gate to every crossing.
52+
53+
It does not close the question below — criteria derived from a misread Request are wrong in
54+
the same direction as everything downstream of them. It replaces *hope that the comparison
55+
is honest* with a mechanism that can be inspected.
56+
57+
**Status: Thesis.** The ordering is agreed; what "derive the criteria" consumes beyond the
58+
Request is not.
59+
3860
## The inversion
3961

40-
Step 4 changes what the incoming change *is*.
62+
Step 5 changes what the incoming change *is*.
4163

4264
The designer's mockup is not the deliverable. It is a **prediction of the settled state**,
4365
and the replay is the independent derivation that checks it. The comparison is where the
@@ -133,4 +155,9 @@ The comparison step is the only protection, and it works only if disagreement is
133155
as evidence about **the workflow** as often as about the change. A comparison that can
134156
only conclude *"this change is wrong"* will launder a defective workflow indefinitely.
135157

136-
**Status: Settled** as a requirement on the comparison. **Open:** how it is enforced.
158+
Deriving criteria [ahead of the replay](#criteria-are-derived-before-the-replay-not-after)
159+
is the mechanism proposed against this. It is not yet a full answer, because it moves the
160+
exposure up to the Request rather than removing it.
161+
162+
**Status: Settled** as a requirement on the comparison. **Open:** whether independently
163+
derived criteria are enough to enforce it.

apps/web/src/content/docs/model/connections.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,16 @@ same one.
2929

3030
**Status: Settled.**
3131

32+
## What a connection relates
33+
34+
Two artifact-sets, at their [specifications](/cyber-truss/model/specification/) rather than
35+
their implementations. There is no diff between a TypeScript module and a Figma frame, so a
36+
connection stated over implementations could never be evaluated; stated over criteria, both
37+
ends are written in one vocabulary.
38+
39+
**Status: Settled.** The argument is on the
40+
[Specification](/cyber-truss/model/specification/#the-problem-this-solves) page.
41+
3242
## Connections are undirected
3343

3444
A connection is a relation between two artifact-sets. It is **not** an arrow.
@@ -95,6 +105,12 @@ Axis 2. *This skill violates the agent-instruction guidelines.*
95105

96106
State-driven, evaluable on a cold repository, and requires no delta.
97107

108+
The three are not an arbitrary list. Read through the specification relation they are the
109+
three ways a specification and its implementation can fail to meet: both in hand and
110+
disagreeing, the implementation elsewhere, or no implementation in the delta at all. That
111+
derivation is on the [Specification](/cyber-truss/model/specification/#what-the-roles-explain)
112+
page.
113+
98114
**Status: Settled** that the three are distinct and block differently. **Open:** the
99115
precise boundary conditions on each.
100116

apps/web/src/content/docs/model/open-questions.md

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,14 @@ defective workflow converges reliably on the same wrong answer, and normalizes a
7272
ad-hoc changes that would have revealed it.
7373

7474
The comparison must be able to conclude *"the workflow is wrong"* and not only *"this
75-
change is wrong."* How that is enforced — rather than merely hoped for — is unresolved.
75+
change is wrong."*
76+
77+
The mechanism now proposed is
78+
[deriving the criteria from the Request before the replay runs](/cyber-truss/model/canonical-execution/#criteria-are-derived-before-the-replay-not-after),
79+
so that neither party to the comparison authored the bar it is judged against. That is a
80+
real mechanism where there was previously only a requirement, but it relocates the exposure
81+
rather than removing it: criteria derived from a misread Request are wrong in the same
82+
direction as everything downstream of them. Whether the relocation is enough is unresolved.
7683

7784
## Where does the controller interface sit?
7885

@@ -97,3 +104,16 @@ for settling it before there is more than one controller rather than after.
97104
differently shaped, should be run through the model before it is fixed.
98105
- **What form does provenance take** on deltas produced by canonical execution, so they
99106
do not re-trigger it?
107+
- **How are specification levels identified across artifact types?** Two specifications are
108+
comparable when they sit at
109+
[the same rung](/cyber-truss/model/specification/#specifications-exist-at-every-level)
110+
function, module, product, system. What fixes the rung for an artifact type that has no
111+
obvious analogue of a function is undefined.
112+
- **How much of the artifact topology is universal?** The catalog of artifact *roles* looks
113+
close to portable across repositories, and so do most
114+
[unit-of-change](/cyber-truss/model/artifact-sets/#axis-1--unit-of-change) edges, which
115+
follow from what the artifacts mean.
116+
[Governance targets](/cyber-truss/model/artifact-sets/#axis-2--governance-target) are
117+
local by construction — they are a team's opinion about which criteria apply where. If
118+
that split holds, the product ships a default topology that repositories extend and
119+
override rather than a blank page. Empirical, and untested against a second repository.

0 commit comments

Comments
 (0)