@graphrefly/stack 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +214 -0
  3. package/dist/assets/contracts/repository/v1/repository-config.schema.json +23 -0
  4. package/dist/assets/contracts/repository/v1/review.schema.json +182 -0
  5. package/dist/assets/contracts/v1/schemas/artifacts.schema.json +584 -0
  6. package/dist/assets/contracts/v1/schemas/cli-result.schema.json +49 -0
  7. package/dist/assets/contracts/v1/schemas/golden-suite.schema.json +95 -0
  8. package/dist/assets/contracts/v1/schemas/plan-proposal.schema.json +15 -0
  9. package/dist/assets/contracts/v1/schemas/replan-proposal.schema.json +25 -0
  10. package/dist/assets/fixtures/contracts/v1/golden-suite.json +954 -0
  11. package/dist/assets/fixtures/flagship/v1/repository-template.json +48 -0
  12. package/dist/grfs.js +11102 -0
  13. package/dist/review/assets/abnfDiagram-VRR7QNED-5JVeQ-ZW.js +1 -0
  14. package/dist/review/assets/arc-CB8DclF7.js +1 -0
  15. package/dist/review/assets/architecture-TIHT7OUA-Bqe2DsxB.js +1 -0
  16. package/dist/review/assets/architectureDiagram-ZJ3FMSHR-BnEvDO7X.js +36 -0
  17. package/dist/review/assets/array-BifhSqXX.js +1 -0
  18. package/dist/review/assets/blockDiagram-677ZJIJ3-ButhTken.js +132 -0
  19. package/dist/review/assets/c4Diagram-LMCZKHZV-Dv1rgwuU.js +10 -0
  20. package/dist/review/assets/channel-HyWlF92n.js +1 -0
  21. package/dist/review/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  22. package/dist/review/assets/chunk-32BRIVSS-DPG_L6Ow.js +1 -0
  23. package/dist/review/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  24. package/dist/review/assets/chunk-7BUUIJ7U-Bb538aSH.js +1 -0
  25. package/dist/review/assets/chunk-C7G6YPKG-WgqYOC9I.js +1 -0
  26. package/dist/review/assets/chunk-EX3LRPZG-BrpCa9zr.js +231 -0
  27. package/dist/review/assets/chunk-HOUHSVGY-BrlsNa-I.js +1 -0
  28. package/dist/review/assets/chunk-ICXQ74PX-Bmw_N4Lw.js +2 -0
  29. package/dist/review/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  30. package/dist/review/assets/chunk-KEIR6QF5-Dj-OpFgW.js +161 -0
  31. package/dist/review/assets/chunk-MOJQB5TN-BshP08Ez.js +88 -0
  32. package/dist/review/assets/chunk-OGEWGWER-fU6SYJIg.js +1 -0
  33. package/dist/review/assets/chunk-PUDLZKDR-HkwEqIVB.js +156 -0
  34. package/dist/review/assets/chunk-Q4XR5HBZ-BpeC1YXL.js +70 -0
  35. package/dist/review/assets/chunk-RYQCIY6F-0ervO6Fl.js +1 -0
  36. package/dist/review/assets/chunk-V7JOEXUC-CswDacm3.js +206 -0
  37. package/dist/review/assets/chunk-VR4S4FIN-OVY3vSUk.js +1 -0
  38. package/dist/review/assets/chunk-WYO6CB5R-C36byBU-.js +127 -0
  39. package/dist/review/assets/chunk-XXDRQBXY-D6m_P2Gv.js +1 -0
  40. package/dist/review/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  41. package/dist/review/assets/chunk-ZGVPDNZ5-_Ehp2Vnm.js +62 -0
  42. package/dist/review/assets/classDiagram-OUVF2IWQ-U8e_ZvC4.js +1 -0
  43. package/dist/review/assets/classDiagram-v2-EOCWNBFH-U8e_ZvC4.js +1 -0
  44. package/dist/review/assets/cose-bilkent-JH36ORCC-CRp3s0ZJ.js +1 -0
  45. package/dist/review/assets/cynefin-VYW2F7L2-C0b7xdyt.js +1 -0
  46. package/dist/review/assets/cynefinDiagram-TSTJHNR4-CfYu2mB5.js +62 -0
  47. package/dist/review/assets/cytoscape.esm-CQFVGiJu.js +321 -0
  48. package/dist/review/assets/dagre-VKFMJZFB-BvyihZfA.js +4 -0
  49. package/dist/review/assets/dagre-dpRSp0QF.js +1 -0
  50. package/dist/review/assets/defaultLocale-C8Fc0cco.js +1 -0
  51. package/dist/review/assets/diagram-FQU43EPY-DRoOWbTK.js +3 -0
  52. package/dist/review/assets/diagram-G47NLZAW-qFNMv5An.js +24 -0
  53. package/dist/review/assets/diagram-NH7WQ7WH-CsvacND9.js +24 -0
  54. package/dist/review/assets/diagram-OA4YK3LP-qFtWcyNi.js +30 -0
  55. package/dist/review/assets/diagram-WEI45ONY-C5nYGL8t.js +41 -0
  56. package/dist/review/assets/dist-Q9n2Bb2K.js +1 -0
  57. package/dist/review/assets/ebnfDiagram-CCIWWBDH-D_0nhpry.js +1 -0
  58. package/dist/review/assets/erDiagram-Q63AITRT-CIS7hpdK.js +85 -0
  59. package/dist/review/assets/eventmodeling-45OFAUF4-BD32wstC.js +1 -0
  60. package/dist/review/assets/flowDiagram-23GEKE2U-Df5sjnlg.js +1 -0
  61. package/dist/review/assets/ganttDiagram-NO4QXBWP-YVgrRl0A.js +292 -0
  62. package/dist/review/assets/gitGraph-TEB2WS4Q-VVXGfjmO.js +1 -0
  63. package/dist/review/assets/gitGraphDiagram-IHSO6WYX-DU6K2oph.js +106 -0
  64. package/dist/review/assets/graphlib-DS17s2tU.js +1 -0
  65. package/dist/review/assets/index-Bt3i8n39.css +1 -0
  66. package/dist/review/assets/index-CqjR4YYp.js +64 -0
  67. package/dist/review/assets/info-DKCQHKI2-Bzf5qgtg.js +1 -0
  68. package/dist/review/assets/infoDiagram-FWYZ7A6U-CT7TZgi6.js +2 -0
  69. package/dist/review/assets/init-D6jRqBbL.js +1 -0
  70. package/dist/review/assets/ishikawaDiagram-FXEZZL3T-BUpotH7r.js +70 -0
  71. package/dist/review/assets/journeyDiagram-5HDEW3XC-Dfq1Zgbg.js +139 -0
  72. package/dist/review/assets/kanban-definition-HUTT4EX6-e-emfNuh.js +89 -0
  73. package/dist/review/assets/katex-B7rAX3Vi.js +257 -0
  74. package/dist/review/assets/line-fLz2iEv2.js +1 -0
  75. package/dist/review/assets/linear-BPTPEtRN.js +1 -0
  76. package/dist/review/assets/map-BaFkSB1l.js +1 -0
  77. package/dist/review/assets/mermaid-parser.core-BJLV4lM2.js +7 -0
  78. package/dist/review/assets/mindmap-definition-LN4V7U3C-ClSEPrvR.js +96 -0
  79. package/dist/review/assets/ordinal-hYBb2elL.js +1 -0
  80. package/dist/review/assets/packet-7NZHBO7P-DV-IpgNt.js +1 -0
  81. package/dist/review/assets/path-BWPyau1x.js +1 -0
  82. package/dist/review/assets/pegDiagram-2B236MQR-Ck_v89jl.js +1 -0
  83. package/dist/review/assets/pie-RZYD4A2V-B0Ht5h6P.js +1 -0
  84. package/dist/review/assets/pieDiagram-ENE6RG2P-C63dxyZj.js +39 -0
  85. package/dist/review/assets/quadrantDiagram-ABIIQ3AL-STCrBeWw.js +7 -0
  86. package/dist/review/assets/radar-I7S5WNFK-BDk7gJ8s.js +1 -0
  87. package/dist/review/assets/railroad-3IZDKUUU-DFw02UTf.js +1 -0
  88. package/dist/review/assets/railroad-abnf-AHOZXSZD-CHMMM8DG.js +1 -0
  89. package/dist/review/assets/railroad-ebnf-EBAXGLYW-yQjh1dCt.js +1 -0
  90. package/dist/review/assets/railroad-peg-LSFZ7HO6-B9LBaRcJ.js +1 -0
  91. package/dist/review/assets/railroadDiagram-RFXS5EU6-DYI7CPMt.js +1 -0
  92. package/dist/review/assets/requirementDiagram-TGXJPOKE-BMW46SXM.js +84 -0
  93. package/dist/review/assets/rough.esm-CSKSodPl.js +1 -0
  94. package/dist/review/assets/sankeyDiagram-HTMAVEWB-wTvFx0iK.js +40 -0
  95. package/dist/review/assets/sequenceDiagram-DBY2YBRQ-DVtyVuxr.js +162 -0
  96. package/dist/review/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +1 -0
  97. package/dist/review/assets/src-BMa7vLb8.js +1 -0
  98. package/dist/review/assets/stateDiagram-2N3HPSRC-BM1s-zUo.js +1 -0
  99. package/dist/review/assets/stateDiagram-v2-6OUMAXLB-BEfolAkc.js +1 -0
  100. package/dist/review/assets/swimlanes-5IMT3BWC-Bnu9mzxz.js +2 -0
  101. package/dist/review/assets/swimlanesDiagram-G3AALYLV-DlNNBK53.js +8 -0
  102. package/dist/review/assets/timeline-definition-FHXFAJF6-CwlO71Lp.js +120 -0
  103. package/dist/review/assets/treeView-QDETBFTQ-e6oHg1mF.js +1 -0
  104. package/dist/review/assets/treemap-6X3UGDF4-HYeYMCQq.js +1 -0
  105. package/dist/review/assets/vennDiagram-L72KCM5P-DZxbcc_O.js +34 -0
  106. package/dist/review/assets/wardley-OPB4EBWU-BCMNVDbK.js +1 -0
  107. package/dist/review/assets/wardleyDiagram-EHGQE667-DGQto3hn.js +78 -0
  108. package/dist/review/assets/xychartDiagram-FW5EYKEG-BfD1lSXX.js +7 -0
  109. package/dist/review/index.html +32 -0
  110. package/package.json +64 -0
