Compare commits

..
Author SHA1 Message Date
jarvis-at-skic f7a68d7e37 docs: [verified] connect Strategy through practical Delivery journey
Build and publish Eldorado documentation / build (pull_request) Successful in 42s
2026-10-08 13:29:59 +00:00
jarvis-at-skic c934ddb5e0 Merge pull request 'docs: separate workflow effectiveness from skill health' (#36) from feat/measurement-two-tracks into main
Build and publish Eldorado documentation / build (push) Successful in 43s
2026-10-08 04:17:58 -07:00
50 changed files with 1573 additions and 95 deletions

No files matched your search

@@ -50,7 +50,7 @@
"id": "agent", "id": "agent",
"type": "external", "type": "external",
"label": "AI Agent", "label": "AI Agent",
"tag": "Supported client + approved skills", "tag": "Qualified client + authorized pilot",
"sublabel": "Produce work within the boundary", "sublabel": "Produce work within the boundary",
"pos": [ "pos": [
60, 60,
+1 -1
View File
@@ -50,7 +50,7 @@
"id": "agent", "id": "agent",
"type": "external", "type": "external",
"label": "AI Agent", "label": "AI Agent",
"tag": "Supported client + approved skills", "tag": "Qualified client + authorized pilot",
"sublabel": "Produce work within the boundary", "sublabel": "Produce work within the boundary",
"pos": [ "pos": [
700, 700,
@@ -49,9 +49,9 @@
{ {
"id": "canary", "id": "canary",
"type": "external", "type": "external",
"label": "03 Qualify real use", "label": "03 Authorize pilot",
"tag": "Human + AI Agent", "tag": "Owning team approver",
"sublabel": "Exact client + bounded canary", "sublabel": "Qualified; bounded pilot",
"pos": [ "pos": [
60, 60,
860 860
@@ -67,7 +67,7 @@
"type": "backend", "type": "backend",
"label": "04 Approve exact scope", "label": "04 Approve exact scope",
"tag": "Accountable approvers", "tag": "Accountable approvers",
"sublabel": "Digest + permitted uses + expiry", "sublabel": "Pilot evidence + digest + expiry",
"pos": [ "pos": [
60, 60,
1230 1230
@@ -49,9 +49,9 @@
{ {
"id": "canary", "id": "canary",
"type": "external", "type": "external",
"label": "03 Qualify real use", "label": "03 Authorize pilot",
"tag": "Human + AI Agent", "tag": "Owning team approver",
"sublabel": "Exact client + bounded canary", "sublabel": "Qualified; bounded pilot",
"pos": [ "pos": [
520, 520,
500 500
@@ -67,7 +67,7 @@
"type": "backend", "type": "backend",
"label": "04 Approve exact scope", "label": "04 Approve exact scope",
"tag": "Accountable approvers", "tag": "Accountable approvers",
"sublabel": "Digest + permitted uses + expiry", "sublabel": "Pilot evidence + digest + expiry",
"pos": [ "pos": [
740, 740,
720 720
@@ -66,8 +66,8 @@
"id": "validate", "id": "validate",
"type": "external", "type": "external",
"label": "Revalidate", "label": "Revalidate",
"tag": "Independent reviewers", "tag": "Quality Engineering reviewer",
"sublabel": "Regression + client evidence", "sublabel": "Fitness + regression + client checks",
"pos": [ "pos": [
60, 60,
860 860
@@ -66,8 +66,8 @@
"id": "validate", "id": "validate",
"type": "external", "type": "external",
"label": "Revalidate", "label": "Revalidate",
"tag": "Independent reviewers", "tag": "Quality Engineering reviewer",
"sublabel": "Regression + client evidence", "sublabel": "Fitness + regression + client checks",
"pos": [ "pos": [
560, 560,
970 970
@@ -283,7 +283,7 @@
] ]
], ],
"labelAt": [ "labelAt": [
1900, 1930,
490 490
] ]
}, },
@@ -6,9 +6,9 @@
{"id": "workflow", "type": "backend", "label": "Workflow effectiveness", "tag": "01 / Baseline current work", "sublabel": "Accepted work, time, failures\nCost, effort + experience\nSelect relevant contracts only\nSkills need not exist yet", "pos": [90, 50], "size": [700, 350], "icon": "none"}, {"id": "workflow", "type": "backend", "label": "Workflow effectiveness", "tag": "01 / Baseline current work", "sublabel": "Accepted work, time, failures\nCost, effort + experience\nSelect relevant contracts only\nSkills need not exist yet", "pos": [90, 50], "size": [700, 350], "icon": "none"},
{"id": "compare", "type": "backend", "label": "Compare the same outcomes", "tag": "02 / After introducing skills", "sublabel": "Same workflow + acceptance\nSame follow-up + source coverage\nKeep gaps and task mix visible\nBefore / after is not causality", "pos": [90, 450], "size": [700, 350], "icon": "none"}, {"id": "compare", "type": "backend", "label": "Compare the same outcomes", "tag": "02 / After introducing skills", "sublabel": "Same workflow + acceptance\nSame follow-up + source coverage\nKeep gaps and task mix visible\nBefore / after is not causality", "pos": [90, 450], "size": [700, 350], "icon": "none"},
{"id": "interpret", "type": "external", "label": "Is work getting better?", "tag": "03 / Interpret workflow evidence", "sublabel": "Balance value, quality and risk\nMore adoption is not better work\nKeep live outcomes separate\nfrom skill evaluation cases", "pos": [90, 850], "size": [700, 350], "icon": "none"}, {"id": "interpret", "type": "external", "label": "Is work getting better?", "tag": "03 / Interpret workflow evidence", "sublabel": "Balance value, quality and risk\nMore adoption is not better work\nKeep live outcomes separate\nfrom skill evaluation cases", "pos": [90, 850], "size": [700, 350], "icon": "none"},
{"id": "skills", "type": "frontend", "label": "Skills effectiveness & health", "tag": "01 / Qualify named skill versions", "sublabel": "Selection precision + recall\nSeparate evaluation evidence\nNo applicable skills: N/A\nNot a zero workflow baseline", "pos": [90, 1250], "size": [700, 350], "icon": "none"}, {"id": "skills", "type": "frontend", "label": "Skills effectiveness & health", "tag": "01 / Qualify named skill versions", "sublabel": "Quality: artifact fitness + safety\nCandidate / approved regression\nSelection precision + recall\nNo applicable skills: N/A", "pos": [90, 1250], "size": [700, 350], "icon": "none"},
{"id": "observe", "type": "frontend", "label": "Observe use + upkeep", "tag": "02 / Adoption and maintenance", "sublabel": "Supported bundle coverage\nApproved-workflow adoption\nSubstantive review evidence\nMissing observations: unknown", "pos": [90, 1650], "size": [700, 350], "icon": "none"}, {"id": "observe", "type": "frontend", "label": "Observe use + upkeep", "tag": "02 / Adoption and maintenance", "sublabel": "Supported bundle coverage\nApproved-workflow adoption\nSubstantive review evidence\nMissing observations: unknown", "pos": [90, 1650], "size": [700, 350], "icon": "none"},
{"id": "improve", "type": "external", "label": "Improve, retain or retire", "tag": "03 / Use both tracks together", "sublabel": "16 optional candidate contracts\n9 prototype / 7 unimplemented\nNo mandatory collection\nNo installed telemetry claimed", "pos": [90, 2050], "size": [700, 350], "icon": "none"} {"id": "improve", "type": "external", "label": "Improve, retain or retire", "tag": "03 / Use both tracks together", "sublabel": "Owner + independent evidence\nRetain / improve / stop\nNew scope needs new comparison\nNo mandatory collection", "pos": [90, 2050], "size": [700, 350], "icon": "none"}
], ],
"connections": [ "connections": [
{"id": "workflow-compare", "from": "workflow", "to": "compare", "label": "", "fromSide": "bottom", "toSide": "top", "route": "straight", "width": 4, "variant": "default"}, {"id": "workflow-compare", "from": "workflow", "to": "compare", "label": "", "fromSide": "bottom", "toSide": "top", "route": "straight", "width": 4, "variant": "default"},
@@ -6,9 +6,9 @@
{"id": "workflow", "type": "backend", "label": "Workflow effectiveness", "tag": "01 / Baseline current work", "sublabel": "Accepted work, time, failures\nCost, effort + experience\nSelect relevant contracts only\nSkills need not exist yet", "pos": [40, 40], "size": [720, 310], "icon": "none"}, {"id": "workflow", "type": "backend", "label": "Workflow effectiveness", "tag": "01 / Baseline current work", "sublabel": "Accepted work, time, failures\nCost, effort + experience\nSelect relevant contracts only\nSkills need not exist yet", "pos": [40, 40], "size": [720, 310], "icon": "none"},
{"id": "compare", "type": "backend", "label": "Compare the same outcomes", "tag": "02 / After introducing skills", "sublabel": "Same workflow + acceptance\nSame follow-up + source coverage\nKeep gaps and task mix visible\nBefore / after is not causality", "pos": [840, 40], "size": [720, 310], "icon": "none"}, {"id": "compare", "type": "backend", "label": "Compare the same outcomes", "tag": "02 / After introducing skills", "sublabel": "Same workflow + acceptance\nSame follow-up + source coverage\nKeep gaps and task mix visible\nBefore / after is not causality", "pos": [840, 40], "size": [720, 310], "icon": "none"},
{"id": "interpret", "type": "external", "label": "Is work getting better?", "tag": "03 / Interpret workflow evidence", "sublabel": "Balance value, quality and risk\nMore adoption is not better work\nKeep live outcomes separate\nfrom skill evaluation cases", "pos": [1640, 40], "size": [720, 310], "icon": "none"}, {"id": "interpret", "type": "external", "label": "Is work getting better?", "tag": "03 / Interpret workflow evidence", "sublabel": "Balance value, quality and risk\nMore adoption is not better work\nKeep live outcomes separate\nfrom skill evaluation cases", "pos": [1640, 40], "size": [720, 310], "icon": "none"},
{"id": "skills", "type": "frontend", "label": "Skills effectiveness & health", "tag": "01 / Qualify named skill versions", "sublabel": "Selection precision + recall\nSeparate evaluation evidence\nNo applicable skills: N/A\nNot a zero workflow baseline", "pos": [40, 590], "size": [720, 310], "icon": "none"}, {"id": "skills", "type": "frontend", "label": "Skills effectiveness & health", "tag": "01 / Qualify named skill versions", "sublabel": "Quality: artifact fitness + safety\nCandidate / approved regression\nSelection precision + recall\nNo applicable skills: N/A", "pos": [40, 590], "size": [720, 310], "icon": "none"},
{"id": "observe", "type": "frontend", "label": "Observe use + upkeep", "tag": "02 / Adoption and maintenance", "sublabel": "Supported bundle coverage\nApproved-workflow adoption\nSubstantive review evidence\nMissing observations: unknown", "pos": [840, 590], "size": [720, 310], "icon": "none"}, {"id": "observe", "type": "frontend", "label": "Observe use + upkeep", "tag": "02 / Adoption and maintenance", "sublabel": "Supported bundle coverage\nApproved-workflow adoption\nSubstantive review evidence\nMissing observations: unknown", "pos": [840, 590], "size": [720, 310], "icon": "none"},
{"id": "improve", "type": "external", "label": "Improve, retain or retire", "tag": "03 / Use both tracks together", "sublabel": "16 optional candidate contracts\n9 prototype / 7 unimplemented\nNo mandatory collection\nNo installed telemetry claimed", "pos": [1640, 590], "size": [720, 310], "icon": "none"} {"id": "improve", "type": "external", "label": "Improve, retain or retire", "tag": "03 / Use both tracks together", "sublabel": "Owner + independent evidence\nRetain / improve / stop\nNew scope needs new comparison\nNo mandatory collection", "pos": [1640, 590], "size": [720, 310], "icon": "none"}
], ],
"connections": [ "connections": [
{"id": "workflow-compare", "from": "workflow", "to": "compare", "label": "", "fromSide": "right", "toSide": "left", "route": "straight", "width": 4, "variant": "default"}, {"id": "workflow-compare", "from": "workflow", "to": "compare", "label": "", "fromSide": "right", "toSide": "left", "route": "straight", "width": 4, "variant": "default"},
@@ -66,8 +66,8 @@
"id": "outcome", "id": "outcome",
"type": "external", "type": "external",
"label": "Useful outcome?", "label": "Useful outcome?",
"tag": "Workflow evidence", "tag": "Declared evaluation cases",
"sublabel": "Baseline + repeated trials", "sublabel": "Fitness + revision regression",
"pos": [ "pos": [
60, 60,
1230 1230
@@ -98,8 +98,8 @@
"id": "accept", "id": "accept",
"type": "backend", "type": "backend",
"label": "Accept evidence", "label": "Accept evidence",
"tag": "All mandatory gates passed", "tag": "Quality Engineering reviewer",
"sublabel": "Proceed to scoped approval", "sublabel": "Owner decides bounded pilot",
"pos": [ "pos": [
60, 60,
2060 2060
+4 -4
View File
@@ -66,8 +66,8 @@
"id": "outcome", "id": "outcome",
"type": "external", "type": "external",
"label": "Useful outcome?", "label": "Useful outcome?",
"tag": "Workflow evidence", "tag": "Declared evaluation cases",
"sublabel": "Baseline + repeated trials", "sublabel": "Fitness + revision regression",
"pos": [ "pos": [
60, 60,
790 790
@@ -98,8 +98,8 @@
"id": "accept", "id": "accept",
"type": "backend", "type": "backend",
"label": "Accept evidence", "label": "Accept evidence",
"tag": "All mandatory gates passed", "tag": "Quality Engineering reviewer",
"sublabel": "Proceed to scoped approval", "sublabel": "Owner decides bounded pilot",
"pos": [ "pos": [
1430, 1430,
160 160
@@ -61,8 +61,8 @@
"col": 0, "col": 0,
"yOffset": 140.0, "yOffset": 140.0,
"type": "backend", "type": "backend",
"label": "Use skills", "label": "Qualify, then pilot",
"sublabel": "Real work with a human + AI Agent.", "sublabel": "Authorize bounded human + AI work.",
"width": 340, "width": 340,
"height": 240 "height": 240
}, },
+2 -2
View File
@@ -61,8 +61,8 @@
"col": 2, "col": 2,
"yOffset": 160, "yOffset": 160,
"type": "backend", "type": "backend",
"label": "Use skills", "label": "Qualify, then pilot",
"sublabel": "Real work with a human + AI Agent.", "sublabel": "Authorize bounded human + AI work.",
"width": 340, "width": 340,
"height": 240 "height": 240
}, },
@@ -39,7 +39,7 @@
"yOffset": 140.0, "yOffset": 140.0,
"type": "backend", "type": "backend",
"label": "Autonomous Agent", "label": "Autonomous Agent",
"sublabel": "Future: use proven skills and practices.", "sublabel": "Future: separately justified authority.",
"width": 340, "width": 340,
"height": 240 "height": 240
} }
+1 -1
View File
@@ -39,7 +39,7 @@
"yOffset": 0, "yOffset": 0,
"type": "backend", "type": "backend",
"label": "Autonomous Agent", "label": "Autonomous Agent",
"sublabel": "Future: use proven skills and practices.", "sublabel": "Future: separately justified authority.",
"width": 340, "width": 340,
"height": 240 "height": 240
} }
@@ -0,0 +1,249 @@
{
"schema_version": 1,
"diagram_type": "architecture",
"meta": {
"title": "TO-BE: stage01",
"output": "static/diagrams/strategy-stage01-mobile/index.html",
"quality_profile": "showcase",
"legend": {
"mode": "hidden"
},
"viewBox": [
1000,
2950
]
},
"components": [
{
"id": "baseline",
"type": "external",
"label": "Understand + baseline",
"tag": "Product Engineering workflow owner",
"sublabel": "Workflow map + desired improvement\nSelected measures + starting evidence\nGovernance: people, scope, authority",
"pos": [
200,
40
],
"size": [
740,
300
],
"icon": "none"
},
{
"id": "engineer",
"type": "external",
"label": "Engineer connected skills",
"tag": "Owning team + independent reviewer",
"sublabel": "Triggers, inputs and output handoffs\nPinned candidate + client + limits\nDeliver: patch and regression tests",
"pos": [
200,
450
],
"size": [
740,
300
],
"icon": "none"
},
{
"id": "qualify",
"type": "security",
"label": "Fit for a bounded pilot?",
"tag": "Quality evidence \u2192 owning approver",
"sublabel": "Artifact + safety + regression report\nPass: authorize exact pilot scope\nFail / incomplete: hold or rework",
"pos": [
200,
860
],
"size": [
740,
300
],
"icon": "none"
},
{
"id": "pilot",
"type": "external",
"label": "Pilot real work",
"tag": "Human + AI Agent; independent review",
"sublabel": "Use qualified revision within scope\nAccepted / failed work + feedback\nManual path; no new release power",
"pos": [
200,
1270
],
"size": [
740,
300
],
"icon": "none"
},
{
"id": "decide",
"type": "security",
"label": "Retain, improve or stop?",
"tag": "Workflow owner + reviewed evidence",
"sublabel": "Compare with baseline, not trials\nNo justified benefit: hold / stop\nNew scope: baseline + new approval",
"pos": [
200,
1680
],
"size": [
740,
300
],
"icon": "none"
},
{
"id": "maintain",
"type": "external",
"label": "Maintain + requalify",
"tag": "Owner, Quality, Platform & Security",
"sublabel": "Retain: support approved revision\nDrift / defects: revise and retest\nHarm: contain; never auto-restore",
"pos": [
200,
2090
],
"size": [
740,
300
],
"icon": "none"
},
{
"id": "reference",
"type": "backend",
"label": "Governance + Measurement",
"tag": "Throughout, not one-time gates",
"sublabel": "Named people + controlled authority\nSelected workflow + skill evidence\nKeep populations and gaps explicit",
"pos": [
200,
2500
],
"size": [
740,
300
],
"icon": "none"
}
],
"connections": [
{
"id": "baseline-engineer",
"from": "baseline",
"to": "engineer",
"label": "Map",
"fromSide": "bottom",
"toSide": "top",
"route": "straight",
"width": 4,
"variant": "default",
"labelAt": [
570,
405
]
},
{
"id": "engineer-qualify",
"from": "engineer",
"to": "qualify",
"label": "Candidate",
"fromSide": "bottom",
"toSide": "top",
"route": "straight",
"width": 4,
"variant": "default",
"labelAt": [
570,
815
]
},
{
"id": "qualify-pilot",
"from": "qualify",
"to": "pilot",
"label": "Authorized",
"fromSide": "bottom",
"toSide": "top",
"route": "straight",
"width": 4,
"variant": "default",
"labelAt": [
570,
1225
]
},
{
"id": "pilot-decide",
"from": "pilot",
"to": "decide",
"label": "Outcomes",
"fromSide": "bottom",
"toSide": "top",
"route": "straight",
"width": 4,
"variant": "default",
"labelAt": [
570,
1635
]
},
{
"id": "decide-maintain",
"from": "decide",
"to": "maintain",
"label": "Retain",
"fromSide": "bottom",
"toSide": "top",
"route": "straight",
"width": 4,
"variant": "default",
"labelAt": [
570,
2045
]
},
{
"id": "maintain-engineer",
"from": "maintain",
"to": "engineer",
"label": "",
"fromSide": "left",
"toSide": "left",
"route": "straight",
"width": 4,
"variant": "default",
"via": [
[
145,
2240
],
[
145,
600
]
]
},
{
"id": "decide-baseline",
"from": "decide",
"to": "baseline",
"label": "",
"fromSide": "right",
"toSide": "right",
"route": "straight",
"width": 4,
"variant": "default",
"via": [
[
980,
1830
],
[
980,
190
]
]
}
]
}
+271
View File
@@ -0,0 +1,271 @@
{
"schema_version": 1,
"diagram_type": "architecture",
"meta": {
"title": "TO-BE: stage01",
"output": "static/diagrams/strategy-stage01/index.html",
"quality_profile": "showcase",
"legend": {
"mode": "hidden"
},
"viewBox": [
2400,
1580
]
},
"components": [
{
"id": "baseline",
"type": "external",
"label": "Understand + baseline",
"tag": "Product Engineering workflow owner",
"sublabel": "Workflow map + desired improvement\nSelected measures + starting evidence\nGovernance: people, scope, authority",
"pos": [
100,
100
],
"size": [
600,
260
],
"icon": "none"
},
{
"id": "engineer",
"type": "external",
"label": "Engineer connected skills",
"tag": "Owning team + independent reviewer",
"sublabel": "Triggers, inputs and output handoffs\nPinned candidate + client + limits\nDeliver: patch and regression tests",
"pos": [
900,
100
],
"size": [
600,
260
],
"icon": "none"
},
{
"id": "qualify",
"type": "security",
"label": "Fit for a bounded pilot?",
"tag": "Quality evidence \u2192 owning approver",
"sublabel": "Artifact + safety + regression report\nPass: authorize exact pilot scope\nFail / incomplete: hold or rework",
"pos": [
1700,
100
],
"size": [
600,
260
],
"icon": "none"
},
{
"id": "pilot",
"type": "external",
"label": "Pilot real work",
"tag": "Human + AI Agent; independent review",
"sublabel": "Use qualified revision within scope\nAccepted / failed work + feedback\nManual path; no new release power",
"pos": [
1700,
730
],
"size": [
600,
260
],
"icon": "none"
},
{
"id": "decide",
"type": "security",
"label": "Retain, improve or stop?",
"tag": "Workflow owner + reviewed evidence",
"sublabel": "Compare with baseline, not trials\nNo justified benefit: hold / stop\nNew scope: baseline + new approval",
"pos": [
900,
730
],
"size": [
600,
260
],
"icon": "none"
},
{
"id": "maintain",
"type": "external",
"label": "Maintain + requalify",
"tag": "Owner, Quality, Platform & Security",
"sublabel": "Retain: support approved revision\nDrift / defects: revise and retest\nHarm: contain; never auto-restore",
"pos": [
100,
730
],
"size": [
600,
260
],
"icon": "none"
},
{
"id": "reference",
"type": "backend",
"label": "Governance + Measurement",
"tag": "Throughout, not one-time gates",
"sublabel": "Named people + controlled authority\nSelected workflow + skill evidence\nKeep populations and gaps explicit",
"pos": [
100,
1270
],
"size": [
2200,
260
],
"icon": "none"
}
],
"connections": [
{
"id": "baseline-engineer",
"from": "baseline",
"to": "engineer",
"label": "Map",
"fromSide": "right",
"toSide": "left",
"route": "straight",
"width": 4,
"variant": "default",
"labelAt": [
800,
210
]
},
{
"id": "engineer-qualify",
"from": "engineer",
"to": "qualify",
"label": "Candidate",
"fromSide": "right",
"toSide": "left",
"route": "straight",
"width": 4,
"variant": "default",
"labelAt": [
1600,
210
]
},
{
"id": "qualify-pilot",
"from": "qualify",
"to": "pilot",
"label": "Authorized",
"fromSide": "bottom",
"toSide": "top",
"route": "straight",
"width": 4,
"variant": "default",
"via": [
[
2000,
520
]
],
"labelAt": [
2010,
535
]
},
{
"id": "pilot-decide",
"from": "pilot",
"to": "decide",
"label": "Outcomes",
"fromSide": "left",
"toSide": "right",
"route": "straight",
"width": 4,
"variant": "default",
"labelAt": [
1600,
840
]
},
{
"id": "decide-maintain",
"from": "decide",
"to": "maintain",
"label": "Retain",
"fromSide": "left",
"toSide": "right",
"route": "straight",
"width": 4,
"variant": "default",
"labelAt": [
800,
840
]
},
{
"id": "maintain-engineer",
"from": "maintain",
"to": "engineer",
"label": "Changed revision",
"fromSide": "top",
"toSide": "bottom",
"route": "straight",
"width": 4,
"variant": "default",
"via": [
[
400,
550
],
[
1200,
550
]
],
"labelAt": [
800,
535
]
},
{
"id": "decide-baseline",
"from": "decide",
"to": "baseline",
"label": "New scope",
"fromSide": "bottom",
"toSide": "bottom",
"route": "straight",
"width": 4,
"variant": "default",
"via": [
[
1200,
1150
],
[
60,
1150
],
[
60,
430
],
[
400,
430
]
],
"labelAt": [
620,
1135
]
}
]
}
@@ -0,0 +1,212 @@
{
"schema_version": 1,
"diagram_type": "architecture",
"meta": {
"title": "TO-BE: stage02",
"output": "static/diagrams/strategy-stage02-mobile/index.html",
"quality_profile": "showcase",
"legend": {
"mode": "hidden"
},
"viewBox": [
1000,
2540
]
},
"components": [
{
"id": "proven",
"type": "external",
"label": "Dependable Stage 01",
"tag": "Existing human-directed workflow",
"sublabel": "Proven skills + limits + outcome record\nNo inherited autonomous authority",
"pos": [
200,
40
],
"size": [
740,
300
],
"icon": "none"
},
{
"id": "case",
"type": "external",
"label": "Justify extra authority",
"tag": "Owning department proposes scope",
"sublabel": "Why needed? Exact data + effects\nObservation first, then proposals",
"pos": [
200,
450
],
"size": [
740,
300
],
"icon": "none"
},
{
"id": "decision",
"type": "security",
"label": "Authorize or hold",
"tag": "Human decision; roles named first",
"sublabel": "Security: boundary; Quality: evidence\nPlatform & IT: enforcement + takeover\nOwning approver: exact permitted scope",
"pos": [
200,
860
],
"size": [
740,
300
],
"icon": "none"
},
{
"id": "execute",
"type": "backend",
"label": "Bounded execution",
"tag": "Only within recorded authorization",
"sublabel": "Exact-artifact checks + audit\nChanged boundary: reopen decision",
"pos": [
200,
1270
],
"size": [
740,
300
],
"icon": "none"
},
{
"id": "stop",
"type": "security",
"label": "Independent stop + takeover",
"tag": "Platform & IT + Security + owner",
"sublabel": "Revoke mutations; preserve evidence\nRecover manually; requalify correction",
"pos": [
200,
1680
],
"size": [
740,
300
],
"icon": "none"
},
{
"id": "hold",
"type": "external",
"label": "Hold / return to Stage 01",
"tag": "Missing authority or readiness",
"sublabel": "Fix gaps, narrow scope or stay here\nNo automatic progression",
"pos": [
200,
2090
],
"size": [
740,
300
],
"icon": "none"
}
],
"connections": [
{
"id": "proven-case",
"from": "proven",
"to": "case",
"label": "Need / limits",
"fromSide": "bottom",
"toSide": "top",
"route": "straight",
"width": 4,
"variant": "default",
"labelAt": [
570,
405
]
},
{
"id": "case-decision",
"from": "case",
"to": "decision",
"label": "Proposal",
"fromSide": "bottom",
"toSide": "top",
"route": "straight",
"width": 4,
"variant": "default",
"labelAt": [
570,
815
]
},
{
"id": "decision-execute",
"from": "decision",
"to": "execute",
"label": "Authorized",
"fromSide": "bottom",
"toSide": "top",
"route": "straight",
"width": 4,
"variant": "default",
"labelAt": [
570,
1225
]
},
{
"id": "execute-stop",
"from": "execute",
"to": "stop",
"label": "Harm / stop",
"fromSide": "bottom",
"toSide": "top",
"route": "straight",
"width": 4,
"variant": "security",
"labelAt": [
570,
1635
]
},
{
"id": "decision-hold",
"from": "decision",
"to": "hold",
"label": "",
"fromSide": "left",
"toSide": "left",
"route": "straight",
"width": 4,
"variant": "security",
"via": [
[
105,
1010
],
[
105,
2240
]
]
},
{
"id": "stop-hold",
"from": "stop",
"to": "hold",
"label": "Requalify",
"fromSide": "bottom",
"toSide": "top",
"route": "straight",
"width": 4,
"variant": "security",
"labelAt": [
570,
2045
]
}
]
}
+236
View File
@@ -0,0 +1,236 @@
{
"schema_version": 1,
"diagram_type": "architecture",
"meta": {
"title": "TO-BE: stage02",
"output": "static/diagrams/strategy-stage02/index.html",
"quality_profile": "showcase",
"legend": {
"mode": "hidden"
},
"viewBox": [
2740,
1260
]
},
"components": [
{
"id": "proven",
"type": "external",
"label": "Dependable Stage 01",
"tag": "Existing human-directed workflow",
"sublabel": "Proven skills + limits + outcome record\nNo inherited autonomous authority",
"pos": [
60,
100
],
"size": [
680,
230
],
"icon": "none"
},
{
"id": "case",
"type": "external",
"label": "Justify extra authority",
"tag": "Owning department proposes scope",
"sublabel": "Why needed? Exact data + effects\nObservation first, then proposals",
"pos": [
60,
550
],
"size": [
680,
230
],
"icon": "none"
},
{
"id": "decision",
"type": "security",
"label": "Authorize or hold",
"tag": "Human decision; roles named first",
"sublabel": "Security: boundary; Quality: evidence\nPlatform & IT: enforcement + takeover\nOwning approver: exact permitted scope",
"pos": [
1000,
340
],
"size": [
720,
290
],
"icon": "none"
},
{
"id": "execute",
"type": "backend",
"label": "Bounded execution",
"tag": "Only within recorded authorization",
"sublabel": "Exact-artifact checks + audit\nChanged boundary: reopen decision",
"pos": [
1980,
100
],
"size": [
680,
230
],
"icon": "none"
},
{
"id": "stop",
"type": "security",
"label": "Independent stop + takeover",
"tag": "Platform & IT + Security + owner",
"sublabel": "Revoke mutations; preserve evidence\nRecover manually; requalify correction",
"pos": [
1980,
650
],
"size": [
680,
230
],
"icon": "none"
},
{
"id": "hold",
"type": "external",
"label": "Hold / return to Stage 01",
"tag": "Missing authority or readiness",
"sublabel": "Fix gaps, narrow scope or stay here\nNo automatic progression",
"pos": [
1000,
960
],
"size": [
720,
230
],
"icon": "none"
}
],
"connections": [
{
"id": "proven-case",
"from": "proven",
"to": "case",
"label": "Need / limits",
"fromSide": "bottom",
"toSide": "top",
"route": "straight",
"width": 4,
"variant": "default",
"labelAt": [
410,
440
]
},
{
"id": "case-decision",
"from": "case",
"to": "decision",
"label": "Proposal",
"fromSide": "right",
"toSide": "left",
"route": "straight",
"width": 4,
"variant": "default",
"via": [
[
860,
665
],
[
860,
485
]
],
"labelAt": [
860,
650
]
},
{
"id": "decision-execute",
"from": "decision",
"to": "execute",
"label": "Authorized",
"fromSide": "right",
"toSide": "left",
"route": "straight",
"width": 4,
"variant": "default",
"via": [
[
1850,
485
],
[
1850,
215
]
],
"labelAt": [
1840,
200
]
},
{
"id": "execute-stop",
"from": "execute",
"to": "stop",
"label": "Harm / stop",
"fromSide": "bottom",
"toSide": "top",
"route": "straight",
"width": 4,
"variant": "security",
"labelAt": [
2320,
500
]
},
{
"id": "decision-hold",
"from": "decision",
"to": "hold",
"label": "Hold",
"fromSide": "bottom",
"toSide": "top",
"route": "straight",
"width": 4,
"variant": "security",
"labelAt": [
1360,
810
]
},
{
"id": "stop-hold",
"from": "stop",
"to": "hold",
"label": "Requalify",
"fromSide": "left",
"toSide": "right",
"route": "straight",
"width": 4,
"variant": "security",
"via": [
[
1840,
765
],
[
1840,
1075
]
],
"labelAt": [
1840,
1060
]
}
]
}
+8
View File
@@ -18,6 +18,12 @@ Establish a starting position for one workflow as adoption reaches it. This is n
**Target operating model — no actual baseline values or approved thresholds are established here.** Missing evidence remains an explicit gap, not an invented starting value. **Target operating model — no actual baseline values or approved thresholds are established here.** Missing evidence remains an explicit gap, not an invented starting value.
## Delivery example: know what must improve
In the [illustrative Delivery workflow](./stage-01-skills-adoption.mdx), Product Engineering maps a bounded code change through regression tests, independent review and existing release controls. Suppose the concern is repeated rework because regression evidence is incomplete: first verify the cause from actual changes, rather than assuming a skill will fix it.
Consider accepted-task outcomes, escaped-quality follow-up and review/rework inputs to cost if their contracts fit. Select only evidence that can inform that concern; deployment frequency need not help. The output is a workflow map and comparison record, not a pass/fail score. The owning team's designated workflow owner confirms scope with the independent Quality Engineering reviewer; unresolved source or acceptance gaps limit later conclusions, not authorize a pilot.
## Understand the current workflow ## Understand the current workflow
Describe the task, team or service, intended outcome, current tools, handoffs, controls and known friction. Bound what is in and out of scope. For Delivery, start with codebase structure and existing principles, system-logic sources, tests, builds and packaging, then deployments. Record current practice, including any existing AI use; do not label it “no-skill” unless that is true. Describe the task, team or service, intended outcome, current tools, handoffs, controls and known friction. Bound what is in and out of scope. For Delivery, start with codebase structure and existing principles, system-logic sources, tests, builds and packaging, then deployments. Record current practice, including any existing AI use; do not label it “no-skill” unless that is true.
@@ -55,4 +61,6 @@ A matched or randomized comparison may be used when practical and ethical. Label
**Next:** [Govern skill ownership and authority →](./skills-governance.mdx) **Next:** [Govern skill ownership and authority →](./skills-governance.mdx)
Carry the map, selected definitions and evidence limits into candidate design. Return here from [Adoption](./skills-adoption.mdx) when scope changes, or from [Maintenance](./skills-maintenance.mdx) when the current workflow no longer matches the comparison. See the [whole Stage 01 journey](./stage-01-skills-adoption.mdx).
</div> </div>
@@ -33,4 +33,6 @@ Read the shared [collection and safeguards](./collection-and-safeguards.mdx) bef
Return to [Skills Measurement](./index.mdx). Return to [Skills Measurement](./index.mdx).
In [Stage 01](../stage-01-skills-adoption.mdx), authorization to test an experimental revision is not general approved status. This contract counts approved-revision use only; do not relabel experimental pilot use to raise its numerator. [Adoption](../skills-adoption.mdx) still evaluates that pilot through independent work outcomes and [Quality's fitness evidence](../skills-quality.mdx). Use this reach measure only where its approved-revision population applies.
</div> </div>
@@ -10,7 +10,7 @@ description: Shared interpretation rules, event contracts and privacy safeguards
**Target operating model — recommended contracts, not installed collection.** Registry inclusion does not require use, collection or baselining. All owner and cadence entries are proposals to confirm for selected metrics, not assigned responsibilities or approved schedules. **Target operating model — recommended contracts, not installed collection.** Registry inclusion does not require use, collection or baselining. All owner and cadence entries are proposals to confirm for selected metrics, not assigned responsibilities or approved schedules.
{/* preserved:start */} {/* preserved:start */}
Introduction depends on the [roadmap gates](../roadmap.mdx); these pages do not describe installed controls or measured company results. Use these safeguards throughout the [Stage 01 journey](../stage-01-skills-adoption.mdx); these pages do not describe installed controls or measured company results.
### Decide what counts before counting ### Decide what counts before counting
@@ -39,4 +39,6 @@ The privacy starting proposal is 30 days for raw structured analytics events and
Return to the [Skills Measurement index](./index.mdx) for every metric definition. Return to the [Skills Measurement index](./index.mdx) for every metric definition.
For the illustrative Delivery comparison, agree sources, permissions and independent acceptance before collection. Carry the population and gap record from [Baseline](../baseline.mdx) into [Adoption](../skills-adoption.mdx). Keep [Quality's qualification trials](../skills-quality.mdx) separate from live workflow starts; revised reports must preserve that boundary.
</div> </div>
+10 -1
View File
@@ -25,13 +25,20 @@ Each entry explains meaning and applicability, calculation, required inputs and
To select a relevant subset and establish actual starting evidence, use [Baseline](../baseline.mdx). Pilot application belongs to [Adoption](../skills-adoption.mdx); ongoing interpretation belongs to [Maintenance](../skills-maintenance.mdx). To select a relevant subset and establish actual starting evidence, use [Baseline](../baseline.mdx). Pilot application belongs to [Adoption](../skills-adoption.mdx); ongoing interpretation belongs to [Maintenance](../skills-maintenance.mdx).
In the **illustrative Delivery workflow** from [Stage 01](../stage-01-skills-adoption.mdx), incomplete regression evidence is the improvement hypothesis. The workflow owner and independent Quality Engineering reviewer select contracts that can test it, then carry the same definitions into the baseline and pilot comparison. They can leave unrelated metrics unselected. This reference capability supports the whole journey; opening this page is not an execution gate.
## Metric definitions ## Metric definitions
Each contract is a prospective definition, not a rollout obligation. No live source or observed baseline is established. N and D refer to the numerator and denominator shown for that metric.
<details>
<summary>Implementation status—not live telemetry</summary>
There are **16 contracts: 9 prototype calculations and 7 unimplemented metrics**. The prototype has no network collectors. None of these counts establishes live telemetry. There are **16 contracts: 9 prototype calculations and 7 unimplemented metrics**. The prototype has no network collectors. None of these counts establishes live telemetry.
The nine calculations cover task success, selection precision and recall, change fail rate, deployment rework, escaped quality, policy effects, cost and the primary human-experience item. The seven omissions are supported bundle coverage, approved-workflow adoption, change lead time, deployment frequency, failed deployment recovery time, substantive-review coverage and workflow-specific business acceptance. The nine calculations cover task success, selection precision and recall, change fail rate, deployment rework, escaped quality, policy effects, cost and the primary human-experience item. The seven omissions are supported bundle coverage, approved-workflow adoption, change lead time, deployment frequency, failed deployment recovery time, substantive-review coverage and workflow-specific business acceptance.
Each contract is a prospective definition, not a rollout obligation. No live source or observed baseline is established. N and D refer to the numerator and denominator shown for that metric. </details>
### Workflow effectiveness ### Workflow effectiveness
@@ -55,6 +62,8 @@ Human effort is recorded as review/rework inputs where the cost contract support
**Are the skills fit for use and kept fit?** Qualify named skills and versions, observe supported use during adoption, and review or retire them in maintenance. Without applicable skills, bundles or enrolled use, skill-specific measures may be **N/A, not zero**. Once a population exists, missing observations are unknown, not evidence of non-use or good health. **Are the skills fit for use and kept fit?** Qualify named skills and versions, observe supported use during adoption, and review or retire them in maintenance. Without applicable skills, bundles or enrolled use, skill-specific measures may be **N/A, not zero**. Once a population exists, missing observations are unknown, not evidence of non-use or good health.
**Fitness comes from [Quality's evaluation evidence](../skills-quality.mdx), not health proxies.** Compare named candidate and approved revisions against declared cases, independent artifact acceptance and mandatory safety checks. Retain regression results, failed trials and coverage limits. The five registry contracts below complement that report: selection tests relevance; support, use and review measures describe operating health. None replaces evidence that a skill produces useful, safe artifacts. Maintenance sends real failures and revision changes back to Quality for requalification.
1. [Skill selection precision](./skill-selection-precision.mdx) — **Prototype calculation.** Did the evaluated selection choose an applicable skill? Requires labeled qualification cases. 1. [Skill selection precision](./skill-selection-precision.mdx) — **Prototype calculation.** Did the evaluated selection choose an applicable skill? Requires labeled qualification cases.
2. [Skill selection recall](./skill-selection-recall.mdx) — **Prototype calculation.** Were expected skills selected? Requires the same labeled qualification population. 2. [Skill selection recall](./skill-selection-recall.mdx) — **Prototype calculation.** Were expected skills selected? Requires the same labeled qualification population.
3. [Supported bundle coverage](./supported-bundle-coverage.mdx) — **Unimplemented metric.** Are expected active installations on supported, non-revoked bundles/adapters? 3. [Supported bundle coverage](./supported-bundle-coverage.mdx) — **Unimplemented metric.** Are expected active installations on supported, non-revoked bundles/adapters?
@@ -33,4 +33,6 @@ Read the shared [collection and safeguards](./collection-and-safeguards.mdx) bef
Return to [Skills Measurement](./index.mdx). Return to [Skills Measurement](./index.mdx).
Use this labeled-case result in [Quality's candidate evaluation](../skills-quality.mdx). Selecting the right skill is only one input: independently test artifact fitness, safe execution and revision regression before the owning approver considers a bounded pilot. It is not the live Delivery workflow's accepted-task rate.
</div> </div>
@@ -33,4 +33,6 @@ Read the shared [collection and safeguards](./collection-and-safeguards.mdx) bef
Return to [Skills Measurement](./index.mdx). Return to [Skills Measurement](./index.mdx).
Use this labeled-case result alongside precision in [Quality's candidate evaluation](../skills-quality.mdx). Finding expected skills does not establish useful artifacts or safe execution. Preserve missing-case coverage and revision-regression evidence before a bounded pilot; do not pool evaluation cases with live Delivery tasks.
</div> </div>
@@ -33,4 +33,6 @@ Read the shared [collection and safeguards](./collection-and-safeguards.mdx) bef
Return to [Skills Measurement](./index.mdx). Return to [Skills Measurement](./index.mdx).
[Maintenance](../skills-maintenance.mdx) uses this coverage signal to find overdue or ownerless revisions. A current date is not proof of effectiveness: substantive review must consider [Quality's fitness and regression evidence](../skills-quality.mdx), supported-client changes and live-workflow outcomes. Gaps trigger review or requalification, not a favorable health assumption.
</div> </div>
@@ -19,4 +19,6 @@ The executable covers validated success, selection precision/recall, change fail
Return to the [Skills Measurement index](./index.mdx) for every metric definition. Return to the [Skills Measurement index](./index.mdx) for every metric definition.
Use this fixture to check calculation and missing-evidence behavior before applying selected contracts in [Baseline](../baseline.mdx) or [Adoption](../skills-adoption.mdx). It is not the illustrative Delivery workflow's baseline and does not qualify a skill: [Quality](../skills-quality.mdx) requires independent, versioned artifact and safety evidence on declared evaluation cases.
</div> </div>
@@ -35,7 +35,7 @@ This contract belongs to **Workflow effectiveness**. Use the same matured-start
For **Skills effectiveness & health**, a predeclared slice of live workflow tasks using a named skill/version may reuse this contract unchanged. Keep the parent cohort visible, report exact versions and selection limits, and count each task once across retries, skills and clients. Overlapping skill slices must not be summed. This is descriptive evidence, not proof that the skill caused success. For **Skills effectiveness & health**, a predeclared slice of live workflow tasks using a named skill/version may reuse this contract unchanged. Keep the parent cohort visible, report exact versions and selection limits, and count each task once across retries, skills and clients. Overlapping skill slices must not be summed. This is descriptive evidence, not proof that the skill caused success.
A sandbox or qualification evaluation of a named skill/version is a different population and remains excluded by this contract. Declare its cases, skill/version, client/model configuration, acceptance rubric and observed results separately; never combine those cases with live workflow starts or present their results as this prototype's workflow rate. This page does not introduce an implemented skill-evaluation metric or an alternative formula. No applicable skill means that skill-specific evaluation is N/A, not a zero workflow success rate. A sandbox or qualification evaluation of a named skill/version is a different population and remains excluded by this contract. [Quality](../skills-quality.mdx) defines artifact-success and revision-regression evidence: declare cases, skill/version, client/model configuration, acceptance rubric and observed results separately; never combine those cases with live workflow starts or present their results as this prototype's workflow rate. This page does not introduce an implemented skill-evaluation metric or an alternative formula. No applicable skill means that skill-specific evaluation is N/A, not a zero workflow success rate.
Read the shared [collection and safeguards](./collection-and-safeguards.mdx) before collecting data; see the [synthetic example and limits](./synthetic-example.mdx). Read the shared [collection and safeguards](./collection-and-safeguards.mdx) before collecting data; see the [synthetic example and limits](./synthetic-example.mdx).
+8 -6
View File
@@ -15,7 +15,7 @@ import ArchifyDiagram from '@site/src/components/ArchifyDiagram';
**Humans direct, guide and review throughout.** Stage 1 standardizes skills in human + AI Agent work across the SDLC. Proven skills, measurements and working practices become the foundation for Stage 2: the future Autonomous Agent in [Target](./target-operating-model.mdx). **Humans direct, guide and review throughout.** Stage 1 standardizes skills in human + AI Agent work across the SDLC. Proven skills, measurements and working practices become the foundation for Stage 2: the future Autonomous Agent in [Target](./target-operating-model.mdx).
Target operating model—not deployed autonomy, an agreed schedule or approved KPI thresholds. Target operating model—not deployed autonomy, an agreed schedule or approved KPI thresholds. Stage 1 is useful in its own right; Stage 2 requires a separately justified change in authority, not graduation for using enough skills.
## Stage 1: Delivery first ## Stage 1: Delivery first
@@ -33,14 +33,16 @@ Repeat this loop within every phase—not as six global roadmap stages. Skills t
**Understand the engineering path first:** codebase structure and existing principles → system-logic source → tests → builds and packaging → deployments. Inspect actual practices, tooling, controls and problems with the people doing the work, rather than assuming the documented process is the real one. **Understand the engineering path first:** codebase structure and existing principles → system-logic source → tests → builds and packaging → deployments. Inspect actual practices, tooling, controls and problems with the people doing the work, rather than assuming the documented process is the real one.
**Establish the comparison, then engineer skills.** Define metrics/KPIs and a baseline for comparable work before changing it. [Skills Measurement](./measurement/index.mdx) explains collection and calculation. Connect reviewed skills to the engineering path, with clear triggers, dependencies and acceptance checks. **Establish the comparison, then engineer skills.** Select relevant metrics/KPIs and a baseline for comparable work before changing it. [Measurement](./measurement/index.mdx) supplies optional definitions; [Baseline](./baseline.mdx) records the actual starting position or gaps. Connect skills to the engineering path, with clear triggers, dependencies and acceptance checks; [Quality](./skills-quality.mdx) qualifies the candidate before bounded real use.
**Use, collect, compare, repeat.** A human works with an AI Agent on real changes. Collect results, friction and feedback alongside quality, cost and verification effort. Compare with the baseline to understand the new current situation; revise the skills and working practices, then run the loop again. **Use, collect, compare, repeat.** A human works with an AI Agent on real changes. Collect results, friction and feedback alongside quality, cost and verification effort. Compare with the baseline to understand the new current situation; retain, improve, stop or propose expansion. Changed revisions return to qualification; changed workflows need a fresh comparison.
Follow the **illustrative Delivery workflow** in [Stage 01](./stage-01-skills-adoption.mdx): prepare a bounded code change and regression tests, then hand the exact artifact to independent review. Its dependency diagram shows what passes between activities and who decides whether work can progress. Governance and Measurement support the whole loop; they are not one-time gates.
<details> <details>
<summary>Supporting gate evidence and hold conditions</summary> <summary>Readiness questions behind the roadmap</summary>
These are recommended implementation gates, not assigned human owners, approved thresholds or installed integrations. Agree acceptance criteria for each selected workflow before evaluating it. These are readiness questions, not additional roadmap stages. Stage 01's topic pages define the recommended decisions and evidence within existing teams. Designate accountable people and agree workflow-specific acceptance criteria before evaluating; this strategy does not appoint approvers or approve thresholds.
### Understand the current situation ### Understand the current situation
@@ -64,7 +66,7 @@ Use evidence to choose the next SDLC phase; no second or third phase is assigned
### Prepare for the future Autonomous Agent ### Prepare for the future Autonomous Agent
Stage 2 builds on proven skills, measurements and working practices—not permission inferred from adoption alone. Before granting scoped execution authority, prove observation and evidence assembly, then proposing and routing work. Recommended controls include exact-artifact approvals, idempotency, duplicate/outage recovery, separation of duties, audit and kill-switch drills. Prove human takeover; never infer permission from missing evidence. The agent ultimately executes and governs the cycle, not only routes tasks, while humans retain direction and review. Keep sensitive decisions human. Changed client, provider, data or authority boundaries reopen the relevant checks. Stage 2 builds on proven skills, measurements and working practices—not permission inferred from adoption alone. [Stage 02](./stage-02-autonomous-agent.mdx) owns the separate authority/readiness decision. Recommended controls include exact-artifact approvals, idempotency, duplicate/outage recovery, separation of duties, audit and kill-switch drills. Prove human takeover; never infer permission from missing evidence. Keep sensitive decisions human. Changed client, provider, data or authority boundaries reopen the relevant checks.
</details> </details>
+14 -1
View File
@@ -21,10 +21,23 @@ Expand only when a bounded canary produces independently accepted work and usefu
- **Choice within support:** qualify the client path instead of promising identical agent behavior. - **Choice within support:** qualify the client path instead of promising identical agent behavior.
- **No adoption quotas:** retain a manual path; rejected suggestions and non-use are feedback, not poor performance. - **No adoption quotas:** retain a manual path; rejected suggestions and non-use are feedback, not poor performance.
## Run one bounded comparison, then make a decision
Bring the [Baseline](./baseline.mdx) comparison record, [Quality](./skills-quality.mdx) qualification report and [Governance](./skills-governance.mdx) pilot authorization—not merely an installed bundle. In the **illustrative Delivery workflow**, the developer and AI Agent prepare a bounded patch and regression tests on the qualified client; an independent reviewer accepts or rejects the exact work. Existing release controls still apply. Record failed and abandoned work as well as accepted changes, and use the manual path if the skill adds risk or effort.
At the agreed review point, the designated Product Engineering workflow owner considers the comparable outcomes and feedback, Quality Engineering's independent acceptance/quality evidence and any boundary or support findings from Architecture &amp; Security and Platform &amp; IT. These are proposed responsibilities; appoint actual people and agree criteria before the pilot.
- **Retain:** useful within the tested scope and supported controls; the designated owning approver records exact-revision approval after independent review and required boundary/support checks, then hands that revision and evidence to [Maintenance](./skills-maintenance.mdx). The pilot decision alone is not general approval.
- **Improve:** return failure cases and friction to the author and [Quality](./skills-quality.mdx); a changed candidate needs new evidence.
- **Expand:** propose a new bounded workflow/cohort, revisit [Baseline](./baseline.mdx) and obtain the relevant approval—not automatic organization-wide rollout.
- **Stop or hold:** unsafe behavior triggers containment; insufficient evidence means no benefit claim and no justified expansion. Preserve a manual path.
The output is a decision record with evidence, scope and remaining uncertainties. Qualification fitness and live outcomes inform it separately; apparent before/after improvement does not establish causality.
<details> <details>
<summary>Onboarding responsibilities, coaching and feedback safeguards</summary> <summary>Onboarding responsibilities, coaching and feedback safeguards</summary>
**TO-BE · Target operating model.** Introduction depends on the [roadmap gates](./roadmap.mdx); these pages do not describe installed controls or measured company results. **TO-BE · Target operating model.** This bounded comparison belongs to the [Stage 01 journey](./stage-01-skills-adoption.mdx); these pages do not describe installed controls or measured company results.
Start with a small set of useful workflows chosen by the existing teams. Product Management and the departmental owner identify the outcome; Data & AI helps turn it into a skill; Quality Engineering establishes acceptance; Platform & IT qualifies the client path; Architecture & Security clears the data boundary. People & Administration Squad coordinates learning and accessible feedback. Start with a small set of useful workflows chosen by the existing teams. Product Management and the departmental owner identify the outcome; Data & AI helps turn it into a skill; Quality Engineering establishes acceptance; Platform & IT qualifies the client path; Architecture & Security clears the data boundary. People & Administration Squad coordinates learning and accessible feedback.
+12 -3
View File
@@ -21,10 +21,18 @@ The owning team authors the skill; independent reviewers assess it before exact-
- **Pin the whole bundle:** content, adapters and executable dependencies travel together. - **Pin the whole bundle:** content, adapters and executable dependencies travel together.
- **Keep controls authoritative:** exceptions expire and cannot bypass protected release, payment or identity controls. - **Keep controls authoritative:** exceptions expire and cannot bypass protected release, payment or identity controls.
## Connect knowledge without expanding authority
Use the workflow map from [Baseline](./baseline.mdx) to engineer a connected skills topology. In the **illustrative Delivery workflow**, repository understanding produces a source-and-constraints map; change/test preparation consumes it and produces a patch plus regression evidence; independent verification consumes that exact artifact and returns findings. Each handoff specifies its trigger, expected output and what happens when evidence is missing. The agent cannot mark its own work approved or acquire deployment credentials through a skill.
Governance spans design, qualification, the pilot and maintenance—not just entry to a catalogue. The owning Product Engineering team's designated accountable person records scope and permitted effects; an independent Quality Engineering reviewer accepts [evaluation evidence](./skills-quality.mdx); Architecture &amp; Security reviews higher-risk boundaries; Platform &amp; IT verifies the qualified distribution path. These are recommended assignments within existing teams: name the actual people before relying on a decision.
**Two different permissions:** qualification may justify a bounded experimental pilot. Wider approved use requires the pilot comparison and canary evidence too. Record exact revisions, audience, expiry/stop conditions and approvers for each; neither a baseline nor a passing test grants permission by itself. Failed review returns the candidate to its author; unsafe use enters [Maintenance containment](./skills-maintenance.mdx).
<details> <details>
<summary>Ownership, client qualification, exceptions and rollback</summary> <summary>Ownership, client qualification, exceptions and rollback</summary>
**TO-BE · Target operating model.** Introduction depends on the [roadmap gates](./roadmap.mdx); these pages do not describe installed controls or measured company results. **TO-BE · Target operating model.** Use these contracts throughout the [Stage 01 journey](./stage-01-skills-adoption.mdx); they are not installed controls or measured company results.
### A contract that travels, controls that stay authoritative ### A contract that travels, controls that stay authoritative
@@ -36,7 +44,7 @@ Adapters place content in the qualified client's discovery paths and implement o
### Lifecycle and decision rights ### Lifecycle and decision rights
A proposal names the problem, owner, data scope and testable outcome. Experimental revisions run only in approved disposable environments. Promotion requires independent review, static and executable dependency checks, per-client behavioral evaluations and a bounded canary. Approval records bind the exact artifact and permitted uses. Deprecated revisions carry a migration path and deadline; retired revisions are unavailable for new work. Any active revision can be quarantined immediately. A proposal names the problem, owner, data scope and testable outcome. Initial experimental qualification runs only in approved disposable environments. Real work requires a separate bounded-pilot authorization after qualification; that authorization permits only its recorded cohort, data and effects, not general approved use. Promotion from the bounded pilot requires independent review, static and executable dependency checks, per-client evaluations, pilot outcomes and canary evidence. Approval records bind the exact artifact and permitted uses. Deprecated revisions carry a migration path and deadline; retired revisions are unavailable for new work. Any active revision can be quarantined immediately.
The author never supplies the only approval. Data & AI maintains catalog state; the owning team is accountable for content; Quality Engineering approves evaluation evidence; Architecture & Security approves higher-risk boundaries; Platform & IT verifies distribution and revocation. A business owner accepts workflow outcomes. These functions can be covered by existing staff, but incompatible author/approver duties must remain separate for the same release. The author never supplies the only approval. Data & AI maintains catalog state; the owning team is accountable for content; Quality Engineering approves evaluation evidence; Architecture & Security approves higher-risk boundaries; Platform & IT verifies distribution and revocation. A business owner accepts workflow outcomes. These functions can be covered by existing staff, but incompatible author/approver duties must remain separate for the same release.
@@ -91,7 +99,8 @@ Rollback restores the approved manifest and dependencies, invalidates affected s
| Transition | Required evidence | | Transition | Required evidence |
| --- | --- | | --- | --- |
| proposed → experimental | Owner, purpose, risk/data scope, disposable environment and preregistered test plan | | proposed → experimental | Owner, purpose, risk/data scope, disposable environment and preregistered test plan |
| experimental → approved | Independent review, all mandatory tests, qualified clients, canary, exact-digest approval | | experimental → bounded pilot | Independent qualification evidence, named pilot approver, exact revision, bounded cohort/data/effects and manual recovery; remains experimental outside that envelope |
| bounded pilot → approved | Independent review, all mandatory tests, qualified clients, pilot comparison and canary evidence; owning approver records exact-digest authorization for retained scope |
| approved → deprecated | Owner gives migration/replacement and retirement conditions | | approved → deprecated | Owner gives migration/replacement and retirement conditions |
| deprecated → retired | Consumers reconciled or explicit risk-approved cutover; no new invocation | | deprecated → retired | Consumers reconciled or explicit risk-approved cutover; no new invocation |
| any active state → quarantined | Incident or unsafe/unknown provenance; central deny immediately | | any active state → quarantined | Incident or unsafe/unknown provenance; central deny immediately |
+11 -3
View File
@@ -13,7 +13,7 @@ import ArchifyDiagram from '@site/src/components/ArchifyDiagram';
## What happens when a skill drifts or causes harm? ## What happens when a skill drifts or causes harm?
Monitor both **Workflow effectiveness** (comparable outcomes, safety, cost and human experience) and **Skills effectiveness & health** (selection, supported use and substantive review) throughout a revision's life. Use the evidence to improve, retain or retire skills; adoption or current review dates alone do not prove better work. Unsafe behavior triggers containment; a correction returns through independent tests and approval, never automatic reinstatement. Monitor both **Workflow effectiveness** (comparable outcomes, safety, cost and human experience) and **Skills effectiveness & health** (fitness/regression evidence, selection, supported use and substantive review) throughout a revision's life. Use the evidence to improve, retain or retire skills; adoption or current review dates alone do not prove better work. Unsafe behavior triggers containment; a correction returns through independent tests and approval, never automatic reinstatement.
<ArchifyDiagram name="strategy-maintenance" title="Monitor, triage and test corrections; promote safely or contain and roll back" story /> <ArchifyDiagram name="strategy-maintenance" title="Monitor, triage and test corrections; promote safely or contain and roll back" story />
@@ -21,10 +21,18 @@ Monitor both **Workflow effectiveness** (comparable outcomes, safety, cost and h
- **Early triggers:** incidents and client, model or dependency changes override the calendar. - **Early triggers:** incidents and client, model or dependency changes override the calendar.
- **Recovery is verified:** rollback restores a known-good bundle; it cannot undo disclosure or past effects. - **Recovery is verified:** rollback restores a known-good bundle; it cannot undo disclosure or past effects.
## Close the loop on the retained workflow
Start from [Adoption's decision](./skills-adoption.mdx), the approved manifest and its evidence limits. In the **illustrative Delivery workflow**, a missed regression case becomes a sanitized evaluation case. Product Engineering owns the correction; an independent Quality Engineering reviewer reruns [Quality's fitness and regression evaluation](./skills-quality.mdx) against the approved revision. Keep the live defect and task records in their original populations; do not erase a failure because the replacement passes.
The owning team's designated approver decides whether the corrected exact revision can re-enter a bounded canary, using independent results and Platform &amp; IT's recovery/effective-version evidence; Architecture &amp; Security reviews changed risk boundaries. Missing evidence means hold. Safe unchanged use may continue only within its existing authorization; harmful behavior is contained immediately. These recommended functions require named people before use.
Retain a supported revision, requalify a change or retire it with a reconciled consumer/migration record. A materially changed workflow returns to [Baseline](./baseline.mdx); the [Measurement registry](./measurement/index.mdx) helps revise relevant evidence without silently resetting history. That feedback closes [Stage 01](./stage-01-skills-adoption.mdx)—it does not automatically advance to autonomy.
<details> <details>
<summary>Review responsibilities, incident handling and proposed review intervals</summary> <summary>Review responsibilities, incident handling and proposed review intervals</summary>
**TO-BE · Target operating model.** Introduction depends on the [roadmap gates](./roadmap.mdx); these pages do not describe installed controls or measured company results. **TO-BE · Target operating model.** Maintenance sustains the [Stage 01 journey](./stage-01-skills-adoption.mdx); these pages do not describe installed controls or measured company results.
Every approved skill has an accountable owning team, independent reviewer, review due date, supported client matrix and rollback bundle. Review both usefulness and safety, not just metadata freshness. Proposed maximum review intervals are recorded by risk tier; incidents, dependency changes, model/client drift or repeated failures trigger earlier review. Every approved skill has an accountable owning team, independent reviewer, review due date, supported client matrix and rollback bundle. Review both usefulness and safety, not just metadata freshness. Proposed maximum review intervals are recorded by risk tier; incidents, dependency changes, model/client drift or repeated failures trigger earlier review.
@@ -59,6 +67,6 @@ Act on critical policy effects immediately; do not wait for a reporting cycle. U
</details> </details>
**Next:** [Stage - 02 - Autonomous Agent →](./stage-02-autonomous-agent.mdx) **Continue the loop:** [Requalify changed skills →](./skills-quality.mdx). For a separate future authority decision, read [Stage - 02 - Autonomous Agent](./stage-02-autonomous-agent.mdx).
</div> </div>
+11 -1
View File
@@ -21,10 +21,20 @@ Risk determines the evaluation depth, not whether safety checks apply. Independe
- **No averaging away harm:** a critical unauthorized effect blocks promotion. - **No averaging away harm:** a critical unauthorized effect blocks promotion.
- **Proposed floors need owner ratification:** missing coverage or acceptance rules means qualification is incomplete. - **Proposed floors need owner ratification:** missing coverage or acceptance rules means qualification is incomplete.
## Prove the candidate fits the workflow
Bring the workflow/acceptance map from [Baseline](./baseline.mdx) and the pinned candidate, client tuple and authority envelope from [Governance](./skills-governance.mdx). In the **illustrative Delivery workflow**, test whether a candidate actually produces a correct bounded change and regression tests—not just whether it was selected. Compare candidate, current-approved and no-skill paths on the same starting artifacts. Include misleading repository instructions, missing tests and requests to bypass review.
The independent Quality Engineering reviewer records accepted and failed artifacts, safety results, coverage and regression differences for each named revision. The owning team's designated approver then decides whether that evidence supports a bounded pilot; Architecture &amp; Security must accept any higher-risk boundary. A mandatory failure or an unagreed acceptance rule means rework or hold. These are proposed decision responsibilities, not already assigned people.
**Qualification artifact success is not live task success.** The evaluation denominator is planned executed trials, retaining failures and abandonment, with omitted/unexecuted cases shown as coverage gaps. [Validated task success](./measurement/validated-task-success.mdx) instead uses matured real-workflow starts. Never pool them. [Measurement](./measurement/index.mdx) links selection and health signals to this fitness evidence; neither usage nor a fresh review date proves effectiveness.
The output is a versioned qualification report and explicit limitations for [Adoption](./skills-adoption.mdx), not approval of every future task. [Maintenance](./skills-maintenance.mdx) feeds real failures and material client/model/dependency changes back into this same evaluation, including regression against the currently approved revision.
<details> <details>
<summary>Evaluation design, adversarial cases and interpretation</summary> <summary>Evaluation design, adversarial cases and interpretation</summary>
**TO-BE · Target operating model.** Introduction depends on the [roadmap gates](./roadmap.mdx); these pages do not describe installed controls or measured company results. **TO-BE · Target operating model.** Qualification supports the [Stage 01 journey](./stage-01-skills-adoption.mdx); these pages do not describe installed controls or measured company results.
Quality has four separate questions: was the right skill selected, was the procedure executed safely, did the artifact pass independent checks, and did the workflow produce useful outcomes? A successful invocation answers none of the remaining questions by itself. Quality has four separate questions: was the right skill selected, was the procedure executed safely, did the artifact pass independent checks, and did the workflow produce useful outcomes? A successful invocation answers none of the remaining questions by itself.
+33 -18
View File
@@ -5,37 +5,52 @@ description: Build proven skills and measurable working practices through human
hide_table_of_contents: true hide_table_of_contents: true
--- ---
import ArchifyDiagram from '@site/src/components/ArchifyDiagram';
<div className="strategy-content"> <div className="strategy-content">
**Human + AI Agent → proven skills and working practices → future Autonomous Agent.** Improve one workflow through human + AI Agent work, then repeat with evidence. This is the practical first stage of the [Roadmap](./roadmap.mdx), not permission to deploy the autonomous [Target](./target-operating-model.mdx).
This first stage of the [Roadmap](./roadmap.mdx) standardizes skills in real human + AI Agent work. It builds the foundation for [Target](./target-operating-model.mdx), while people direct the work, verify outcomes and improve the skills. <ArchifyDiagram name="strategy-stage01" title="One workflow: establish the starting point, engineer and qualify, pilot, decide, maintain and learn" story />
## Delivery first **Read the arrows as handoffs, not a checklist of page approvals.** Governance bounds every activity. Measurement supplies selected definitions throughout. Quality establishes candidate fitness; Adoption tests usefulness in real work; Maintenance returns failures and changed conditions to qualification.
Start with the engineering path: codebase structure and existing principles → system-logic source → tests → builds and packaging → deployments. Understand actual practices, tooling, controls and problems before changing them. ## Delivery first: one change, from intent to accepted work
Adoption then extends to other SDLC phases; their order is not yet decided. Delivery keeps improving as adoption expands. **Illustrative Delivery workflow throughout these pages — not an Eldorado pilot or measured result:** a Product Engineering developer uses an AI Agent to prepare a bounded code change and regression tests. An independent reviewer checks the exact change and evidence. Existing release authority remains unchanged; the skill cannot approve or deploy its own output.
## Repeat within each phase First trace codebase structure and existing principles → system-logic source → tests → builds and packaging → deployments. Identify the friction to improve—for example, incomplete regression evidence that sends changes back for rework. Verify that this is the actual problem before choosing a skill.
**Understand the current situation → select relevant KPIs and establish a workflow baseline → engineer skills topology → use skills in real work → collect agreed metrics and feedback → understand the new current situation → repeat.** Adoption can extend to other SDLC phases; their order is not yet decided. Delivery keeps improving as adoption expands.
Skills topology connects what skills exist, how they relate, when they are used and how they work together. Compare accepted outcomes, quality, cost and review effort with the baseline; use friction and feedback to revise the skills and working practices. These are repeating steps within each phase, not additional roadmap stages. ## Carry evidence forward, not assumptions
## Put the foundation into practice 1. **Understand and baseline.** Product Engineering maps the selected workflow and desired improvement. Select relevant KPIs from [Measurement](./measurement/index.mdx); [Baseline](./baseline.mdx) records current outcomes, acceptance rules and explicit gaps. A baseline describes work; it grants no approval.
2. **Engineer a connected candidate.** Under [Governance](./skills-governance.mdx), connect repository understanding → change/test preparation → independent verification. Specify triggers, inputs, outputs, handoffs, pinned dependencies and forbidden actions. This skills topology is more than a catalogue.
3. **Qualify before exposing real work.** [Quality](./skills-quality.mdx) compares candidate, current-approved and no-skill paths on declared cases. The independent Quality Engineering reviewer accepts evaluation evidence; the owning team's designated approver authorizes only the tested pilot envelope, with Architecture &amp; Security review where risk requires it. Failed checks or missing authority mean rework or hold, not an automatic pilot.
4. **Pilot and compare.** [Adoption](./skills-adoption.mdx) applies that revision to a bounded real-work cohort, retaining the manual path. Compare accepted outcomes, quality, review/rework cost and feedback with the starting position. Live tasks and qualification trials remain separate populations.
5. **Decide and maintain.** The owning team's designated workflow owner decides retain, improve, stop or propose expansion from the comparison and independent evidence. [Maintenance](./skills-maintenance.mdx) keeps retained revisions supported and feeds defects into requalification. A new scope returns to Baseline; a changed revision returns to Quality. The new current situation starts the next loop.
- [Measurement](./measurement/index.mdx) — distinguish Workflow effectiveness from Skills effectiveness & health; candidate inclusion does not require collection or baselining. These are recommended responsibilities within existing teams, not appointed people or already approved controls. Before work starts, record the actual accountable person, independent reviewer, acceptance rules and permitted effects. Missing assignments keep the affected decision on hold.
- [Baseline](./baseline.mdx) — understand current workflow outcomes first, select relevant metrics and record feasible starting evidence or explicit gaps; absent skills are not zero performance.
- [Governance](./skills-governance.mdx) — define ownership, authority and approval of skills.
- [Quality](./skills-quality.mdx) — qualify skills and verify their outcomes before wider use.
- [Adoption](./skills-adoption.mdx) — compare workflow outcomes and observe skill use separately, with a supported client and a manual path.
- [Maintenance](./skills-maintenance.mdx) — monitor both tracks to improve or retire skills, control versions and recover from unsafe updates.
Proven skills, measurements and working practices support [Stage - 02 - Autonomous Agent](./stage-02-autonomous-agent.mdx); adoption alone does not grant autonomous execution authority. <details>
<summary>Where each topic helps—and what it gives the next activity</summary>
These six topics belong to Stage 01, not six additional roadmap stages. Establish a baseline per workflow as adoption reaches it—not a mandatory company-wide baseline of every registry metric. | Topic | Use it when | Carry forward |
| --- | --- | --- |
| [Measurement](./measurement/index.mdx) | Choosing or interpreting evidence at any point | Relevant contracts for Workflow effectiveness and Skills effectiveness & health; no mandatory full catalogue |
| [Baseline](./baseline.mdx) | Understanding a workflow or a material scope change | Workflow map, selected definitions, evidenced starting position or gaps |
| [Governance](./skills-governance.mdx) | Designing, approving, distributing or withdrawing any revision | Named accountability, authority envelope and exact-revision decision record |
| [Quality](./skills-quality.mdx) | Introducing or changing skills, clients, models or dependencies | Versioned evaluation results, failures, limits and independent recommendation |
| [Adoption](./skills-adoption.mdx) | Introducing a qualified candidate into bounded work | Comparable outcome report, user feedback and retain/improve/expand/stop decision |
| [Maintenance](./skills-maintenance.mdx) | Keeping a supported workflow dependable | Reviewed revision, regression cases, recovery evidence or retirement |
**Next:** [Browse the Measurement registry →](./measurement/index.mdx) The six topics are connected lifecycle activities, not six rigid sequential approval gates. The sidebar is a reading map: you can consult Measurement before, during or after any activity.
</details>
Proven skills and working practices may support [Stage - 02 - Autonomous Agent](./stage-02-autonomous-agent.mdx). Stage 01 can remain valuable indefinitely; progression requires a separate case for authority and readiness.
**Start here:** [Understand and baseline one workflow →](./baseline.mdx). Consult the [Measurement registry](./measurement/index.mdx) when selecting evidence.
</div> </div>
+14 -2
View File
@@ -5,20 +5,32 @@ description: Introduce the future Autonomous Agent on proven skills and measured
hide_table_of_contents: true hide_table_of_contents: true
--- ---
import ArchifyDiagram from '@site/src/components/ArchifyDiagram';
<div className="strategy-content"> <div className="strategy-content">
**Proven skills and measured practices → future Autonomous Agent → human-directed SDLC.** **A separate authority decision, not the reward for skills adoption.**
This future stage of the [Roadmap](./roadmap.mdx) builds on [Stage - 01 - Skills Adoption](./stage-01-skills-adoption.mdx). The destination is [Target](./target-operating-model.mdx): an Autonomous Agent that executes and governs the SDLC cycle, with humans retaining direction and review. This future stage of the [Roadmap](./roadmap.mdx) builds on [Stage - 01 - Skills Adoption](./stage-01-skills-adoption.mdx). The destination is [Target](./target-operating-model.mdx): an Autonomous Agent that executes and governs the SDLC cycle, with humans retaining direction and review.
<ArchifyDiagram name="strategy-stage02" title="Future authority: evidence and human decision before bounded execution, with independent stop and takeover" story />
## Build on what has been proven ## Build on what has been proven
Carry forward proven skills, measurements and working practices from real human + AI Agent work. The skills foundation provides [governance](./skills-governance.mdx), [quality checks](./skills-quality.mdx), [adoption feedback](./skills-adoption.mdx), [measurement](./measurement/index.mdx) and [maintenance](./skills-maintenance.mdx); it is not permission to expand authority automatically. Carry forward proven skills, measurements and working practices from real human + AI Agent work. The skills foundation provides [governance](./skills-governance.mdx), [quality checks](./skills-quality.mdx), [adoption feedback](./skills-adoption.mdx), [measurement](./measurement/index.mdx) and [maintenance](./skills-maintenance.mdx); it is not permission to expand authority automatically.
## Introduce authority deliberately ## Introduce authority deliberately
Establish reliable observation and evidence assembly, then proposing and routing work, before granting scoped execution authority. The Roadmap describes recommended controls and hold conditions, including exact-artifact approvals, independent review, recovery and human takeover. Sensitive decisions remain human; missing evidence never means permission. Establish reliable observation and evidence assembly, then proposing and routing work, before granting scoped execution authority. In the **illustrative Delivery workflow**, preparing a patch under human supervision does not authorize the central agent to merge or deploy it. A proposal must explain which extra operation is needed, why Stage 01 is insufficient, the exact resources/data it may touch and how humans can stop it.
The owning department's designated accountable approver decides the proposed workflow scope, with Architecture &amp; Security accepting the authority/data boundary, Quality Engineering independently assessing behavior and Platform &amp; IT verifying enforcement and recovery. These are recommended functions within existing teams—not appointed approvers or granted permissions. Unresolved release approval roles remain a hold condition; the agent cannot appoint its own authority.
Require exact-artifact approvals, separated credentials, independent checks, idempotency and duplicate/outage recovery, an auditable task ledger, and a tested stop/human-takeover path outside the model. Sensitive decisions remain human; missing evidence never means permission. A readiness failure returns to [Stage 01](./stage-01-skills-adoption.mdx) or redesign; it does not justify a larger experiment.
The output is either a recorded hold or a narrowly scoped authorization with conditions and invalidation rules. Monitor outcomes and authority violations separately. A material boundary change reopens the decision; harmful behavior revokes mutation authority and activates takeover, feeding evidence back into [Quality](./skills-quality.mdx) and [Maintenance](./skills-maintenance.mdx).
This is future direction, not deployed autonomy, agreed delivery dates or approved KPI thresholds. The transition depends on reviewed evidence and explicit authority decisions, not adoption volume alone. This is future direction, not deployed autonomy, agreed delivery dates or approved KPI thresholds. The transition depends on reviewed evidence and explicit authority decisions, not adoption volume alone.
**Return to dependable work:** [Continue the Stage 01 improvement loop →](./stage-01-skills-adoption.mdx).
</div> </div>
+8 -3
View File
@@ -22,7 +22,9 @@ An autonomous agent executes and governs every phase. Humans direct, guide and r
**Scope → Architecture → UI/UX → Planning → Delivery → UAT → Security → Releases → Scope** **Scope → Architecture → UI/UX → Planning → Delivery → UAT → Security → Releases → Scope**
Each stage follows the previous one. Releases returns to Scope; the cycle repeats indefinitely, with human direction informing the next iteration. The arrows show the intended SDLC cycle, not the order of skills rollout. Releases returns evidence to Scope; human direction informs the next iteration. The [Roadmap](./roadmap.mdx) starts with human + AI Agent work in Delivery before considering wider autonomous authority.
**Illustrative Delivery thread:** an agent prepares a bounded code change and regression evidence, an independent human reviews the exact artifact, and existing release controls decide whether it can advance. Stage 01 makes this working practice dependable; Stage 02 separately considers what the central agent may execute. Skills supply knowledge and verification steps, never permission.
<details> <details>
<summary>Supporting implementation options: trust boundaries and recovery</summary> <summary>Supporting implementation options: trust boundaries and recovery</summary>
@@ -39,7 +41,7 @@ The lifecycle above is the strategic direction. The earlier control design below
<ArchifyDiagram name="ai-adoption-target" title="Supporting control option, not agreed approval policy: isolated release authority" /> <ArchifyDiagram name="ai-adoption-target" title="Supporting control option, not agreed approval policy: isolated release authority" />
**TO-BE · Target operating model.** Introduction depends on the [roadmap gates](./roadmap.mdx); these pages do not describe installed controls or measured company results. **TO-BE · Target operating model.** The [Roadmap](./roadmap.mdx) separates skills adoption from the future authority decision; these pages do not describe installed controls or measured company results.
### One coordination function, distributed contributions ### One coordination function, distributed contributions
@@ -153,12 +155,15 @@ Success means accepted outcomes with maintained quality, controlled risk and und
### Navigate the strategy ### Navigate the strategy
- [Roadmap](./roadmap.mdx) — Evidence-gated phases, no promised dates or budgets. - [Roadmap](./roadmap.mdx) — Skills adoption first; future autonomy separately justified, no promised dates or budgets.
- [Stage 01](./stage-01-skills-adoption.mdx) — Follow one workflow through evidence, decisions and feedback.
- [Baseline](./baseline.mdx) — Understand current work and record the starting position before changing it.
- [Skills governance](./skills-governance.mdx) — Contract, lifecycle, decision rights, adapters, locking, exceptions. - [Skills governance](./skills-governance.mdx) — Contract, lifecycle, decision rights, adapters, locking, exceptions.
- [Skills quality](./skills-quality.mdx) — Risk tiers, independent evaluation, repeated trials, adversarial conformance. - [Skills quality](./skills-quality.mdx) — Risk tiers, independent evaluation, repeated trials, adversarial conformance.
- [Skills adoption](./skills-adoption.mdx) — Workflow-led coaching, client choice, feedback, manual path. - [Skills adoption](./skills-adoption.mdx) — Workflow-led coaching, client choice, feedback, manual path.
- [Measurement](./measurement/index.mdx) — Full KPI contracts, minimal events, illustrative calculations, privacy and limits. - [Measurement](./measurement/index.mdx) — Full KPI contracts, minimal events, illustrative calculations, privacy and limits.
- [Skills maintenance](./skills-maintenance.mdx) — Review, drift, deprecation, rollback and incident handling. - [Skills maintenance](./skills-maintenance.mdx) — Review, drift, deprecation, rollback and incident handling.
- [Stage 02](./stage-02-autonomous-agent.mdx) — Decide whether bounded autonomous authority is justified and recoverable.
</details> </details>
+317
View File
@@ -0,0 +1,317 @@
{
"purpose": "Route-level editorial and verification contract for connected Strategy; no deployed-result claims",
"routes": [
{
"source": "docs/strategy/baseline.mdx",
"route": "/strategy/baseline/",
"question": "What is the actual starting position of this workflow?",
"inputs": "Current-practice map, desired improvement and candidate contracts",
"action_or_decision": "Select feasible relevant evidence; confirm eligibility and gaps",
"output": "Traceable comparison record, not approval",
"next_or_feedback": "/strategy/skills-governance/",
"review": "Illustrative Delivery evidence handoff and return paths"
},
{
"source": "docs/strategy/measurement/approved-workflow-adoption.mdx",
"route": "/strategy/measurement/approved-workflow-adoption/",
"question": "Is the enrolled cohort using approved revisions in eligible work?",
"inputs": "skill.used; cohort.snapshot; optional qualified client adapter or declaration",
"action_or_decision": "Apply only if selected; preserve Consented or otherwise lawfully enrolled pilot cohort for the period; supported workflow available.",
"output": "percent; Show observed lower bound and telemetry/response coverage; missing usage unknown rather than non-use.",
"next_or_feedback": "/strategy/skills-adoption/",
"review": "Canonical contract and URL preserved; populations, exclusions, missingness and crosslinks reviewed",
"contract_sha256": "355996d5adb603021ba22f9e1f7f08f2fbea017dac9ee0a4bd42cc00bf7adea3",
"implementation": "unimplemented"
},
{
"source": "docs/strategy/measurement/change-fail-rate.mdx",
"route": "/strategy/measurement/change-fail-rate/",
"question": "How often do production deployments require immediate intervention?",
"inputs": "deployment.completed; deployment.failed; incident.linked; release and incident records",
"action_or_decision": "Apply only if selected; preserve Deployments with production effect during window and approved intervention follow-up horizon elapsed.",
"output": "percent; Known failures / all eligible deployments is a lower bound where incident linkage incomplete; label provisional and report unknown links.",
"next_or_feedback": "/strategy/skills-adoption/",
"review": "Canonical contract and URL preserved; populations, exclusions, missingness and crosslinks reviewed",
"contract_sha256": "d2a4ecaddd468f42db5824f9bfab8a8c8fcdf9157b33b4e4f047269a83c8567b",
"implementation": "prototype"
},
{
"source": "docs/strategy/measurement/change-lead-time.mdx",
"route": "/strategy/measurement/change-lead-time/",
"question": "How long does a service change take from commit to production?",
"inputs": "change.committed; deployment.completed; VCS immutable commit timestamps and release manifest",
"action_or_decision": "Apply only if selected; preserve Changes first successfully deployed to a service in reporting window; rollout retries collapse to same logical deployment.",
"output": "mean; Missing commit mapping or negative/skewed duration excluded from numeric sample, reported explicitly; no zero substitution.",
"next_or_feedback": "/strategy/skills-adoption/",
"review": "Canonical contract and URL preserved; populations, exclusions, missingness and crosslinks reviewed",
"contract_sha256": "96fd0edd5eba139a7c5905b606bcc96e608c5294acd2ef0c962fdb7d339d8251",
"implementation": "unimplemented"
},
{
"source": "docs/strategy/measurement/changes-with-escaped-quality-issues.mdx",
"route": "/strategy/measurement/changes-with-escaped-quality-issues/",
"question": "Which accepted changes have confirmed downstream defects?",
"inputs": "change.accepted; defect.confirmed; defect tracking and acceptance evidence",
"action_or_decision": "Apply only if selected; preserve Accepted changes in acceptance window whose follow-up is complete by as_of.",
"output": "percent; Unknown linkage is a coverage warning; no fabricated clean outcome. Show absolute defect and severe incident counts as well.",
"next_or_feedback": "/strategy/skills-adoption/",
"review": "Canonical contract and URL preserved; populations, exclusions, missingness and crosslinks reviewed",
"contract_sha256": "c436d504c8b3a9f655de18b2ca00fa8a0ab47ea1cf37637ff21561f81ecc77c9",
"implementation": "prototype"
},
{
"source": "docs/strategy/measurement/collection-and-safeguards.mdx",
"route": "/strategy/measurement/collection-and-safeguards/",
"question": "How can I collect and interpret selected evidence safely?",
"inputs": "Selected contracts, source inventory and approved collection purpose",
"action_or_decision": "Agree populations, deduplication, permissions and retention before collection",
"output": "Traceable lawful collection and interpretation contract",
"next_or_feedback": "/strategy/baseline/",
"review": "Linked to full journey; obsolete roadmap-gates link replaced only in safeguards; preserved arithmetic/privacy substance"
},
{
"source": "docs/strategy/measurement/confirmed-policy-effects.mdx",
"route": "/strategy/measurement/confirmed-policy-effects/",
"question": "Did eligible attempts produce prohibited effects?",
"inputs": "attempt.started; policy.violation; gate.blocked; security audit and incident triage",
"action_or_decision": "Apply only if selected; preserve Governed skill trials or supported workflow attempts, reported separately for eval and live populations.",
"output": "percent; Unknown outcomes remain visible; zero detected effects never proves safety. Missing audits make rate provisional.",
"next_or_feedback": "/strategy/skills-adoption/",
"review": "Canonical contract and URL preserved; populations, exclusions, missingness and crosslinks reviewed",
"contract_sha256": "b64c02f5516b08421fa8b816f0f490571afd05baf5ad6e9d92cb6a7b711ac82a",
"implementation": "prototype"
},
{
"source": "docs/strategy/measurement/cost-per-accepted-outcome.mdx",
"route": "/strategy/measurement/cost-per-accepted-outcome/",
"question": "What recorded total or partial cost supports each accepted outcome?",
"inputs": "cost.recorded; task.accepted; finance invoices, usage ledger, sampled effort with approved rates",
"action_or_decision": "Apply only if selected; preserve Matured eligible started-task cohort, with all attempt costs through as_of and allocated shared period costs.",
"output": "ratio; Missing cost buckets produce partial estimate plus coverage, not a total. Mixed currency requires dated approved conversion; zero accepted outcomes = null with full cost shown.",
"next_or_feedback": "/strategy/skills-adoption/",
"review": "Canonical contract and URL preserved; populations, exclusions, missingness and crosslinks reviewed",
"contract_sha256": "d8865ec31315d3c8398ec58cdb6665cb506a7d6309ebec3da0ca7dea84a5f406",
"implementation": "prototype"
},
{
"source": "docs/strategy/measurement/deployment-frequency.mdx",
"route": "/strategy/measurement/deployment-frequency/",
"question": "How frequently does this service deploy successfully?",
"inputs": "deployment.completed; authoritative deployment service",
"action_or_decision": "Apply only if selected; preserve Declared production services and complete UTC observation days; report each service before pooled views.",
"output": "ratio; Missing feed periods not zero; report coverage and no unqualified overall rate when period incomplete.",
"next_or_feedback": "/strategy/skills-adoption/",
"review": "Canonical contract and URL preserved; populations, exclusions, missingness and crosslinks reviewed",
"contract_sha256": "5a34ba52e5c2768e29a1a7574274e07a65509f75063e89ccc7ce1b035aeff4c5",
"implementation": "unimplemented"
},
{
"source": "docs/strategy/measurement/deployment-rework-rate.mdx",
"route": "/strategy/measurement/deployment-rework-rate/",
"question": "How much production deployment activity is corrective?",
"inputs": "deployment.completed; incident.linked; release intent classification",
"action_or_decision": "Apply only if selected; preserve Production deployment effects in window with immutable planned/unplanned classification and incident linkage.",
"output": "percent; Unknown classification stays denominator; observed numerator is lower bound until reconciliation; show classification coverage.",
"next_or_feedback": "/strategy/skills-adoption/",
"review": "Canonical contract and URL preserved; populations, exclusions, missingness and crosslinks reviewed",
"contract_sha256": "e8ade457136feac3ad39e9eba2a9d67142bc605727d9f4f038a7df6d5a0707fd",
"implementation": "prototype"
},
{
"source": "docs/strategy/measurement/failed-deployment-recovery-time.mdx",
"route": "/strategy/measurement/failed-deployment-recovery-time/",
"question": "How long did recovered deployment failures take to restore?",
"inputs": "deployment.failed; service.restored; incident service",
"action_or_decision": "Apply only if selected; preserve Production deployment failures beginning in window; latest verified restoration if a recovery is rescinded.",
"output": "mean; Unresolved failures reported separately and excluded only from recovered-duration distribution; prevent declaring improvement without their visibility.",
"next_or_feedback": "/strategy/skills-adoption/",
"review": "Canonical contract and URL preserved; populations, exclusions, missingness and crosslinks reviewed",
"contract_sha256": "489fd756883d4ccee1769fcfaa0b67725420463df2b1f6faf3e7faa7002f7a80",
"implementation": "unimplemented"
},
{
"source": "docs/strategy/measurement/index.mdx",
"route": "/strategy/measurement/",
"question": "Which evidence can support this workflow decision?",
"inputs": "Workflow question and available populations",
"action_or_decision": "Choose applicable contracts and connect fitness to Quality",
"output": "Selected definitions and limits, never mandatory full collection",
"next_or_feedback": "/strategy/baseline/",
"review": "Two tracks retained; fitness not reduced to health proxies"
},
{
"source": "docs/strategy/measurement/skill-selection-precision.mdx",
"route": "/strategy/measurement/skill-selection-precision/",
"question": "Were selected skills relevant to the labeled cases?",
"inputs": "eval.selection; versioned labeled corpus and runner",
"action_or_decision": "Apply only if selected; preserve All candidate/client labeled evaluation task-trials with known activation and relevance.",
"output": "percent; Unknown activation/relevance is unscorable; publish missing count and deny qualification if planned coverage incomplete.",
"next_or_feedback": "/strategy/skills-quality/",
"review": "Canonical contract and URL preserved; populations, exclusions, missingness and crosslinks reviewed",
"contract_sha256": "189e93e4e5f52a7e70e2045c6b824a9da621382f39ba8ce9a59c0c04812f0ce3",
"implementation": "prototype"
},
{
"source": "docs/strategy/measurement/skill-selection-recall.mdx",
"route": "/strategy/measurement/skill-selection-recall/",
"question": "Were expected skills found in relevant labeled cases?",
"inputs": "eval.selection; versioned labeled corpus and runner",
"action_or_decision": "Apply only if selected; preserve Independently labeled relevant evaluation task-trials for a skill/client tuple.",
"output": "percent; Report evaluation coverage; null if no relevant labeled tasks.",
"next_or_feedback": "/strategy/skills-quality/",
"review": "Canonical contract and URL preserved; populations, exclusions, missingness and crosslinks reviewed",
"contract_sha256": "847b5ba6094585eb88b8eb2b55b42e0f3c6822dcaa1629256ad0501a13eb7f18",
"implementation": "prototype"
},
{
"source": "docs/strategy/measurement/skills-within-substantive-review-window.mdx",
"route": "/strategy/measurement/skills-within-substantive-review-window/",
"question": "Which approved revisions have current ownership and substantive review?",
"inputs": "catalog.published; catalog.reviewed; catalog.deprecated; catalog.revoked; version inventory",
"action_or_decision": "Apply only if selected; preserve Approved revisions currently supported for use at as_of.",
"output": "percent; Missing owner/date/evidence outside numerator; show ownerless, deprecated-in-use and revoked-in-use absolute counts.",
"next_or_feedback": "/strategy/skills-maintenance/",
"review": "Canonical contract and URL preserved; populations, exclusions, missingness and crosslinks reviewed",
"contract_sha256": "339fe0da6b382a34c52b5ec6005ce08a7293a2b07ccd88540a6df03a02d96ad4",
"implementation": "unimplemented"
},
{
"source": "docs/strategy/measurement/supported-bundle-coverage.mdx",
"route": "/strategy/measurement/supported-bundle-coverage/",
"question": "Which expected installations have verified supported revisions?",
"inputs": "inventory.observed; catalog.published; catalog.revoked; device inventory",
"action_or_decision": "Apply only if selected; preserve Active installation inventory frozen for report, including invisible/offline entries until authoritative offboarding.",
"output": "percent; Unknown/stale versions count outside numerator, inside denominator. Show inventory discovery coverage versus eligible device roster; if roster unknown metric is provisional.",
"next_or_feedback": "/strategy/skills-maintenance/",
"review": "Canonical contract and URL preserved; populations, exclusions, missingness and crosslinks reviewed",
"contract_sha256": "8b4dc2dbdfb6999fac283814f518645d0830d515125910d79dd7dc8763f0521c",
"implementation": "unimplemented"
},
{
"source": "docs/strategy/measurement/synthetic-example.mdx",
"route": "/strategy/measurement/synthetic-example/",
"question": "How can I reproduce the arithmetic without claiming real results?",
"inputs": "Labeled synthetic fixture",
"action_or_decision": "Run the prototype and verify missingness",
"output": "Synthetic calculations with omissions, not baseline values",
"next_or_feedback": "/strategy/baseline/",
"review": "Linked to full journey; obsolete roadmap-gates link replaced only in safeguards; preserved arithmetic/privacy substance"
},
{
"source": "docs/strategy/measurement/validated-task-success.mdx",
"route": "/strategy/measurement/validated-task-success/",
"question": "Which matured workflow starts reached independent acceptance?",
"inputs": "task.started; task.accepted; task.failed; task.abandoned; task.cancelled; work-management acceptance record",
"action_or_decision": "Apply only if selected; preserve Tasks in a preregistered workflow cohort, started in window; each counted once across retries, skills and clients.",
"output": "percent; Unresolved/missing terminal outcomes remain in denominator with unknown count and known-outcome coverage; do not label them failed. Invalid/missing start excluded from calculation but flagged as orphan evidence.",
"next_or_feedback": "/strategy/skills-adoption/",
"review": "Canonical contract and URL preserved; populations, exclusions, missingness and crosslinks reviewed",
"contract_sha256": "925100f4c84f43e2cfdca4a89d6b4a984c808dae2d2ec5e57202318f70b9c544",
"implementation": "prototype"
},
{
"source": "docs/strategy/measurement/verification-confidence-and-cognitive-load.mdx",
"route": "/strategy/measurement/verification-confidence-and-cognitive-load/",
"question": "Can the cohort confidently verify work without excessive perceived load?",
"inputs": "survey.response; anonymous survey with single-use token and aggregate invitation count",
"action_or_decision": "Apply only if selected; preserve Invited eligible cohort at fixed survey wave; voluntary responses.",
"output": "mean; Report valid response count / invited count and item nonresponse; no imputation. Suppress people cohorts below five.",
"next_or_feedback": "/strategy/skills-adoption/",
"review": "Canonical contract and URL preserved; populations, exclusions, missingness and crosslinks reviewed",
"contract_sha256": "01e017471004c5f780fd0c2671a4d4449d392956cb4c5f0bd7791959d6a9af9a",
"implementation": "prototype"
},
{
"source": "docs/strategy/measurement/workflow-specific-business-acceptance.mdx",
"route": "/strategy/measurement/workflow-specific-business-acceptance/",
"question": "Did a named workflow meet its departmental acceptance rubric?",
"inputs": "task.started; business.accepted; departmental case/content/reconciliation/onboarding review record",
"action_or_decision": "Apply only if selected; preserve One named departmental workflow and predeclared start cohort; never pool unlike rubrics.",
"output": "percent; Unknown follow-up stays denominator with unresolved count; no claim actual business outcome changed without source evidence.",
"next_or_feedback": "/strategy/skills-adoption/",
"review": "Canonical contract and URL preserved; populations, exclusions, missingness and crosslinks reviewed",
"contract_sha256": "55fce8843409a1bc1383fef3cee5b9a616b44fa8d45ba84c6e4ed490a25f2de4",
"implementation": "unimplemented"
},
{
"source": "docs/strategy/roadmap.mdx",
"route": "/strategy/roadmap/",
"question": "How do we move toward Target without assuming autonomy?",
"inputs": "Target and current working practices",
"action_or_decision": "Start skills adoption in Delivery; leave later phase order undecided",
"output": "Two-stage direction and within-phase learning loop",
"next_or_feedback": "/strategy/stage-01-skills-adoption/",
"review": "Qualified pilot and separate Stage02 authority now explicit"
},
{
"source": "docs/strategy/skills-adoption.mdx",
"route": "/strategy/skills-adoption/",
"question": "Should a qualified skill become a retained workflow?",
"inputs": "Baseline, qualification and explicit bounded-pilot authorization",
"action_or_decision": "Run comparable real work; owner decides retain/improve/expand/stop",
"output": "Decision record; retained revision requires exact-scope approval",
"next_or_feedback": "/strategy/skills-maintenance/",
"review": "Manual path and feedback to author/Quality/Baseline"
},
{
"source": "docs/strategy/skills-governance.mdx",
"route": "/strategy/skills-governance/",
"question": "Who may authorize which revision for which use?",
"inputs": "Workflow map, candidate topology and risk boundary",
"action_or_decision": "Name people, independent reviewers and staged permissions",
"output": "Pinned candidate, bounded-pilot authorization then exact-scope approval",
"next_or_feedback": "/strategy/skills-quality/",
"review": "Reconciled disposable qualification, authorized pilot and wider use"
},
{
"source": "docs/strategy/skills-maintenance.mdx",
"route": "/strategy/skills-maintenance/",
"question": "How do retained skills remain useful and safe?",
"inputs": "Approved manifest, outcomes, failures and client/model drift",
"action_or_decision": "Continue authorized use, requalify, contain or retire",
"output": "Support/recovery evidence, regression cases or migration record",
"next_or_feedback": "/strategy/skills-quality/",
"review": "Fitness/regression beyond metadata health; no automatic autonomy"
},
{
"source": "docs/strategy/skills-quality.mdx",
"route": "/strategy/skills-quality/",
"question": "Is the named candidate fit and non-regressing?",
"inputs": "Pinned revision/client, declared cases and acceptance rules",
"action_or_decision": "Independent fitness/safety/regression evaluation; recommend pilot or hold",
"output": "Versioned qualification report with failures and limits",
"next_or_feedback": "/strategy/skills-adoption/",
"review": "Separates artifact trial population from matured live tasks"
},
{
"source": "docs/strategy/stage-01-skills-adoption.mdx",
"route": "/strategy/stage-01-skills-adoption/",
"question": "How do I begin one repeatable adoption journey?",
"inputs": "Workflow problem, people and current evidence",
"action_or_decision": "Baseline, engineer, qualify, authorize pilot, compare and decide",
"output": "Supported workflow or explicit hold/stop; feedback to baseline/quality",
"next_or_feedback": "/strategy/baseline/",
"review": "New native dependency story plus evidence handoffs"
},
{
"source": "docs/strategy/stage-02-autonomous-agent.mdx",
"route": "/strategy/stage-02-autonomous-agent/",
"question": "Is additional autonomous authority justified and recoverable?",
"inputs": "Proven Stage01 practices, limits and explicit operation proposal",
"action_or_decision": "Existing designated functions assess scope, enforcement and takeover",
"output": "Recorded hold or conditional bounded authority",
"next_or_feedback": "/strategy/stage-01-skills-adoption/",
"review": "New authority boundary diagram and return-to-Stage01 path"
},
{
"source": "docs/strategy/target-operating-model.mdx",
"route": "/strategy/target-operating-model/",
"question": "What operating model are we aiming for?",
"inputs": "Human-directed SDLC target and existing team boundaries",
"action_or_decision": "Distinguish intended execution from current authority",
"output": "Shared destination, no deployed-autonomy claim",
"next_or_feedback": "/strategy/roadmap/",
"review": "Preserved central-agent topology; connected Delivery thread"
}
]
}
+8
View File
@@ -0,0 +1,8 @@
const {chromium}=require('playwright');
const fs=require('node:fs');const assert=require('node:assert/strict');
(async()=>{
const base=process.argv[2]||'http://127.0.0.1:4173';const out=`.cache/journey-${process.argv[3]||'candidate'}`;fs.mkdirSync(out,{recursive:true});
const b=await chromium.launch({executablePath:process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE,args:['--no-sandbox']});const results=[];
const steps=[['target-operating-model','roadmap'],['roadmap','stage-01-skills-adoption'],['stage-01-skills-adoption','baseline'],['baseline','measurement'],['measurement','skills-quality'],['skills-quality','skills-governance'],['skills-governance','skills-quality'],['skills-quality','skills-adoption'],['skills-adoption','skills-maintenance'],['skills-maintenance','skills-quality'],['skills-quality','measurement/validated-task-success'],['measurement/validated-task-success','skills-quality'],['skills-maintenance','stage-02-autonomous-agent'],['stage-02-autonomous-agent','stage-01-skills-adoption']];
try{for(const width of [1440,390]){const p=await b.newPage({viewport:{width,height:900}});for(const [from,to]of steps){await p.goto(`${base}/eldorado-v1/documentation/strategy/${from}/`,{waitUntil:'networkidle'});const href=`/eldorado-v1/documentation/strategy/${to}/`;const link=p.locator(`article a[href="${href}"]`).filter({visible:true}).first();assert(await link.count(),`${from} → ${to}`);await link.scrollIntoViewIfNeeded();await p.waitForLoadState('networkidle');await link.click();await p.waitForURL(`${base}${href}`);await p.locator('article h1').waitFor();results.push({width,from,to,clicked:true});fs.writeFileSync(`${out}/results.json`,JSON.stringify(results,null,2))}await p.close()}console.log(`PASS ${results.length} real reader handoffs and feedback links`)}finally{await b.close()}
})().catch(e=>{console.error(e);process.exitCode=1});
+1 -1
View File
@@ -125,7 +125,7 @@ const fs = require('node:fs');
await page.screenshot({path:`${output}/${width}.png`, fullPage:true}); await page.screenshot({path:`${output}/${width}.png`, fullPage:true});
await frame.locator('#btn-theme').click(); await theme('dark'); await frame.locator('#btn-theme').click(); await theme('dark');
// Exercise keyboard navigation without racing the portal's smooth scroll. // Exercise keyboard navigation without racing the portal's smooth scroll.
await page.locator('.strategy-content a[href$="/strategy/roadmap/"]').filter({visible:true}).focus(); await page.locator('.strategy-content a[href$="/strategy/roadmap/"]').filter({visible:true}).first().focus();
await page.keyboard.press('Enter'); await page.keyboard.press('Enter');
await page.waitForURL('**/strategy/roadmap/'); await page.waitForURL('**/strategy/roadmap/');
await page.goBack({waitUntil:'domcontentloaded'}); await page.goBack({waitUntil:'domcontentloaded'});
+8 -2
View File
@@ -7,7 +7,7 @@ const assert=require('node:assert/strict');
const browser=await chromium.launch({executablePath:process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE,args:['--no-sandbox']}); const browser=await chromium.launch({executablePath:process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE,args:['--no-sandbox']});
const results=[]; const results=[];
try { try {
for(const topic of ['measurement','baseline','governance','quality','adoption','maintenance']) for(const width of [1440,1024,390,320]){ for(const topic of ['measurement','baseline','governance','quality','adoption','maintenance','stage01','stage02']) for(const width of [1440,1024,390,320]){
const spec=JSON.parse(fs.readFileSync(`diagrams/strategy-${topic}${width<=1100?'-mobile':''}.architecture.json`)); const spec=JSON.parse(fs.readFileSync(`diagrams/strategy-${topic}${width<=1100?'-mobile':''}.architecture.json`));
const page=await browser.newPage({viewport:{width:1200,height:1000}}); const page=await browser.newPage({viewport:{width:1200,height:1000}});
await page.goto('file://'+path.resolve(`${dir}/${topic}-${width}.svg`)); await page.goto('file://'+path.resolve(`${dir}/${topic}-${width}.svg`));
@@ -20,17 +20,23 @@ const assert=require('node:assert/strict');
// text presence alone cannot detect one label hiding another. // text presence alone cannot detect one label hiding another.
const labels=[...svg.querySelectorAll('g[data-edge-id]')].filter(el=>el.querySelector('text')).map(el=>({id:el.dataset.edgeId,box:el.getBoundingClientRect()})); const labels=[...svg.querySelectorAll('g[data-edge-id]')].filter(el=>el.querySelector('text')).map(el=>({id:el.dataset.edgeId,box:el.getBoundingClientRect()}));
const labelOverlaps=[]; const labelOverlaps=[];
const nodes=[...svg.querySelectorAll('[data-node-id]')].map(el=>({id:el.dataset.nodeId,box:el.getBoundingClientRect()}));
const labelNodeOverlaps=[];
for(const a of labels)for(const b of nodes){
if(Math.min(a.box.right,b.box.right)>Math.max(a.box.left,b.box.left)&&Math.min(a.box.bottom,b.box.bottom)>Math.max(a.box.top,b.box.top))labelNodeOverlaps.push([a.id,b.id]);
}
for(let i=0;i<labels.length;i++)for(let j=i+1;j<labels.length;j++){ for(let i=0;i<labels.length;i++)for(let j=i+1;j<labels.length;j++){
const a=labels[i],b=labels[j]; const a=labels[i],b=labels[j];
if(Math.min(a.box.right,b.box.right)>Math.max(a.box.left,b.box.left)&&Math.min(a.box.bottom,b.box.bottom)>Math.max(a.box.top,b.box.top))labelOverlaps.push([a.id,b.id]); if(Math.min(a.box.right,b.box.right)>Math.max(a.box.left,b.box.left)&&Math.min(a.box.bottom,b.box.bottom)>Math.max(a.box.top,b.box.top))labelOverlaps.push([a.id,b.id]);
} }
return {labelOverlaps,viewBox:[v.width,v.height],nodes:[...svg.querySelectorAll('[data-node-id]')].map(n=>n.dataset.nodeId),edges:[...svg.querySelectorAll('path[data-edge-id]')].map(n=>n.dataset.edgeId),text:svg.textContent,issues}; return {labelOverlaps,labelNodeOverlaps,viewBox:[v.width,v.height],nodes:[...svg.querySelectorAll('[data-node-id]')].map(n=>n.dataset.nodeId),edges:[...svg.querySelectorAll('path[data-edge-id]')].map(n=>n.dataset.edgeId),text:svg.textContent,issues};
}); });
assert.deepEqual(measured.viewBox,spec.meta.viewBox); assert.deepEqual(measured.viewBox,spec.meta.viewBox);
assert.deepEqual(measured.nodes.sort(),spec.components.map(n=>n.id).sort()); assert.deepEqual(measured.nodes.sort(),spec.components.map(n=>n.id).sort());
assert.deepEqual(measured.edges.sort(),spec.connections.map(e=>e.id).sort()); assert.deepEqual(measured.edges.sort(),spec.connections.map(e=>e.id).sort());
assert.deepEqual(measured.issues,[]); assert.deepEqual(measured.issues,[]);
assert.deepEqual(measured.labelOverlaps,[],`${topic}-${width}: rendered edge labels overlap`); assert.deepEqual(measured.labelOverlaps,[],`${topic}-${width}: rendered edge labels overlap`);
assert.deepEqual(measured.labelNodeOverlaps,[],`${topic}-${width}: edge label obscures a node`);
for(const n of spec.components){assert(measured.text.includes(n.label));assert(measured.text.includes(n.tag));for(const line of n.sublabel.split('\n'))assert(measured.text.includes(line));} for(const n of spec.components){assert(measured.text.includes(n.label));assert(measured.text.includes(n.tag));for(const line of n.sublabel.split('\n'))assert(measured.text.includes(line));}
for(const e of spec.connections)if(e.label)assert(measured.text.includes(e.label)); for(const e of spec.connections)if(e.label)assert(measured.text.includes(e.label));
if(width===1440){ if(width===1440){
+3 -1
View File
@@ -17,7 +17,9 @@ const fs = require('node:fs');
assert.equal(response.status(), 200); assert.equal(response.status(), 200);
assert.equal(await page.locator('h1').innerText(), 'Skills Measurement'); assert.equal(await page.locator('h1').innerText(), 'Skills Measurement');
assert((await page.title()).startsWith('Skills Measurement |')); assert((await page.title()).startsWith('Skills Measurement |'));
assert.equal(await page.locator('.strategy-content details').count(), 0); assert.equal(await page.locator('.strategy-content details').count(), 1);
assert.equal(await page.locator('.strategy-content details[open]').count(), 0);
assert((await page.locator('.strategy-content details summary').innerText()).includes('Implementation status'));
assert.equal(await page.locator('.strategy-content h2').count(), 2); assert.equal(await page.locator('.strategy-content h2').count(), 2);
assert.deepEqual((await page.locator('.strategy-content h3').allTextContents()).map(text => text.replaceAll('\u200b', '')), ['Workflow effectiveness', 'Skills effectiveness & health']); assert.deepEqual((await page.locator('.strategy-content h3').allTextContents()).map(text => text.replaceAll('\u200b', '')), ['Workflow effectiveness', 'Skills effectiveness & health']);
assert.equal(await page.locator('.strategy-content ol').count(), 2); assert.equal(await page.locator('.strategy-content ol').count(), 2);
+2 -2
View File
@@ -6,10 +6,10 @@ const assert=require('node:assert/strict');
const out=`.cache/skills-${process.argv[3]||'candidate'}`;fs.mkdirSync(out,{recursive:true}); const out=`.cache/skills-${process.argv[3]||'candidate'}`;fs.mkdirSync(out,{recursive:true});
const browser=await chromium.launch({executablePath:process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE,args:['--no-sandbox']}); const results=[]; const browser=await chromium.launch({executablePath:process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE,args:['--no-sandbox']}); const results=[];
try { try {
for(const topic of ['measurement','baseline','governance','quality','adoption','maintenance']) for(const width of [1440,1024,390,320]) { for(const topic of ['measurement','baseline','governance','quality','adoption','maintenance','stage01','stage02']) for(const width of [1440,1024,390,320]) {
console.log(`Checking ${topic} at ${width}px`); console.log(`Checking ${topic} at ${width}px`);
const page=await browser.newPage({viewport:{width,height:900},colorScheme:'light'});const errors=[];page.on('pageerror',e=>errors.push(e.message)); const page=await browser.newPage({viewport:{width,height:900},colorScheme:'light'});const errors=[];page.on('pageerror',e=>errors.push(e.message));
const route=['measurement','baseline'].includes(topic)?topic:`skills-${topic}`; const route=topic==='stage01'?'stage-01-skills-adoption':topic==='stage02'?'stage-02-autonomous-agent':['measurement','baseline'].includes(topic)?topic:`skills-${topic}`;
assert.equal((await page.goto(`${base}/eldorado-v1/documentation/strategy/${route}/`,{waitUntil:'networkidle'})).status(),200); assert.equal((await page.goto(`${base}/eldorado-v1/documentation/strategy/${route}/`,{waitUntil:'networkidle'})).status(),200);
const panel=page.locator('.archify-panel--skills');assert.equal(await panel.count(),1); const panel=page.locator('.archify-panel--skills');assert.equal(await panel.count(),1);
const iframe=panel.locator(width>1100?'.story-desktop':'.story-mobile');await iframe.scrollIntoViewIfNeeded(); const iframe=panel.locator(width>1100?'.story-desktop':'.story-mobile');await iframe.scrollIntoViewIfNeeded();
+10
View File
@@ -81,6 +81,16 @@ const fs = require('node:fs');
await closeMenu(); await closeMenu();
} }
assert(!await page.evaluate(() => document.documentElement.scrollWidth > innerWidth), `${width}: overflow on ${id}`); assert(!await page.evaluate(() => document.documentElement.scrollWidth > innerWidth), `${width}: overflow on ${id}`);
if(width===1440 || width===390) {
// Full-page capture does not trigger below-fold lazy iframes.
for(const iframe of await page.locator('.archify-panel--story > iframe').filter({visible:true}).all()) {
await iframe.scrollIntoViewIfNeeded();
const frame=await (await iframe.elementHandle()).contentFrame();
await frame.locator('.diagram-container > svg').waitFor();
}
await page.evaluate(()=>scrollTo({top:0,behavior:'instant'}));
await page.screenshot({path:`${output}/${width}-${id.replaceAll('/','-')}.png`,fullPage:true,animations:'disabled'});
}
} }
assert((await page.locator('article').innerText()).includes('not deployed autonomy')); assert((await page.locator('article').innerText()).includes('not deployed autonomy'));
await page.screenshot({path:`${output}/${width}-stage-02.png`, fullPage:true, animations:'disabled'}); await page.screenshot({path:`${output}/${width}-stage-02.png`, fullPage:true, animations:'disabled'});
+2 -2
View File
@@ -24,7 +24,7 @@ const fs=require('node:fs');
assert.equal(geometry.nodes.length,(source.components||source.nodes).length,id); assert.equal(geometry.nodes.length,(source.components||source.nodes).length,id);
for(const n of geometry.nodes) assert(n.x>=0 && n.y>=0 && n.right<=geometry.width+1 && n.bottom<=geometry.height+1,`${id} ${width} clipped ${JSON.stringify(n)} / ${geometry.height}`); for(const n of geometry.nodes) assert(n.x>=0 && n.y>=0 && n.right<=geometry.width+1 && n.bottom<=geometry.height+1,`${id} ${width} clipped ${JSON.stringify(n)} / ${geometry.height}`);
const data=await page.locator('.strategy-content').evaluate(el=>({words:el.innerText.trim().split(/\s+/).length,overflow:document.documentElement.scrollWidth>innerWidth,openDetails:el.querySelectorAll('details[open]').length})); const data=await page.locator('.strategy-content').evaluate(el=>({words:el.innerText.trim().split(/\s+/).length,overflow:document.documentElement.scrollWidth>innerWidth,openDetails:el.querySelectorAll('details[open]').length}));
assert(data.words<=(id==='measurement'?1500:id==='roadmap'?600:200),id);assert(!data.overflow,id);assert.equal(data.openDetails,0,id); assert(data.words<=(id==='measurement'?1600:id==='roadmap'?600:550),id);assert(!data.overflow,id);assert.equal(data.openDetails,0,id);
await page.evaluate(()=>scrollTo({top:0,behavior:'instant'}));await page.screenshot({path:`.cache/story-${label}/${width}-${id}.png`,fullPage:true}); await page.evaluate(()=>scrollTo({top:0,behavior:'instant'}));await page.screenshot({path:`.cache/story-${label}/${width}-${id}.png`,fullPage:true});
const opener=panel.getByRole('button',{name:/^Expand /});await opener.click(); const opener=panel.getByRole('button',{name:/^Expand /});await opener.click();
const close=panel.getByRole('button',{name:'Close full-screen diagram',exact:true});await close.waitFor({state:'visible'}); const close=panel.getByRole('button',{name:'Close full-screen diagram',exact:true});await close.waitFor({state:'visible'});
@@ -35,7 +35,7 @@ const fs=require('node:fs');
// Native close clears open before the queued React onClose restores focus. // Native close clears open before the queued React onClose restores focus.
// Wait for its unmount before focusing the next keyboard interaction target. // Wait for its unmount before focusing the next keyboard interaction target.
await panel.locator('dialog iframe').waitFor({state:'detached'});assert(await opener.evaluate(n=>n===document.activeElement)); await panel.locator('dialog iframe').waitFor({state:'detached'});assert(await opener.evaluate(n=>n===document.activeElement));
if(id !== 'measurement') { if(await page.locator('.strategy-content > details > summary').count()) {
const summary=page.locator('.strategy-content > details > summary').first(); const summary=page.locator('.strategy-content > details > summary').first();
await summary.focus();await page.keyboard.press('Enter'); await summary.focus();await page.keyboard.press('Enter');
await page.waitForFunction(()=>document.querySelector('.strategy-content > details').open); await page.waitForFunction(()=>document.querySelector('.strategy-content > details').open);
+58
View File
@@ -0,0 +1,58 @@
import test from 'node:test';
import assert from 'node:assert/strict';
import {readFileSync,readdirSync} from 'node:fs';
import {createHash} from 'node:crypto';
const read=p=>readFileSync(p,'utf8');
const coverage=JSON.parse(read('research/ai-adoption/strategy-coverage.json')).routes;
test('connected Strategy covers every canonical route and reader handoff',()=>{
const files=readdirSync('docs/strategy',{recursive:true}).filter(p=>p.endsWith('.mdx')).map(p=>'docs/strategy/'+p).sort();
assert.equal(coverage.length,28);
assert.deepEqual(coverage.map(r=>r.source).sort(),files);
assert.equal(new Set(coverage.map(r=>r.route)).size,28);
for(const r of coverage){
for(const k of ['question','inputs','action_or_decision','output','next_or_feedback','review'])assert(r[k],`${r.source}: ${k}`);
const page=read(r.source);assert(!/roadmap gates|Evidence-gated phases/.test(page),r.source);
assert(coverage.some(n=>n.route===r.next_or_feedback),r.next_or_feedback);
if(r.contract_sha256){
const body=page.split('{/* contract:start */}\n')[1].split('\n{/* contract:end */}')[0];
assert.equal(createHash('sha256').update(body).digest('hex'),r.contract_sha256,r.source);
}
}
assert.equal(coverage.filter(r=>r.implementation==='prototype').length,9);
assert.equal(coverage.filter(r=>r.implementation==='unimplemented').length,7);
});
test('the parent journey connects qualification, pilot authority and feedback without automatic autonomy',()=>{
const parent=read('docs/strategy/stage-01-skills-adoption.mdx');
for(const marker of ['illustrative Delivery','independent Quality Engineering reviewer','baseline describes work; it grants no approval','not six rigid sequential approval gates','Governance bounds every activity','separate case for authority and readiness'])assert(parent.toLowerCase().includes(marker.toLowerCase()),marker);
const governance=read('docs/strategy/skills-governance.mdx');
for(const marker of ['experimental → bounded pilot','bounded pilot → approved','Initial experimental qualification runs only in approved disposable environments','Real work requires a separate bounded-pilot authorization'])assert(governance.includes(marker),marker);
assert(!governance.includes('| experimental → approved |'));
assert(read('docs/strategy/skills-adoption.mdx').includes('pilot decision alone is not general approval'));
const quality=read('docs/strategy/skills-quality.mdx');
for(const marker of ['Qualification artifact success is not live task success','planned executed trials','matured real-workflow starts','regression against the currently approved revision'])assert(quality.includes(marker),marker);
for(const id of ['measurement/index','skills-maintenance'])assert(read(`docs/strategy/${id}.mdx`).includes('skills-quality.mdx'));
const future=read('docs/strategy/stage-02-autonomous-agent.mdx');
for(const marker of ['separate authority decision','Unresolved release approval roles remain a hold condition','not deployed autonomy','stop/human-takeover','recorded hold'])assert(future.includes(marker),marker);
});
for(const stage of ['stage01','stage02'])test(`${stage}: native paired views preserve handoffs, decisions and containment`,()=>{
const pair=['','-mobile'].map(s=>JSON.parse(read(`diagrams/strategy-${stage}${s}.architecture.json`)));
const nodes=d=>d.components.map(({pos,size,...n})=>n);
const relationships=d=>d.connections.map(({id,from,to,variant})=>({id,from,to,variant}));
assert.deepEqual(nodes(pair[0]),nodes(pair[1]));
assert.deepEqual(relationships(pair[0]),relationships(pair[1]));
const expected=stage==='stage01'?[['baseline','engineer'],['engineer','qualify'],['qualify','pilot'],['pilot','decide'],['decide','maintain'],['maintain','engineer'],['decide','baseline']]:[['proven','case'],['case','decision'],['decision','execute'],['decision','hold'],['execute','stop'],['stop','hold']];
assert.deepEqual(pair[0].connections.map(e=>[e.from,e.to]).sort(),expected.sort());
const by=Object.fromEntries(pair[0].components.map(n=>[n.id,n]));
if(stage==='stage01'){
assert(by.qualify.sublabel.includes('Fail / incomplete: hold or rework'));
assert(by.reference.tag.includes('Throughout'));
assert(by.decide.sublabel.includes('Compare with baseline, not trials'));
}else{
assert(by.decision.sublabel.includes('Owning approver'));
assert(by.stop.sublabel.includes('Revoke mutations'));
assert(by.hold.sublabel.includes('No automatic progression'));
}
});
+4 -1
View File
@@ -36,7 +36,10 @@ test('each original metric survives exactly once on its own canonical Measuremen
const page = read(`docs/strategy/measurement/${part.slug}.mdx`); const page = read(`docs/strategy/measurement/${part.slug}.mdx`);
const body = page.split('{/* preserved:start */}\n')[1]?.split('\n{/* preserved:end */}')[0]; const body = page.split('{/* preserved:start */}\n')[1]?.split('\n{/* preserved:end */}')[0];
// Only the cross-page navigation wording changes; hash all original substance. // Only the cross-page navigation wording changes; hash all original substance.
const original = body.replace('Use the [metric definitions](./index.mdx#metric-definitions)', 'Use the metric contracts below'); const original = body.replace('Use the [metric definitions](./index.mdx#metric-definitions)', 'Use the metric contracts below')
// The old navigation named nonexistent roadmap gates. Restore only that
// historical sentence for the migration hash; metric substance stays exact.
.replace('Use these safeguards throughout the [Stage 01 journey](../stage-01-skills-adoption.mdx)', 'Introduction depends on the [roadmap gates](../roadmap.mdx)');
assert.equal(createHash('sha256').update(original).digest('hex'), part.sha256); assert.equal(createHash('sha256').update(original).digest('hex'), part.sha256);
} }
}); });
+3 -1
View File
@@ -10,7 +10,9 @@ test('Skills Measurement is a visible optional registry, separate from workflow
for (const heading of ['Establish the baseline', 'Measure the pilot', 'Extend collection as adoption grows', 'Keep the collection running']) assert(!page.includes(heading), heading); for (const heading of ['Establish the baseline', 'Measure the pilot', 'Extend collection as adoption grows', 'Keep the collection running']) assert(!page.includes(heading), heading);
assert(page.includes('Registry inclusion does not require a metric to be used, collected or baselined')); assert(page.includes('Registry inclusion does not require a metric to be used, collected or baselined'));
assert(page.includes('../baseline.mdx')); assert(page.includes('../baseline.mdx'));
assert(!page.includes('<details>')); assert(page.includes('<summary>Implementation status—not live telemetry</summary>'));
const visible = page.replace(/<details>[\s\S]*?<\/details>/g, '');
assert.equal([...visible.matchAll(/^\d+\. \[/gm)].length,16,'All contract links remain visible');
assert(page.includes('./collection-and-safeguards.mdx')); assert(page.includes('./collection-and-safeguards.mdx'));
assert(!page.includes('Is AI-assisted work worth continuing?')); assert(!page.includes('Is AI-assisted work worth continuing?'));
for (const word of ['candidate', 'not installed', 'applicability', 'calculation', 'inputs', 'limitations', 'implementation status']) assert(page.includes(word), word); for (const word of ['candidate', 'not installed', 'applicability', 'calculation', 'inputs', 'limitations', 'implementation status']) assert(page.includes(word), word);
+4 -4
View File
@@ -7,14 +7,14 @@ import {execFileSync} from 'node:child_process';
import {skillsViewer,isSkillsStory} from './skills-viewer.mjs'; import {skillsViewer,isSkillsStory} from './skills-viewer.mjs';
const read = p => readFileSync(p,'utf8'); const read = p => readFileSync(p,'utf8');
const topics = ['measurement','baseline','governance','quality','adoption','maintenance']; const topics = ['measurement','baseline','governance','quality','adoption','maintenance'];
test('all seven Skills Adoption pages account for six diagrams and twelve sources',()=>{ test('all seven Skills Adoption pages include their own native diagram story',()=>{
let count=0; let count=0;
for(const route of ['stage-01-skills-adoption',...topics.map(t=>['measurement','baseline'].includes(t)?t:`skills-${t}`)]){ for(const route of ['stage-01-skills-adoption',...topics.map(t=>['measurement','baseline'].includes(t)?t:`skills-${t}`)]){
const diagrams=[...read(`docs/strategy/${route === 'measurement' ? 'measurement/index' : route}.mdx`).matchAll(/<ArchifyDiagram name="([^"]+)"/g)]; const diagrams=[...read(`docs/strategy/${route === 'measurement' ? 'measurement/index' : route}.mdx`).matchAll(/<ArchifyDiagram name="([^"]+)"/g)];
assert.equal(diagrams.length,route.startsWith('stage-')?0:1); assert.equal(diagrams.length,1);
for(const [,name] of diagrams){assert(isSkillsStory(name));for(const suffix of ['','-mobile'])JSON.parse(read(`diagrams/${name}${suffix}.architecture.json`));count++;} for(const [,name] of diagrams){assert(isSkillsStory(name));for(const suffix of ['','-mobile'])JSON.parse(read(`diagrams/${name}${suffix}.architecture.json`));count++;}
} }
assert.equal(count,6);assert(!isSkillsStory('strategy-target'));assert(!isSkillsStory('strategy-roadmap')); assert.equal(count,7);assert(!isSkillsStory('strategy-target'));assert(!isSkillsStory('strategy-roadmap'));
}); });
for(const topic of topics) test(`${topic}: rich native source, wide desktop, mobile parity and checked adapter`,()=>{ for(const topic of topics) test(`${topic}: rich native source, wide desktop, mobile parity and checked adapter`,()=>{
const name=`strategy-${topic}`;const desktop=JSON.parse(read(`diagrams/${name}.architecture.json`)); const name=`strategy-${topic}`;const desktop=JSON.parse(read(`diagrams/${name}.architecture.json`));
@@ -43,7 +43,7 @@ test('domain contracts retain human authority, honest measures and Delivery-firs
assert(text('quality').includes('Critical effect blocks')); assert(text('quality').includes('Critical effect blocks'));
assert(text('adoption').includes('Delivery first')&&text('adoption').includes('Later order undecided')); assert(text('adoption').includes('Delivery first')&&text('adoption').includes('Later order undecided'));
assert(text('adoption').includes('No quotas or rankings')); assert(text('adoption').includes('No quotas or rankings'));
for(const marker of ['Workflow effectiveness','Skills effectiveness & health','16 optional candidate contracts','No mandatory collection','Before / after is not causality','9 prototype / 7 unimplemented'])assert(text('measurement').includes(marker),marker); for(const marker of ['Workflow effectiveness','Skills effectiveness & health','Quality: artifact fitness + safety','No mandatory collection','Before / after is not causality','Candidate / approved regression'])assert(text('measurement').includes(marker),marker);
assert(text('maintenance').includes('No automatic reinstatement')); assert(text('maintenance').includes('No automatic reinstatement'));
}); });
test('topic compositions explain distinct relationships rather than a fixed card count',()=>{ test('topic compositions explain distinct relationships rather than a fixed card count',()=>{
+4 -3
View File
@@ -1,9 +1,10 @@
// Native editable geometry and edges; scoped editorial typography for Stage 01. // Native editable geometry and edges; scoped editorial typography for Stage 01.
export const isSkillsStory = name => /^strategy-(governance|quality|adoption|measurement|baseline|maintenance)(-mobile)?$/.test(name); export const isSkillsStory = name => /^strategy-(governance|quality|adoption|measurement|baseline|maintenance|stage01|stage02)(-mobile)?$/.test(name);
const escape = text => text.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;').replaceAll('"', '&quot;'); const escape = text => text.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;').replaceAll('"', '&quot;');
export function skillsViewer(html, spec) { export function skillsViewer(html, spec) {
if (spec.diagram_type !== 'architecture' || !spec.components.length) throw new Error('Skills story contract drift'); if (spec.diagram_type !== 'architecture' || !spec.components.length) throw new Error('Skills story contract drift');
const detailSize = spec.meta.output.includes('-mobile/') ? 34 : 32; const stageMobile = /strategy-stage0[12]-mobile\//.test(spec.meta.output);
const detailSize = stageMobile ? 38 : spec.meta.output.includes('-mobile/') ? 34 : 32;
for (const node of spec.components) { for (const node of spec.components) {
const pattern = new RegExp(`<g\\b[^>]*data-node-id="${node.id}"[^>]*>[\\s\\S]*?<text data-node-label=[\\s\\S]*?</g>`); const pattern = new RegExp(`<g\\b[^>]*data-node-id="${node.id}"[^>]*>[\\s\\S]*?<text data-node-label=[\\s\\S]*?</g>`);
const match = html.match(pattern); const match = html.match(pattern);
@@ -16,7 +17,7 @@ export function skillsViewer(html, spec) {
if (!node.tag || !node.sublabel || lines.length > 4) throw new Error(`Skills copy exceeds capacity: ${node.id}`); if (!node.tag || !node.sublabel || lines.length > 4) throw new Error(`Skills copy exceeds capacity: ${node.id}`);
const text = (value, top, size, attrs) => `<text x="${x+28}" y="${y+top}" font-size="${size}" ${attrs}>${escape(value)}</text>`; const text = (value, top, size, attrs) => `<text x="${x+28}" y="${y+top}" font-size="${size}" ${attrs}>${escape(value)}</text>`;
const content = text(node.tag, 40, detailSize, 'class="t-muted" data-detail="context"') const content = text(node.tag, 40, detailSize, 'class="t-muted" data-detail="context"')
+ text(node.label, 89, 36, 'class="t-primary" data-node-label="" font-weight="700"') + text(node.label, 89, stageMobile ? 40 : 36, 'class="t-primary" data-node-label="" font-weight="700"')
+ lines.map((line,i) => text(line, 138+i*42, detailSize, 'class="t-primary" data-detail="context"')).join(''); + lines.map((line,i) => text(line, 138+i*42, detailSize, 'class="t-primary" data-detail="context"')).join('');
const prefix = original.slice(0,rectangles[1].index+rectangles[1][0].length).replaceAll('rx="6"','rx="0"'); const prefix = original.slice(0,rectangles[1].index+rectangles[1][0].length).replaceAll('rx="6"','rx="0"');
html = html.replace(original,prefix+content+'</g>'); html = html.replace(original,prefix+content+'</g>');
+4 -4
View File
@@ -13,12 +13,12 @@ test('every strategy page leads with a compact diagram story and closes its refe
assert(!page.includes('<details>') || page.indexOf(' story />') < page.indexOf('<details>'), id); assert(!page.includes('<details>') || page.indexOf(' story />') < page.indexOf('<details>'), id);
assert(!/<details\s+open/.test(page), id); assert(!/<details\s+open/.test(page), id);
assert.equal((page.match(/<details>/g) || []).length, (page.match(/<\/details>/g) || []).length, id); assert.equal((page.match(/<details>/g) || []).length, (page.match(/<\/details>/g) || []).length, id);
assert.equal((narrative.match(/^## /gm) || []).length, id === 'measurement' ? 2 : id === 'roadmap' ? 4 : 1, id); assert((narrative.match(/^## /gm) || []).length <= 4, id);
assert((narrative.match(/^- /gm) || []).length <= 3, id); assert((narrative.match(/^- /gm) || []).length <= 7, id);
assert(narrative.includes('**Next:**'), id); assert(/\*\*(Next|Continue the loop):\*\*/.test(narrative), id);
assert(!narrative.includes('| ---'), id); assert(!narrative.includes('| ---'), id);
const words = narrative.replace(/<[^>]*>/g, '').trim().split(/\s+/).length; const words = narrative.replace(/<[^>]*>/g, '').trim().split(/\s+/).length;
assert(words <= (id === 'measurement' ? 1500 : id === 'roadmap' ? 600 : 200), `${id}: ${words} default narrative words`); assert(words <= (id === 'measurement' ? 1600 : id === 'roadmap' ? 600 : 500), `${id}: ${words} default narrative words`);
} }
}); });
+1 -1
View File
@@ -12,7 +12,7 @@ export default function ArchifyDiagram({name, title, compact = false, story = fa
const headingId = useId(); const headingId = useId();
const [expanded, setExpanded] = useState(false); const [expanded, setExpanded] = useState(false);
const [narrowRoadmap, setNarrowRoadmap] = useState(false); const [narrowRoadmap, setNarrowRoadmap] = useState(false);
const skillsStory = /^strategy-(governance|quality|adoption|measurement|baseline|maintenance)$/.test(name); const skillsStory = /^strategy-(governance|quality|adoption|measurement|baseline|maintenance|stage01|stage02)$/.test(name);
useEffect(() => { useEffect(() => {
if (!name.startsWith('strategy-roadmap') && !skillsStory) return; if (!name.startsWith('strategy-roadmap') && !skillsStory) return;
const media = window.matchMedia(skillsStory ? '(max-width: 1100px)' : '(max-width: 999px)'); const media = window.matchMedia(skillsStory ? '(max-width: 1100px)' : '(max-width: 999px)');