@@ -0,0 +1,48 @@
1
+ {
2
+ "schema": "urn:graphrefly-stack:fixture-repository-template:v1",
3
+ "scenario": "refresh-token-rotation-v1",
4
+ "stages": {
5
+ "B0": {
6
+ ".gitignore": ".graphrefly-stack-fixture\n.graphrefly-stack/\n",
7
+ "package.json": "{\"name\":\"graphrefly-refresh-session-fixture\",\"private\":true,\"type\":\"module\",\"dependencies\":{\"@graphrefly/ts\":\"0.1.1\"}}\n",
8
+ "fixture-check.mjs": "import assert from 'node:assert/strict';\nimport { readFileSync } from 'node:fs';\nconst checkId = process.argv[2];\nconst read = (path) => readFileSync(new URL(path, import.meta.url), 'utf8');\nif (checkId === 'contracts') {\n assert.match(read('./src/session/contracts.ts'), /RefreshResult/);\n} else if (checkId === 'refresh-runtime') {\n const source = read('./src/session/flows/refresh-flow.ts');\n assert.match(source, /replay/);\n assert.match(source, /-rotated/);\n assert.match(source, /family-1/);\n} else if (checkId === 'refresh-api') {\n const source = read('./src/http/refresh-route.ts');\n assert.match(source, /status: 200/);\n assert.match(source, /body: refresh/);\n} else {\n throw new Error('unknown fixture check: ' + checkId);\n}\nprocess.stdout.write('ok ' + checkId + '\\n');\n",
9
+ "graphrefly-fixture.mjs": "import { createHash } from 'node:crypto';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { addPasswordResetGraph } from './src/session/flows/password-reset-flow.ts';\nimport { addRefreshGraph } from './src/session/flows/refresh-flow.ts';\nfor (const name of ['GRAPHREFLY_GRAPH_MODULE_URL', 'GRAPHREFLY_OPERATORS_MODULE_URL', 'GRAPHREFLY_RENDER_MODULE_URL']) {\n if (!process.env[name]) throw new Error('missing GraphReFly runtime module: ' + name);\n}\nconst graphApi = await import(process.env.GRAPHREFLY_GRAPH_MODULE_URL);\nconst operatorApi = await import(process.env.GRAPHREFLY_OPERATORS_MODULE_URL);\nconst renderApi = await import(process.env.GRAPHREFLY_RENDER_MODULE_URL);\nconst policy = JSON.parse(readFileSync(new URL('./src/session/policy.json', import.meta.url), 'utf8'));\nconst runtimeGraph = graphApi.graph({ name: 'session' });\naddPasswordResetGraph(runtimeGraph, operatorApi);\naddRefreshGraph(runtimeGraph, operatorApi);\nif (existsSync(new URL('./src/telemetry/session.ts', import.meta.url))) {\n const telemetry = await import('./src/telemetry/session.ts');\n telemetry.addTelemetryGraph(runtimeGraph);\n}\nconst blueprint = await graphApi.withBlueprintHash(\n runtimeGraph.blueprint({ diagnostics: true, provenance: { source: '@graphrefly/ts', api: 'graph.blueprint()', revision: process.env.GRAPHREFLY_STACK_REVISION, isolation: process.env.GRAPHREFLY_STACK_ISOLATION, entrypoint: 'graphrefly-fixture.mjs' } }),\n { algorithm: 'sha256', hash: (bytes) => createHash('sha256').update(bytes).digest('hex') },\n);\nconst diagram = renderApi.describeToMermaid(runtimeGraph.describe(), { direction: 'LR' });\nprocess.stdout.write(JSON.stringify({\n policyRevision: policy.revision,\n blueprint,\n diagram: { format: 'mermaid', source: diagram, renderer: '@graphrefly/ts/render.describeToMermaid' },\n}));\n",
10
+ "src/session/flows/refresh-flow.ts": "export function addRefreshGraph() {}\nexport function refresh(token: string) { return { token, familyId: 'family-1' }; }\n",
11
+ "src/http/refresh-route.ts": "import { refresh } from '../session/flows/refresh-flow.js';\nexport const postRefresh = refresh;\n",
12
+ "src/session/flows/password-reset-flow.ts": "export function addPasswordResetGraph(graph) {\n const intent = graph.state(null, { name: 'password-reset.intent' });\n graph.effect([intent], () => undefined, { name: 'session.persist.password-reset', meta: { capability: 'session-mutation', mode: 'online' } });\n}\nexport const resetPassword = () => 'persist-direct';\n",
13
+ "src/session/policy.json": "{\"revision\":\"session-writes.v1\",\"brokerRequired\":false}\n",
14
+ "tests/session/password-reset-flow.test.ts": "// baseline password-reset behavior\n"
15
+ },
16
+ "U1": {
17
+ "src/session/contracts.ts": "export interface RefreshResult { token: string; familyId: string }\n",
18
+ "tests/session/contracts.test.ts": "// token-family and replay-rejection contract\n"
19
+ },
20
+ "U2": {
21
+ "src/session/flows/refresh-flow.ts": "const used = new Set<string>();\nexport function addRefreshGraph(graph) {\n const request = graph.state(null, { name: 'refresh.request' });\n const validate = graph.derived([request], (token) => token, { name: 'refresh.validate' });\n const rotate = graph.derived([validate], (token) => token, { name: 'refresh.rotate' });\n graph.effect([rotate], () => undefined, { name: 'session.persist.refresh', meta: { capability: 'session-mutation', mode: 'online' } });\n}\nexport function refresh(token: string) {\n if (used.has(token)) throw new Error('replay');\n used.add(token);\n return { token: token + '-rotated', familyId: 'family-1' };\n}\n",
22
+ "tests/session/refresh-flow.test.ts": "// replacement token, stable family, and replay rejection\n"
23
+ },
24
+ "U3": {
25
+ "src/http/refresh-route.ts": "import { refresh } from '../session/flows/refresh-flow.js';\nexport function postRefresh(token: string) { return { status: 200, body: refresh(token) }; }\n",
26
+ "tests/http/refresh-route.test.ts": "// HTTP adapter returns replacement token\n"
27
+ },
28
+ "A1": {
29
+ "src/session/flows/password-reset-flow.ts": "export function addPasswordResetGraph(graph, operators) {\n const intent = graph.state(null, { name: 'password-reset.intent' });\n const broker = graph.initNode({ ...operators.map((value) => value), factory: 'sessionMutationBroker' }, [intent], { name: 'session.mutation-broker.password-reset', meta: { capability: 'session-mutation-broker' } });\n graph.effect([broker], () => undefined, { name: 'session.persist.password-reset', meta: { capability: 'session-mutation', mode: 'online' } });\n}\nexport const resetPassword = () => 'persist-via-session-mutation-broker';\n",
30
+ "src/session/policy.json": "{\"revision\":\"session-writes.v2\",\"brokerRequired\":true}\n",
31
+ "tests/session/password-reset-flow.test.ts": "// online session writes require the broker\n"
32
+ },
33
+ "U2_PRIME": {
34
+ "src/session/flows/refresh-flow.ts": "const used = new Set<string>();\nconst persistViaBroker = (token: string) => token;\nexport function addRefreshGraph(graph, operators) {\n const request = graph.state(null, { name: 'refresh.request' });\n const validate = graph.derived([request], (token) => token, { name: 'refresh.validate' });\n const rotate = graph.derived([validate], (token) => token, { name: 'refresh.rotate' });\n const broker = graph.initNode({ ...operators.map((value) => value), factory: 'sessionMutationBroker' }, [rotate], { name: 'session.mutation-broker.refresh', meta: { capability: 'session-mutation-broker' } });\n graph.effect([broker], () => undefined, { name: 'session.persist.refresh', meta: { capability: 'session-mutation', mode: 'online' } });\n}\nexport function refresh(token: string) {\n if (used.has(token)) throw new Error('replay');\n used.add(token);\n const replacement = token + '-rotated';\n persistViaBroker(replacement);\n return { token: replacement, familyId: 'family-1' };\n}\n",
35
+ "tests/session/refresh-flow.test.ts": "// replacement persists through session-mutation-broker\n"
36
+ },
37
+ "U3_PRIME": {
38
+ "src/http/refresh-route.ts": "import { refresh } from '../session/flows/refresh-flow.js';\n// rebound after the broker-aware runtime change\nexport function postRefresh(token: string) { return { status: 200, body: refresh(token) }; }\n",
39
+ "tests/http/refresh-route.test.ts": "// HTTP adapter rebound to accepted broker-aware runtime\n"
40
+ },
41
+ "TELEMETRY": {
42
+ "src/telemetry/session.ts": "export function addTelemetryGraph(graph) {\n graph.state(null, { name: 'telemetry.session' });\n}\nexport const recordSessionMetric = () => undefined;\n"
43
+ },
44
+ "WRONG_SCOPE": {
45
+ "docs/unauthorized-session-note.md": "This path is deliberately outside U2's allowed source scope.\n"
46
+ }
47
+ }
48
+ }