@zigrivers/scaffold 3.32.1 → 3.33.1

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 (130) hide show
  1. package/README.md +41 -18
  2. package/content/guides/knowledge-freshness/.diagrams/diagram-0.svg +1 -1
  3. package/content/guides/knowledge-freshness/.diagrams/manifest.json +1 -1
  4. package/content/guides/knowledge-freshness/index.html +9 -5
  5. package/content/guides/knowledge-freshness/index.md +5 -4
  6. package/content/guides/pipeline/index.html +2 -2
  7. package/content/guides/pipeline/index.md +2 -2
  8. package/content/knowledge/VERSION +1 -1
  9. package/content/knowledge/backend/backend-api-design.md +21 -3
  10. package/content/knowledge/backend/backend-architecture.md +21 -3
  11. package/content/knowledge/backend/backend-async-patterns.md +16 -2
  12. package/content/knowledge/backend/backend-auth-patterns.md +19 -2
  13. package/content/knowledge/backend/backend-conventions.md +15 -3
  14. package/content/knowledge/backend/backend-data-modeling.md +19 -3
  15. package/content/knowledge/backend/backend-deployment.md +21 -3
  16. package/content/knowledge/backend/backend-dev-environment.md +13 -3
  17. package/content/knowledge/backend/backend-fintech-broker-integration.md +14 -2
  18. package/content/knowledge/backend/backend-fintech-compliance.md +23 -4
  19. package/content/knowledge/mcp-server/mcp-authentication.md +100 -0
  20. package/content/knowledge/mcp-server/mcp-deployment-patterns.md +119 -0
  21. package/content/knowledge/mcp-server/mcp-error-handling.md +131 -0
  22. package/content/knowledge/mcp-server/mcp-observability.md +125 -0
  23. package/content/knowledge/mcp-server/mcp-prompt-primitives.md +119 -0
  24. package/content/knowledge/mcp-server/mcp-protocol-fundamentals.md +130 -0
  25. package/content/knowledge/mcp-server/mcp-resource-design.md +111 -0
  26. package/content/knowledge/mcp-server/mcp-sdk-selection.md +136 -0
  27. package/content/knowledge/mcp-server/mcp-testing-strategies.md +127 -0
  28. package/content/knowledge/mcp-server/mcp-tool-design.md +125 -0
  29. package/content/knowledge/mcp-server/mcp-transport-patterns.md +122 -0
  30. package/content/knowledge/mcp-server/mcp-versioning.md +115 -0
  31. package/content/methodology/custom-defaults.yml +2 -0
  32. package/content/methodology/deep.yml +2 -0
  33. package/content/methodology/mcp-server-overlay.yml +88 -0
  34. package/content/methodology/mvp.yml +2 -0
  35. package/content/pipeline/build/multi-agent-resume.md +107 -11
  36. package/content/pipeline/build/multi-agent-start.md +104 -11
  37. package/content/pipeline/build/single-agent-resume.md +74 -8
  38. package/content/pipeline/build/single-agent-start.md +69 -12
  39. package/content/pipeline/finalization/materialize-plan-to-beads.md +473 -0
  40. package/content/pipeline/foundation/beads.md +6 -0
  41. package/content/pipeline/planning/implementation-plan-review.md +25 -0
  42. package/content/pipeline/planning/implementation-plan.md +75 -1
  43. package/content/pipeline/specification/mcp-tool-resource-contract.md +77 -0
  44. package/dist/cli/commands/adopt.d.ts.map +1 -1
  45. package/dist/cli/commands/adopt.js +33 -1
  46. package/dist/cli/commands/adopt.js.map +1 -1
  47. package/dist/cli/commands/init.d.ts +6 -0
  48. package/dist/cli/commands/init.d.ts.map +1 -1
  49. package/dist/cli/commands/init.js +46 -3
  50. package/dist/cli/commands/init.js.map +1 -1
  51. package/dist/cli/init-flag-families.d.ts +6 -1
  52. package/dist/cli/init-flag-families.d.ts.map +1 -1
  53. package/dist/cli/init-flag-families.js +59 -2
  54. package/dist/cli/init-flag-families.js.map +1 -1
  55. package/dist/cli/init-flag-families.test.js +86 -1
  56. package/dist/cli/init-flag-families.test.js.map +1 -1
  57. package/dist/config/schema.d.ts +2310 -126
  58. package/dist/config/schema.d.ts.map +1 -1
  59. package/dist/config/schema.js +26 -1
  60. package/dist/config/schema.js.map +1 -1
  61. package/dist/config/schema.test.js +75 -2
  62. package/dist/config/schema.test.js.map +1 -1
  63. package/dist/config/validators/index.d.ts.map +1 -1
  64. package/dist/config/validators/index.js +2 -0
  65. package/dist/config/validators/index.js.map +1 -1
  66. package/dist/config/validators/mcp-server.d.ts +4 -0
  67. package/dist/config/validators/mcp-server.d.ts.map +1 -0
  68. package/dist/config/validators/mcp-server.js +37 -0
  69. package/dist/config/validators/mcp-server.js.map +1 -0
  70. package/dist/config/validators/mcp-server.test.d.ts +2 -0
  71. package/dist/config/validators/mcp-server.test.d.ts.map +1 -0
  72. package/dist/config/validators/mcp-server.test.js +47 -0
  73. package/dist/config/validators/mcp-server.test.js.map +1 -0
  74. package/dist/core/assembly/materialize-plan-to-beads-assembly.test.d.ts +2 -0
  75. package/dist/core/assembly/materialize-plan-to-beads-assembly.test.d.ts.map +1 -0
  76. package/dist/core/assembly/materialize-plan-to-beads-assembly.test.js +75 -0
  77. package/dist/core/assembly/materialize-plan-to-beads-assembly.test.js.map +1 -0
  78. package/dist/e2e/project-type-overlays.test.js +83 -0
  79. package/dist/e2e/project-type-overlays.test.js.map +1 -1
  80. package/dist/project/adopt.d.ts.map +1 -1
  81. package/dist/project/adopt.js +3 -1
  82. package/dist/project/adopt.js.map +1 -1
  83. package/dist/project/detectors/coverage.test.js +1 -0
  84. package/dist/project/detectors/coverage.test.js.map +1 -1
  85. package/dist/project/detectors/disambiguate.d.ts.map +1 -1
  86. package/dist/project/detectors/disambiguate.js +6 -1
  87. package/dist/project/detectors/disambiguate.js.map +1 -1
  88. package/dist/project/detectors/disambiguate.test.js +18 -0
  89. package/dist/project/detectors/disambiguate.test.js.map +1 -1
  90. package/dist/project/detectors/index.d.ts.map +1 -1
  91. package/dist/project/detectors/index.js +2 -1
  92. package/dist/project/detectors/index.js.map +1 -1
  93. package/dist/project/detectors/mcp-server.d.ts +4 -0
  94. package/dist/project/detectors/mcp-server.d.ts.map +1 -0
  95. package/dist/project/detectors/mcp-server.js +91 -0
  96. package/dist/project/detectors/mcp-server.js.map +1 -0
  97. package/dist/project/detectors/mcp-server.test.d.ts +2 -0
  98. package/dist/project/detectors/mcp-server.test.d.ts.map +1 -0
  99. package/dist/project/detectors/mcp-server.test.js +115 -0
  100. package/dist/project/detectors/mcp-server.test.js.map +1 -0
  101. package/dist/project/detectors/types.d.ts +6 -2
  102. package/dist/project/detectors/types.d.ts.map +1 -1
  103. package/dist/project/detectors/types.js.map +1 -1
  104. package/dist/types/config.d.ts +8 -1
  105. package/dist/types/config.d.ts.map +1 -1
  106. package/dist/wizard/copy/core.d.ts.map +1 -1
  107. package/dist/wizard/copy/core.js +4 -0
  108. package/dist/wizard/copy/core.js.map +1 -1
  109. package/dist/wizard/copy/index.d.ts.map +1 -1
  110. package/dist/wizard/copy/index.js +2 -0
  111. package/dist/wizard/copy/index.js.map +1 -1
  112. package/dist/wizard/copy/mcp-server.d.ts +3 -0
  113. package/dist/wizard/copy/mcp-server.d.ts.map +1 -0
  114. package/dist/wizard/copy/mcp-server.js +40 -0
  115. package/dist/wizard/copy/mcp-server.js.map +1 -0
  116. package/dist/wizard/copy/types.d.ts +5 -1
  117. package/dist/wizard/copy/types.d.ts.map +1 -1
  118. package/dist/wizard/flags.d.ts +9 -1
  119. package/dist/wizard/flags.d.ts.map +1 -1
  120. package/dist/wizard/questions.d.ts +4 -2
  121. package/dist/wizard/questions.d.ts.map +1 -1
  122. package/dist/wizard/questions.js +37 -0
  123. package/dist/wizard/questions.js.map +1 -1
  124. package/dist/wizard/questions.test.js +107 -0
  125. package/dist/wizard/questions.test.js.map +1 -1
  126. package/dist/wizard/wizard.d.ts +3 -2
  127. package/dist/wizard/wizard.d.ts.map +1 -1
  128. package/dist/wizard/wizard.js +3 -1
  129. package/dist/wizard/wizard.js.map +1 -1
  130. package/package.json +1 -1
package/README.md CHANGED
@@ -29,7 +29,7 @@ Either way, Scaffold constructs the prompt and the target AI tool does the work.
29
29
 
30
30
  **Assembly engine** — At execution time, Scaffold builds a 7-section prompt from: system metadata, the meta-prompt, knowledge base entries, project context (artifacts from prior steps), methodology settings, layered instructions, and depth-specific execution guidance.
31
31
 
32
- **Knowledge base** — 267 domain expertise entries in `content/knowledge/` organized in nineteen categories (core, product, review, validation, finalization, execution, tools, game, web-app, backend, cli, library, mobile-app, data-pipeline, ml, browser-extension, research, data-science, web3) covering testing strategy, domain modeling, API design, security best practices, eval craft, TDD execution, task claiming, worktree management, release management, rendering strategies, data stores, CLI patterns, game engines, library bundling, mobile deployment, batch and streaming pipelines, model training and serving, browser extension manifests and service workers, data-science reproducibility and notebook discipline, smart-contract security and audit workflow, and more. These get injected into prompts based on each step's `knowledge-base` frontmatter field. Knowledge files with a `## Deep Guidance` section are optimized for CLI assembly — only the deep guidance content is loaded, avoiding redundancy with the prompt text. Teams can add project-local overrides in `.scaffold/knowledge/` that layer on top of the global entries.
32
+ **Knowledge base** — 278 domain expertise entries in `content/knowledge/` organized in twenty categories (core, product, review, validation, finalization, execution, tools, game, web-app, backend, cli, library, mobile-app, data-pipeline, ml, browser-extension, research, data-science, web3, mcp-server) covering testing strategy, domain modeling, API design, security best practices, eval craft, TDD execution, task claiming, worktree management, release management, rendering strategies, data stores, CLI patterns, game engines, library bundling, mobile deployment, batch and streaming pipelines, model training and serving, browser extension manifests and service workers, data-science reproducibility and notebook discipline, smart-contract security and audit workflow, MCP protocol fundamentals, tool and resource design, transport patterns, and more. These get injected into prompts based on each step's `knowledge-base` frontmatter field. Knowledge files with a `## Deep Guidance` section are optimized for CLI assembly — only the deep guidance content is loaded, avoiding redundancy with the prompt text. Teams can add project-local overrides in `.scaffold/knowledge/` that layer on top of the global entries.
33
33
 
34
34
  A daily cron audits entries against their declared authoritative sources and opens refresh PRs when they drift — see `docs/knowledge-freshness/operations.md` for the operator guide (provider selection between Anthropic and DeepSeek, secret setup, manual overrides).
35
35
 
@@ -372,7 +372,7 @@ Every `scaffold init` wizard question can be answered via CLI flags, making scaf
372
372
  | `--depth` | 1-5 | Custom methodology depth (requires `--methodology custom`) |
373
373
  | `--adapters` | comma-sep | AI adapters: claude-code, codex, gemini |
374
374
  | `--traits` | comma-sep | Project traits: web, mobile |
375
- | `--project-type` | string | web-app, mobile-app, backend, cli, library, game, data-pipeline, ml, browser-extension, research, data-science, web3 |
375
+ | `--project-type` | string | web-app, mobile-app, backend, cli, library, game, data-pipeline, ml, browser-extension, research, data-science, web3, mcp-server |
376
376
  | `--auto` | boolean | Non-interactive mode (uses Zod defaults for unset flags) |
377
377
 
378
378
  #### Web-App Config Flags (require `--project-type web-app` or auto-set it)
@@ -461,6 +461,17 @@ Every `scaffold init` wizard question can be answered via CLI flags, making scaf
461
461
  | `--research-domain` | string | none, quant-finance, ml-research, simulation |
462
462
  | `--research-tracking` | boolean | `--research-tracking` / `--no-research-tracking` |
463
463
 
464
+ #### MCP Server Config Flags (require `--project-type mcp-server` or auto-set it)
465
+
466
+ | Flag | Type | Values |
467
+ |------|------|--------|
468
+ | `--mcp-language` | string | typescript, python |
469
+ | `--mcp-transport` | string | stdio, streamable-http, sse |
470
+ | `--mcp-primitives` | comma-sep | tools, resources, prompts |
471
+ | `--mcp-auth` | string | none, oauth, apikey |
472
+ | `--mcp-deployment` | string | local, hosted |
473
+ | `--mcp-stateful` | boolean | `--mcp-stateful` / `--no-mcp-stateful` |
474
+
464
475
  #### Data Science Config (`--project-type data-science`)
465
476
 
466
477
  Data science has one forward-compatible config field in the schema, defaulted automatically — no CLI flags are needed in v1:
@@ -526,9 +537,9 @@ during assembly.
526
537
 
527
538
  - **Flag > auto > interactive**: Flags always take highest precedence. `--auto --engine unreal` uses defaults for everything except engine.
528
539
  - **Partial flags + interactive**: Provide some flags and the wizard asks only the remaining questions. `scaffold init --project-type game --engine unreal` prompts interactively for multiplayer, platforms, etc.
529
- - **Type-specific flags auto-set project type**: `--engine unity` automatically sets `--project-type game`, `--web-rendering ssr` sets `--project-type web-app`, `--backend-api-style rest` sets `--project-type backend`, `--cli-interactivity hybrid` sets `--project-type cli`, `--lib-visibility public` sets `--project-type library`, `--mobile-platform ios` sets `--project-type mobile-app`, `--pipeline-processing batch` sets `--project-type data-pipeline`, `--ml-phase training` sets `--project-type ml`, `--ext-manifest 3` sets `--project-type browser-extension`, `--research-driver code-driven` sets `--project-type research`. Error if conflicting type. (Data science and web3 currently have no dedicated CLI flags — pass `--project-type data-science` or `--project-type web3` directly.)
530
- - **Cannot mix flag families**: `--web-rendering ssr --backend-api-style rest` is an error. Each flag family (`--web-*`, `--backend-*`, `--cli-*`, `--lib-*`, `--mobile-*`, `--pipeline-*`, `--ml-*`, `--research-*`, `--ext-*`, game) is exclusive.
531
- - **Validation**: `--depth` requires `--methodology custom`. `--online-services` requires `--multiplayer online` or `hybrid`. SSR/hybrid rendering is incompatible with static deploy target. Session auth requires server state (not static). ML inference projects must specify a serving pattern. Browser extensions must declare at least one capability (UI surface, content script, or background worker). Notebook-driven research cannot be fully autonomous.
540
+ - **Type-specific flags auto-set project type**: `--engine unity` automatically sets `--project-type game`, `--web-rendering ssr` sets `--project-type web-app`, `--backend-api-style rest` sets `--project-type backend`, `--cli-interactivity hybrid` sets `--project-type cli`, `--lib-visibility public` sets `--project-type library`, `--mobile-platform ios` sets `--project-type mobile-app`, `--pipeline-processing batch` sets `--project-type data-pipeline`, `--ml-phase training` sets `--project-type ml`, `--ext-manifest 3` sets `--project-type browser-extension`, `--research-driver code-driven` sets `--project-type research`, `--mcp-language typescript` sets `--project-type mcp-server`. Error if conflicting type. (Data science and web3 currently have no dedicated CLI flags — pass `--project-type data-science` or `--project-type web3` directly.)
541
+ - **Cannot mix flag families**: `--web-rendering ssr --backend-api-style rest` is an error. Each flag family (`--web-*`, `--backend-*`, `--cli-*`, `--lib-*`, `--mobile-*`, `--pipeline-*`, `--ml-*`, `--research-*`, `--ext-*`, `--mcp-*`, game) is exclusive.
542
+ - **Validation**: `--depth` requires `--methodology custom`. `--online-services` requires `--multiplayer online` or `hybrid`. SSR/hybrid rendering is incompatible with static deploy target. Session auth requires server state (not static). ML inference projects must specify a serving pattern. Browser extensions must declare at least one capability (UI surface, content script, or background worker). Notebook-driven research cannot be fully autonomous. `stdio` transport cannot use network auth (`--mcp-auth` must be `none` with `--mcp-transport stdio`). `stdio` transport runs locally and cannot use hosted deployment (`--mcp-deployment` must be `local` with `--mcp-transport stdio`).
532
543
 
533
544
  #### CI Examples
534
545
 
@@ -625,6 +636,15 @@ scaffold init --auto --methodology deep --project-type data-science
625
636
  # Web3 smart-contract / protocol project (Foundry / Hardhat on EVM)
626
637
  scaffold init --auto --methodology deep --project-type web3
627
638
 
639
+ # MCP server — TypeScript, streamable-http transport, tools + resources
640
+ scaffold init --auto --methodology deep --project-type mcp-server \
641
+ --mcp-language typescript --mcp-transport streamable-http \
642
+ --mcp-primitives tools,resources --mcp-auth oauth --mcp-deployment hosted
643
+
644
+ # MCP server — Python, stdio transport (local tooling, no auth)
645
+ scaffold init --auto --methodology mvp --project-type mcp-server \
646
+ --mcp-language python --mcp-transport stdio --mcp-auth none
647
+
628
648
  # Multiplayer mobile game with Unity
629
649
  scaffold init --project-type game --methodology deep --auto \
630
650
  --engine unity --multiplayer online --target-platforms ios,android \
@@ -651,14 +671,14 @@ Scaffold supports **project-type overlays** — domain-specific knowledge and pi
651
671
 
652
672
  - **Injects domain knowledge** into existing pipeline steps (e.g., SSR caching strategies into `tech-stack`, API pagination patterns into `coding-standards`)
653
673
 
654
- The game overlay additionally adjusts step enablement, remaps artifact references, and adds dependency overrides (because game development has fundamentally different artifacts). The web-app, backend, CLI, library, mobile-app, data-pipeline, ML, browser-extension, research, data-science, and web3 overlays are **knowledge-only** — they inject domain expertise into existing steps without changing which steps run or how they depend on each other. The research type additionally supports **domain sub-overlays** (quant-finance, ml-research, simulation) that layer domain-specific knowledge on top of the core research overlay, and the backend type supports a `fintech` sub-overlay. Both research and backend accept `domain` as either a single string or an array (e.g. `domain: ['quant-finance', 'simulation']`) for stacking multiple sub-overlays; the wizard and CLI flags remain single-select in v1, so multi-domain stacking requires hand-editing `.scaffold/config.yml`.
674
+ The game overlay additionally adjusts step enablement, remaps artifact references, and adds dependency overrides (because game development has fundamentally different artifacts). Like the game overlay, the **mcp-server overlay** also adjusts step enablement — it disables the UI-focused steps (design-system, ux-spec, review-ux) since an MCP server has no UI, and marks database-schema/review-database as if-needed. The web-app, backend, CLI, library, mobile-app, data-pipeline, ML, browser-extension, research, data-science, and web3 overlays are **knowledge-only** — they inject domain expertise into existing steps without changing which steps run or how they depend on each other. The research type additionally supports **domain sub-overlays** (quant-finance, ml-research, simulation) that layer domain-specific knowledge on top of the core research overlay, and the backend type supports a `fintech` sub-overlay. Both research and backend accept `domain` as either a single string or an array (e.g. `domain: ['quant-finance', 'simulation']`) for stacking multiple sub-overlays; the wizard and CLI flags remain single-select in v1, so multi-domain stacking requires hand-editing `.scaffold/config.yml`.
655
675
 
656
676
  Overlays are composable with methodology presets. An MVP web-app gets fewer steps at lower depth; a deep backend project gets exhaustive analysis of every architectural decision.
657
677
 
658
678
  | Project Type | Overlay | Knowledge Entries | Config Options |
659
679
  |-------------|---------|-------------------|----------------|
660
680
  | `web-app` | `web-app-overlay.yml` | 17 entries (rendering, state management, auth, SSR, deploy targets, real-time, PWA, testing) | Rendering strategy, deploy target, real-time, auth flow |
661
- | `backend` | `backend-overlay.yml` | 14 entries (API design, data stores, auth, messaging, observability, deploy, caching, rate limiting) | API style, data store(s), auth, messaging, deploy target |
681
+ | `backend` | `backend-overlay.yml` | 22 entries (API design, data stores, auth, messaging, observability, deploy, caching, rate limiting) | API style, data store(s), auth, messaging, deploy target |
662
682
  | `cli` | `cli-overlay.yml` | 10 entries (argument parsing, config management, output formatting, distribution, testing, error handling) | Interactivity model, distribution channels, structured output |
663
683
  | `library` | `library-overlay.yml` | 12 entries (API design, bundling, type definitions, versioning, documentation, testing, security) | Visibility, runtime target, bundle format, type definitions, documentation level |
664
684
  | `mobile-app` | `mobile-app-overlay.yml` | 12 entries (architecture, offline patterns, push notifications, deployment, distribution, testing, security) | Platform, distribution model, offline support, push notifications |
@@ -668,7 +688,8 @@ Overlays are composable with methodology presets. An MVP web-app gets fewer step
668
688
  | `research` | `research-overlay.yml` + domain sub-overlays | 25 entries (experiment loop, tracking, overfitting prevention, backtesting, risk metrics, architecture search, simulation) | Experiment driver, interaction mode, domain, experiment tracking |
669
689
  | `data-science` | `data-science-overlay.yml` | 13 entries (reproducibility, experiment tracking, notebook discipline, model evaluation, data versioning, dev environment, observability, project structure, conventions, requirements, security, testing, architecture) | Audience (`solo` default; `platform` reserved for DS-2) |
670
690
  | `web3` | `web3-overlay.yml` | 14 entries (Foundry tooling, smart-contract security, upgradeability, gas optimization, oracles, audit workflow, deployment, testing patterns, EVM fundamentals, ABI/interface design, event/log indexing, supply-chain) | Scope (`contracts` default; `dapp` reserved for W3-2) |
671
- | `game` | `game-overlay.yml` | 24 entries (engines, networking, audio, VR/AR, economy, save systems, certification) | Engine, multiplayer, platforms, economy, narrative, and 6 more |
691
+ | `game` | `game-overlay.yml` | 25 entries (engines, networking, audio, VR/AR, economy, save systems, certification) | Engine, multiplayer, platforms, economy, narrative, and 6 more |
692
+ | `mcp-server` | `mcp-server-overlay.yml` | 12 entries (protocol fundamentals, tool design, resource design, transport patterns, SDK selection, auth, error handling, testing, observability, deployment, versioning, prompt primitives) | Language, transport, primitives, auth, deployment, stateful |
672
693
 
673
694
  ### Game Development
674
695
 
@@ -753,7 +774,7 @@ These answers control which conditional steps activate. A single-player puzzle g
753
774
 
754
775
  #### Multi-type Detection
755
776
 
756
- `scaffold adopt` detects 12 project types from manifest files and directory layouts:
777
+ `scaffold adopt` detects 13 project types from manifest files and directory layouts:
757
778
 
758
779
  | Type | Key Signals |
759
780
  |------|-------------|
@@ -769,6 +790,7 @@ These answers control which conditional steps activate. A single-player puzzle g
769
790
  | `research` | `program.md` + `results.tsv`, backtest/strategy files with trading deps, optimization deps + experiment dirs, simulation framework deps |
770
791
  | `data-science` | Marimo signals required (`marimo` dep or `.marimo.toml`); DVC (`dvc.yaml`, `.dvc/config`, `dvc` py dep) is supplementary evidence only. Low-tier; defers to `ml` / `research` / `data-pipeline` when those match at medium/high tier |
771
792
  | `web3` | `foundry.toml` or `hardhat.config.{ts,js,cjs,mjs}` (medium-tier); `remappings.txt`, `lib/forge-std` are supplementary low-tier signals. EVM-only scope. Library-collision boundary pinned by tiebreak (high-tier `library` wins over medium-tier `web3` for published-library Hardhat projects) |
793
+ | `mcp-server` | `@modelcontextprotocol/sdk` / `mcp` / `fastmcp` dep = low (MCP clients share these deps — avoids mis-adopting a client as a server); dep + entrypoint registering tools/resources = high |
772
794
 
773
795
  Each detector returns a confidence tier (high/medium/low) with evidence trails. Override detection with `--project-type <type>`.
774
796
 
@@ -1529,18 +1551,18 @@ scaffold dashboard
1529
1551
 
1530
1552
  ## Knowledge System
1531
1553
 
1532
- Scaffold ships with 267 domain expertise entries organized in nineteen categories:
1554
+ Scaffold ships with 278 domain expertise entries organized in twenty categories:
1533
1555
 
1534
- - **core/** (26 entries) — eval craft, testing strategy, domain modeling, API design, database design, system architecture, ADR craft, security best practices, operations, task decomposition, user stories, UX specification, design system tokens, user story innovation, AI memory management, coding conventions, tech stack selection, project structure patterns, task tracking, CLAUDE.md patterns, multi-model review dispatch, review step template, dev environment, git workflow patterns, automated review tooling, vision craft
1535
- - **product/** (5 entries) — PRD craft, PRD innovation, gap analysis, vision craft, vision innovation
1556
+ - **core/** (35 entries) — eval craft, testing strategy, domain modeling, API design, database design, system architecture, ADR craft, security best practices, operations, task decomposition, user stories, UX specification, design system tokens, user story innovation, AI memory management, coding conventions, tech stack selection, project structure patterns, task tracking, CLAUDE.md patterns, multi-model review dispatch, review step template, dev environment, git workflow patterns, automated review tooling, vision craft
1557
+ - **product/** (6 entries) — PRD craft, PRD innovation, gap analysis, vision craft, vision innovation
1536
1558
  - **review/** (20 entries) — review methodology (shared), plus domain-specific review passes for PRD, user stories, domain modeling, ADRs, architecture, API design, database design, UX specification, testing, security, operations, implementation tasks, game design, game economy, game UI, netcode, and more
1537
1559
  - **validation/** (7 entries) — critical path analysis, cross-phase consistency, scope management, traceability, implementability, decision completeness, dependency validation
1538
1560
  - **finalization/** (3 entries) — implementation playbook, developer onboarding, apply-fixes-and-freeze
1539
- - **execution/** (4 entries) — TDD execution loop, task claiming strategy, worktree management, enhancement workflow
1561
+ - **execution/** (5 entries) — TDD execution loop, task claiming strategy, worktree management, enhancement workflow
1540
1562
  - **tools/** (4 entries) — release management, version strategy, session analysis, and more
1541
- - **game/** (24 entries) — game engines, networking/netcode, audio middleware, save systems, input patterns, VR/AR, localization, modding/UGC, live operations, platform certification, economy design, AI/behavior, level design, performance, accessibility
1563
+ - **game/** (25 entries) — game engines, networking/netcode, audio middleware, save systems, input patterns, VR/AR, localization, modding/UGC, live operations, platform certification, economy design, AI/behavior, level design, performance, accessibility
1542
1564
  - **web-app/** (17 entries) — rendering strategies (SSR/SSG/SPA), state management, authentication, deploy targets, real-time patterns, PWA, performance, security, testing, session patterns, UX patterns, caching, API integration, accessibility
1543
- - **backend/** (14 entries) — API design patterns, data store selection, authentication mechanisms, messaging/event systems, observability, deploy strategies, caching, rate limiting, error handling, database migrations, testing, security
1565
+ - **backend/** (22 entries) — API design patterns, data store selection, authentication mechanisms, messaging/event systems, observability, deploy strategies, caching, rate limiting, error handling, database migrations, testing, security
1544
1566
  - **cli/** (10 entries) — argument parsing, config management, output formatting, distribution channels, testing patterns, error handling, plugin architecture, shell integration, structured output, interactive prompts
1545
1567
  - **library/** (12 entries) — visibility (public/internal), bundle formats (ESM/CJS/dual), type definitions, documentation levels, semver discipline, supply chain security, runtime targets
1546
1568
  - **mobile-app/** (12 entries) — platform-specific patterns (iOS/Android/cross-platform), distribution models (app store/enterprise), offline support, push notifications, mobile testing
@@ -1550,6 +1572,7 @@ Scaffold ships with 267 domain expertise entries organized in nineteen categorie
1550
1572
  - **research/** (25 entries) — experiment loop architecture, parameter optimization, overfitting prevention, experiment tracking, security/sandboxing; domain knowledge for quant-finance (backtesting, risk metrics, market data, strategy patterns), ML-research (architecture search, ablation studies, evaluation), and simulation (engine integration, parameter spaces, compute management)
1551
1573
  - **data-science/** (13 entries) — reproducibility, experiment tracking, notebook discipline, model evaluation, data versioning, dev environment (Marimo/Jupyter/Hex), observability, project structure, conventions, requirements, security, testing, architecture
1552
1574
  - **web3/** (14 entries) — Foundry tooling and dev environment, smart-contract security and common vulnerabilities, upgradeability patterns, gas optimization, oracles and external data, audit workflow, deployment and verification, testing patterns, access control, EVM/contract architecture, conventions, project structure, requirements
1575
+ - **mcp-server/** (12 entries) — MCP protocol fundamentals, tool design patterns, resource design, transport patterns (stdio/SSE/HTTP), SDK selection (TypeScript/Python/FastMCP), authentication (OAuth 2.1/API keys), error handling, testing strategies, observability, deployment patterns, versioning and compatibility, prompt primitives
1553
1576
 
1554
1577
  Each pipeline step declares which knowledge entries it needs in its frontmatter. The assembly engine injects them automatically. Knowledge files with a `## Deep Guidance` section are optimized for the CLI — only the deep guidance content is loaded into the assembled prompt, skipping the summary to avoid redundancy with the prompt text.
1555
1578
 
@@ -1756,9 +1779,9 @@ All build inputs live under `content/`:
1756
1779
 
1757
1780
  ```
1758
1781
  content/
1759
- ├── pipeline/ # 60 meta-prompts organized by 16 phases (phases 0-15, including build)
1760
- ├── tools/ # 10 tool meta-prompts (stateless, category: tool)
1761
- ├── knowledge/ # 267 domain expertise entries (core, product, review, validation, finalization, execution, tools, game, web-app, backend, cli, library, mobile-app, data-pipeline, ml, browser-extension, research, data-science, web3)
1782
+ ├── pipeline/ # 90 meta-prompts organized by 16 phases (phases 0-15, including build)
1783
+ ├── tools/ # 12 tool meta-prompts (stateless, category: tool)
1784
+ ├── knowledge/ # 278 domain expertise entries (core, product, review, validation, finalization, execution, tools, game, web-app, backend, cli, library, mobile-app, data-pipeline, ml, browser-extension, research, data-science, web3, mcp-server)
1762
1785
  ├── methodology/ # 3 YAML presets (deep, mvp, custom)
1763
1786
  └── skills/ # Skill templates with {{markers}} for multi-platform resolution (includes mmr)
1764
1787
  ```
@@ -1 +1 @@
1
- <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 951.219px; background-color: transparent;" viewBox="0 0 951.21875 940.3999633789062" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#my-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#552222;}#my-svg .error-text{fill:#552222;stroke:#552222;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#666;stroke:#666;}#my-svg .marker.cross{stroke:#666;}#my-svg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#000000;}#my-svg .cluster-label text{fill:#333;}#my-svg .cluster-label span{color:#333;}#my-svg .cluster-label span p{background-color:transparent;}#my-svg .label text,#my-svg span{fill:#000000;color:#000000;}#my-svg .node rect,#my-svg .node circle,#my-svg .node ellipse,#my-svg .node polygon,#my-svg .node path{fill:#eee;stroke:#999;stroke-width:1px;}#my-svg .rough-node .label text,#my-svg .node .label text,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-anchor:middle;}#my-svg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#my-svg .rough-node .label,#my-svg .node .label,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-align:center;}#my-svg .node.clickable{cursor:pointer;}#my-svg .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#my-svg .arrowheadPath{fill:#333333;}#my-svg .edgePath .path{stroke:#666;stroke-width:1px;}#my-svg .flowchart-link{stroke:#666;fill:none;}#my-svg .edgeLabel{background-color:white;text-align:center;}#my-svg .edgeLabel p{background-color:white;}#my-svg .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#my-svg .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#my-svg .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#my-svg .cluster text{fill:#333;}#my-svg .cluster span{color:#333;}#my-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#my-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#my-svg rect.text{fill:none;stroke-width:0;}#my-svg .icon-shape,#my-svg .image-shape{background-color:white;text-align:center;}#my-svg .icon-shape p,#my-svg .image-shape p{background-color:white;padding:2px;}#my-svg .icon-shape .label rect,#my-svg .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#my-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#my-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#my-svg .node .neo-node{stroke:#999;}#my-svg [data-look="neo"].node rect,#my-svg [data-look="neo"].cluster rect,#my-svg [data-look="neo"].node polygon{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].node path{stroke:url(#my-svg-gradient);stroke-width:1px;}#my-svg [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#my-svg [data-look="neo"].node circle{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].node circle .state-start{fill:#000000;}#my-svg [data-look="neo"].icon-shape .icon{fill:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].icon-shape .icon-neo path{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker id="my-svg_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"/></marker><marker id="my-svg_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"><g class="cluster" id="my-svg-gap" data-look="classic"><rect style="" x="390.40625" y="8" width="552.8125" height="625.5999908447266"/><g class="cluster-label" transform="translate(636.375, 8)"><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Gap</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> arm</tspan></tspan></text></g></g></g><g class="cluster" id="my-svg-refresh" data-look="classic"><rect style="" x="8" y="149.5999984741211" width="362.40625" height="782.7999877929688"/><g class="cluster-label" transform="translate(146.1015625, 149.5999984741211)"><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Refresh</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> arm</tspan></tspan></text></g></g></g></g><g class="edgePaths"><path d="M132.684,241.2L132.684,245.367C132.684,249.533,132.684,257.867,132.684,267C132.684,276.133,132.684,286.067,132.684,291.033L132.684,296" id="my-svg-L_CRON_PF_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_CRON_PF_0" data-points="W3sieCI6MTMyLjY4MzU5Mzc1LCJ5IjoyNDEuMTk5OTk2OTQ4MjQyMn0seyJ4IjoxMzIuNjgzNTkzNzUsInkiOjI2Ni4xOTk5OTY5NDgyNDIyfSx7IngiOjEzMi42ODM1OTM3NSwieSI6Mjk5Ljk5OTk5NjE4NTMwMjczfV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M132.684,366.6L132.684,372.233C132.684,377.867,132.684,389.133,132.684,398.267C132.684,407.4,132.684,414.4,132.684,417.9L132.684,421.4" id="my-svg-L_PF_RUN_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_PF_RUN_0" data-points="W3sieCI6MTMyLjY4MzU5Mzc1LCJ5IjozNjYuNTk5OTk0NjU5NDIzOH0seyJ4IjoxMzIuNjgzNTkzNzUsInkiOjQwMC4zOTk5OTM4OTY0ODQ0fSx7IngiOjEzMi42ODM1OTM3NSwieSI6NDI1LjM5OTk5Mzg5NjQ4NDR9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M132.684,492L132.684,496.167C132.684,500.333,132.684,508.667,132.684,516.333C132.684,524,132.684,531,132.684,534.5L132.684,538" id="my-svg-L_RUN_APPLY_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_RUN_APPLY_0" data-points="W3sieCI6MTMyLjY4MzU5Mzc1LCJ5Ijo0OTEuOTk5OTkyMzcwNjA1NDd9LHsieCI6MTMyLjY4MzU5Mzc1LCJ5Ijo1MTYuOTk5OTkyMzcwNjA1NX0seyJ4IjoxMzIuNjgzNTkzNzUsInkiOjU0MS45OTk5OTIzNzA2MDU1fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M132.684,608.6L132.684,612.767C132.684,616.933,132.684,625.267,132.684,638.45C132.684,651.633,132.684,669.667,138.932,687.163C145.18,704.66,157.676,721.62,163.925,730.1L170.173,738.58" id="my-svg-L_APPLY_GATES_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_APPLY_GATES_0" data-points="W3sieCI6MTMyLjY4MzU5Mzc1LCJ5Ijo2MDguNTk5OTkwODQ0NzI2Nn0seyJ4IjoxMzIuNjgzNTkzNzUsInkiOjYzMy41OTk5OTA4NDQ3MjY2fSx7IngiOjEzMi42ODM1OTM3NSwieSI6Njg3LjY5OTk4OTMxODg0Nzd9LHsieCI6MTcyLjU0NTU2MjYyNjY1MDAyLCJ5Ijo3NDEuNzk5OTg3NzkyOTY4OH1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M190.598,790.8L190.598,794.967C190.598,799.133,190.598,807.467,190.598,815.133C190.598,822.8,190.598,829.8,190.598,833.3L190.598,836.8" id="my-svg-L_GATES_MERGE_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_GATES_MERGE_0" data-points="W3sieCI6MTkwLjU5NzY1NjI1LCJ5Ijo3OTAuNzk5OTg3NzkyOTY4OH0seyJ4IjoxOTAuNTk3NjU2MjUsInkiOjgxNS43OTk5ODc3OTI5Njg4fSx7IngiOjE5MC41OTc2NTYyNSwieSI6ODQwLjc5OTk4Nzc5Mjk2ODh9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M536.594,99.6L536.594,103.767C536.594,107.933,536.594,116.267,536.594,124.6C536.594,132.933,536.594,141.267,536.594,148.933C536.594,156.6,536.594,163.6,536.594,167.1L536.594,170.6" id="my-svg-L_TAIL_EVENT_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_TAIL_EVENT_0" data-points="W3sieCI6NTM2LjU5Mzc1LCJ5Ijo5OS41OTk5OTg0NzQxMjExfSx7IngiOjUzNi41OTM3NSwieSI6MTI0LjU5OTk5ODQ3NDEyMTF9LHsieCI6NTM2LjU5Mzc1LCJ5IjoxNDkuNTk5OTk4NDc0MTIxMX0seyJ4Ijo1MzYuNTkzNzUsInkiOjE3NC41OTk5OTg0NzQxMjExfV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M536.594,241.2L536.594,245.367C536.594,249.533,536.594,257.867,536.594,267C536.594,276.133,536.594,286.067,536.594,291.033L536.594,296" id="my-svg-L_EVENT_LEDGER_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_EVENT_LEDGER_0" data-points="W3sieCI6NTM2LjU5Mzc1LCJ5IjoyNDEuMTk5OTk2OTQ4MjQyMn0seyJ4Ijo1MzYuNTkzNzUsInkiOjI2Ni4xOTk5OTY5NDgyNDIyfSx7IngiOjUzNi41OTM3NSwieSI6Mjk5Ljk5OTk5NjE4NTMwMjczfV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M536.594,366.6L536.594,372.233C536.594,377.867,536.594,389.133,544.883,398.65C553.172,408.168,569.751,415.935,578.04,419.819L586.329,423.703" id="my-svg-L_LEDGER_LENSI_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_LEDGER_LENSI_0" data-points="W3sieCI6NTM2LjU5Mzc1LCJ5IjozNjYuNTk5OTk0NjU5NDIzOH0seyJ4Ijo1MzYuNTkzNzUsInkiOjQwMC4zOTk5OTM4OTY0ODQ0fSx7IngiOjU4OS45NTEyNDk2MjYyMTg2LCJ5Ijo0MjUuMzk5OTkzODk2NDg0NH1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M661.023,492L661.023,496.167C661.023,500.333,661.023,508.667,661.023,516.333C661.023,524,661.023,531,661.023,534.5L661.023,538" id="my-svg-L_LENSI_FINDING_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_LENSI_FINDING_0" data-points="W3sieCI6NjYxLjAyMzQzNzUsInkiOjQ5MS45OTk5OTIzNzA2MDU0N30seyJ4Ijo2NjEuMDIzNDM3NSwieSI6NTE2Ljk5OTk5MjM3MDYwNTV9LHsieCI6NjYxLjAyMzQzNzUsInkiOjU0MS45OTk5OTIzNzA2MDU1fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M785.453,375.4L785.453,379.567C785.453,383.733,785.453,392.067,777.164,400.117C768.875,408.168,752.296,415.935,744.007,419.819L735.718,423.703" id="my-svg-L_RESOLVER_LENSI_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_RESOLVER_LENSI_0" data-points="W3sieCI6Nzg1LjQ1MzEyNSwieSI6Mzc1LjM5OTk5Mzg5NjQ4NDR9LHsieCI6Nzg1LjQ1MzEyNSwieSI6NDAwLjM5OTk5Mzg5NjQ4NDR9LHsieCI6NzMyLjA5NTYyNTM3Mzc4MTQsInkiOjQyNS4zOTk5OTM4OTY0ODQ0fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M661.023,608.6L661.023,612.767C661.023,616.933,661.023,625.267,592.271,638.45C523.52,651.633,386.016,669.667,311.015,687.163C236.015,704.66,223.519,721.62,217.271,730.1L211.023,738.58" id="my-svg-L_FINDING_GATES_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_FINDING_GATES_0" data-points="W3sieCI6NjYxLjAyMzQzNzUsInkiOjYwOC41OTk5OTA4NDQ3MjY2fSx7IngiOjY2MS4wMjM0Mzc1LCJ5Ijo2MzMuNTk5OTkwODQ0NzI2Nn0seyJ4IjoyNDguNTExNzE4NzUsInkiOjY4Ny42OTk5ODkzMTg4NDc3fSx7IngiOjIwOC42NDk3NDk4NzMzNDk5OCwieSI6NzQxLjc5OTk4Nzc5Mjk2ODh9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_CRON_PF_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_PF_RUN_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_RUN_APPLY_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_APPLY_GATES_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_GATES_MERGE_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_TAIL_EVENT_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_EVENT_LEDGER_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_LEDGER_LENSI_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_LENSI_FINDING_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_RESOLVER_LENSI_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel" transform="translate(433.84693, 663.39369)"><g class="label" data-id="L_FINDING_GATES_0" transform="translate(0, -28.099998474121094)"><g><rect class="background" style="" x="-95.828125" y="-1" width="191.65625" height="58.19999694824219"/><text y="-10.1" text-anchor="middle" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">operator</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> adds</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> an</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> entry</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">whose</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> name:</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> matches</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> the</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="2.1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">bucket</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> →</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> PR</tspan></tspan></text></g></g></g></g><g class="nodes"><g class="node default" id="my-svg-flowchart-CRON-0" data-look="classic" transform="translate(132.68359375, 207.89999771118164)"><rect class="basic label-container" style="" x="-86.40625" y="-33.29999923706055" width="172.8125" height="66.5999984741211"/><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">cron</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">09:00</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> UTC</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> daily</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-PF-1" data-look="classic" transform="translate(132.68359375, 333.2999954223633)"><rect class="basic label-container" style="" x="-81.59375" y="-33.29999923706055" width="163.1875" height="66.5999984741211"/><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">audit-prefilter</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">--max=10</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-RUN-3" data-look="classic" transform="translate(132.68359375, 458.6999931335449)"><rect class="basic label-container" style="" x="-85.171875" y="-33.29999923706055" width="170.34375" height="66.5999984741211"/><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">audit-run-entry</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">grounded</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> LLM</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-APPLY-5" data-look="classic" transform="translate(132.68359375, 575.299991607666)"><rect class="basic label-container" style="" x="-70.84375" y="-33.29999923706055" width="141.6875" height="66.5999984741211"/><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">audit-apply</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">--open-pr</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-GATES-7" data-look="classic" transform="translate(190.59765625, 766.2999877929688)"><rect class="basic label-container" style="" x="-67.1328125" y="-24.5" width="134.265625" height="49"/><g class="label" style="" transform="translate(0, -9.5)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">5</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> PR</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> gates</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-MERGE-9" data-look="classic" transform="translate(190.59765625, 874.0999870300293)"><rect class="basic label-container" style="" x="-92.9609375" y="-33.29999923706055" width="185.921875" height="66.5999984741211"/><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">human</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> merge</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">→</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> VERSION</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> bump</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-TAIL-10" data-look="classic" transform="translate(536.59375, 66.29999923706055)"><rect class="basic label-container" style="" x="-90.6171875" y="-33.29999923706055" width="181.234375" height="66.5999984741211"/><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">gap-signal-tail</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">89</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> pipeline</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> steps</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-EVENT-11" data-look="classic" transform="translate(536.59375, 207.89999771118164)"><rect class="basic label-container" style="" x="-111.1875" y="-33.29999923706055" width="222.375" height="66.5999984741211"/><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">scaffold</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> observe</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> event</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">knowledge_gap_signal</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-LEDGER-13" data-look="classic" transform="translate(536.59375, 333.2999954223633)"><rect class="basic label-container" style="" x="-76.09375" y="-33.29999923706055" width="152.1875" height="66.5999984741211"/><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">ledger</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">activity.jsonl</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-LENSI-15" data-look="classic" transform="translate(661.0234375, 458.6999931335449)"><rect class="basic label-container" style="" x="-83.65625" y="-33.29999923706055" width="167.3125" height="66.5999984741211"/><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Lens</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> I</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">90-day</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> window</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-FINDING-17" data-look="classic" transform="translate(661.0234375, 575.299991607666)"><rect class="basic label-container" style="" x="-56.3359375" y="-33.29999923706055" width="112.671875" height="66.5999984741211"/><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">finding</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">P1</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> /</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> P2</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-RESOLVER-18" data-look="classic" transform="translate(785.453125, 333.2999954223633)"><rect class="basic label-container" style="" x="-122.765625" y="-42.099998474121094" width="245.53125" height="84.19999694824219"/><g class="label" style="" transform="translate(0, -27.099998474121094)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">3-tier</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> --knowledge-root</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">resolver</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="2.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">suppresses</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> covered</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> topics</tspan></tspan></text></g></g></g></g></g></g><defs><filter id="my-svg-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><defs><filter id="my-svg-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><linearGradient id="my-svg-gradient" gradientUnits="objectBoundingBox" x1="0%" y1="0%" x2="100%" y2="0%"><stop offset="0%" stop-color="hsl(0, 0%, 83.3333333333%)" stop-opacity="1"/><stop offset="100%" stop-color="hsl(0, 0%, 88.9215686275%)" stop-opacity="1"/></linearGradient></svg>
1
+ <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 951.219px; background-color: transparent;" viewBox="0 0 951.21875 940.3999633789062" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#my-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#552222;}#my-svg .error-text{fill:#552222;stroke:#552222;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#666;stroke:#666;}#my-svg .marker.cross{stroke:#666;}#my-svg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#000000;}#my-svg .cluster-label text{fill:#333;}#my-svg .cluster-label span{color:#333;}#my-svg .cluster-label span p{background-color:transparent;}#my-svg .label text,#my-svg span{fill:#000000;color:#000000;}#my-svg .node rect,#my-svg .node circle,#my-svg .node ellipse,#my-svg .node polygon,#my-svg .node path{fill:#eee;stroke:#999;stroke-width:1px;}#my-svg .rough-node .label text,#my-svg .node .label text,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-anchor:middle;}#my-svg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#my-svg .rough-node .label,#my-svg .node .label,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-align:center;}#my-svg .node.clickable{cursor:pointer;}#my-svg .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#my-svg .arrowheadPath{fill:#333333;}#my-svg .edgePath .path{stroke:#666;stroke-width:1px;}#my-svg .flowchart-link{stroke:#666;fill:none;}#my-svg .edgeLabel{background-color:white;text-align:center;}#my-svg .edgeLabel p{background-color:white;}#my-svg .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#my-svg .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#my-svg .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#my-svg .cluster text{fill:#333;}#my-svg .cluster span{color:#333;}#my-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#my-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#my-svg rect.text{fill:none;stroke-width:0;}#my-svg .icon-shape,#my-svg .image-shape{background-color:white;text-align:center;}#my-svg .icon-shape p,#my-svg .image-shape p{background-color:white;padding:2px;}#my-svg .icon-shape .label rect,#my-svg .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#my-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#my-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#my-svg .node .neo-node{stroke:#999;}#my-svg [data-look="neo"].node rect,#my-svg [data-look="neo"].cluster rect,#my-svg [data-look="neo"].node polygon{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].node path{stroke:url(#my-svg-gradient);stroke-width:1px;}#my-svg [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#my-svg [data-look="neo"].node circle{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].node circle .state-start{fill:#000000;}#my-svg [data-look="neo"].icon-shape .icon{fill:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].icon-shape .icon-neo path{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker id="my-svg_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"/></marker><marker id="my-svg_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"><g class="cluster" id="my-svg-gap" data-look="classic"><rect style="" x="390.40625" y="8" width="552.8125" height="625.5999908447266"/><g class="cluster-label" transform="translate(636.375, 8)"><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Gap</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> arm</tspan></tspan></text></g></g></g><g class="cluster" id="my-svg-refresh" data-look="classic"><rect style="" x="8" y="149.5999984741211" width="362.40625" height="782.7999877929688"/><g class="cluster-label" transform="translate(146.1015625, 149.5999984741211)"><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Refresh</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> arm</tspan></tspan></text></g></g></g></g><g class="edgePaths"><path d="M132.684,241.2L132.684,245.367C132.684,249.533,132.684,257.867,132.684,267C132.684,276.133,132.684,286.067,132.684,291.033L132.684,296" id="my-svg-L_CRON_PF_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_CRON_PF_0" data-points="W3sieCI6MTMyLjY4MzU5Mzc1LCJ5IjoyNDEuMTk5OTk2OTQ4MjQyMn0seyJ4IjoxMzIuNjgzNTkzNzUsInkiOjI2Ni4xOTk5OTY5NDgyNDIyfSx7IngiOjEzMi42ODM1OTM3NSwieSI6Mjk5Ljk5OTk5NjE4NTMwMjczfV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M132.684,366.6L132.684,372.233C132.684,377.867,132.684,389.133,132.684,398.267C132.684,407.4,132.684,414.4,132.684,417.9L132.684,421.4" id="my-svg-L_PF_RUN_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_PF_RUN_0" data-points="W3sieCI6MTMyLjY4MzU5Mzc1LCJ5IjozNjYuNTk5OTk0NjU5NDIzOH0seyJ4IjoxMzIuNjgzNTkzNzUsInkiOjQwMC4zOTk5OTM4OTY0ODQ0fSx7IngiOjEzMi42ODM1OTM3NSwieSI6NDI1LjM5OTk5Mzg5NjQ4NDR9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M132.684,492L132.684,496.167C132.684,500.333,132.684,508.667,132.684,516.333C132.684,524,132.684,531,132.684,534.5L132.684,538" id="my-svg-L_RUN_APPLY_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_RUN_APPLY_0" data-points="W3sieCI6MTMyLjY4MzU5Mzc1LCJ5Ijo0OTEuOTk5OTkyMzcwNjA1NDd9LHsieCI6MTMyLjY4MzU5Mzc1LCJ5Ijo1MTYuOTk5OTkyMzcwNjA1NX0seyJ4IjoxMzIuNjgzNTkzNzUsInkiOjU0MS45OTk5OTIzNzA2MDU1fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M132.684,608.6L132.684,612.767C132.684,616.933,132.684,625.267,132.684,638.45C132.684,651.633,132.684,669.667,138.932,687.163C145.18,704.66,157.676,721.62,163.925,730.1L170.173,738.58" id="my-svg-L_APPLY_GATES_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_APPLY_GATES_0" data-points="W3sieCI6MTMyLjY4MzU5Mzc1LCJ5Ijo2MDguNTk5OTkwODQ0NzI2Nn0seyJ4IjoxMzIuNjgzNTkzNzUsInkiOjYzMy41OTk5OTA4NDQ3MjY2fSx7IngiOjEzMi42ODM1OTM3NSwieSI6Njg3LjY5OTk4OTMxODg0Nzd9LHsieCI6MTcyLjU0NTU2MjYyNjY1MDAyLCJ5Ijo3NDEuNzk5OTg3NzkyOTY4OH1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M190.598,790.8L190.598,794.967C190.598,799.133,190.598,807.467,190.598,815.133C190.598,822.8,190.598,829.8,190.598,833.3L190.598,836.8" id="my-svg-L_GATES_MERGE_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_GATES_MERGE_0" data-points="W3sieCI6MTkwLjU5NzY1NjI1LCJ5Ijo3OTAuNzk5OTg3NzkyOTY4OH0seyJ4IjoxOTAuNTk3NjU2MjUsInkiOjgxNS43OTk5ODc3OTI5Njg4fSx7IngiOjE5MC41OTc2NTYyNSwieSI6ODQwLjc5OTk4Nzc5Mjk2ODh9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M536.594,99.6L536.594,103.767C536.594,107.933,536.594,116.267,536.594,124.6C536.594,132.933,536.594,141.267,536.594,148.933C536.594,156.6,536.594,163.6,536.594,167.1L536.594,170.6" id="my-svg-L_TAIL_EVENT_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_TAIL_EVENT_0" data-points="W3sieCI6NTM2LjU5Mzc1LCJ5Ijo5OS41OTk5OTg0NzQxMjExfSx7IngiOjUzNi41OTM3NSwieSI6MTI0LjU5OTk5ODQ3NDEyMTF9LHsieCI6NTM2LjU5Mzc1LCJ5IjoxNDkuNTk5OTk4NDc0MTIxMX0seyJ4Ijo1MzYuNTkzNzUsInkiOjE3NC41OTk5OTg0NzQxMjExfV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M536.594,241.2L536.594,245.367C536.594,249.533,536.594,257.867,536.594,267C536.594,276.133,536.594,286.067,536.594,291.033L536.594,296" id="my-svg-L_EVENT_LEDGER_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_EVENT_LEDGER_0" data-points="W3sieCI6NTM2LjU5Mzc1LCJ5IjoyNDEuMTk5OTk2OTQ4MjQyMn0seyJ4Ijo1MzYuNTkzNzUsInkiOjI2Ni4xOTk5OTY5NDgyNDIyfSx7IngiOjUzNi41OTM3NSwieSI6Mjk5Ljk5OTk5NjE4NTMwMjczfV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M536.594,366.6L536.594,372.233C536.594,377.867,536.594,389.133,544.883,398.65C553.172,408.168,569.751,415.935,578.04,419.819L586.329,423.703" id="my-svg-L_LEDGER_LENSI_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_LEDGER_LENSI_0" data-points="W3sieCI6NTM2LjU5Mzc1LCJ5IjozNjYuNTk5OTk0NjU5NDIzOH0seyJ4Ijo1MzYuNTkzNzUsInkiOjQwMC4zOTk5OTM4OTY0ODQ0fSx7IngiOjU4OS45NTEyNDk2MjYyMTg2LCJ5Ijo0MjUuMzk5OTkzODk2NDg0NH1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M661.023,492L661.023,496.167C661.023,500.333,661.023,508.667,661.023,516.333C661.023,524,661.023,531,661.023,534.5L661.023,538" id="my-svg-L_LENSI_FINDING_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_LENSI_FINDING_0" data-points="W3sieCI6NjYxLjAyMzQzNzUsInkiOjQ5MS45OTk5OTIzNzA2MDU0N30seyJ4Ijo2NjEuMDIzNDM3NSwieSI6NTE2Ljk5OTk5MjM3MDYwNTV9LHsieCI6NjYxLjAyMzQzNzUsInkiOjU0MS45OTk5OTIzNzA2MDU1fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M785.453,375.4L785.453,379.567C785.453,383.733,785.453,392.067,777.164,400.117C768.875,408.168,752.296,415.935,744.007,419.819L735.718,423.703" id="my-svg-L_RESOLVER_LENSI_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_RESOLVER_LENSI_0" data-points="W3sieCI6Nzg1LjQ1MzEyNSwieSI6Mzc1LjM5OTk5Mzg5NjQ4NDR9LHsieCI6Nzg1LjQ1MzEyNSwieSI6NDAwLjM5OTk5Mzg5NjQ4NDR9LHsieCI6NzMyLjA5NTYyNTM3Mzc4MTQsInkiOjQyNS4zOTk5OTM4OTY0ODQ0fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M661.023,608.6L661.023,612.767C661.023,616.933,661.023,625.267,592.271,638.45C523.52,651.633,386.016,669.667,311.015,687.163C236.015,704.66,223.519,721.62,217.271,730.1L211.023,738.58" id="my-svg-L_FINDING_GATES_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_FINDING_GATES_0" data-points="W3sieCI6NjYxLjAyMzQzNzUsInkiOjYwOC41OTk5OTA4NDQ3MjY2fSx7IngiOjY2MS4wMjM0Mzc1LCJ5Ijo2MzMuNTk5OTkwODQ0NzI2Nn0seyJ4IjoyNDguNTExNzE4NzUsInkiOjY4Ny42OTk5ODkzMTg4NDc3fSx7IngiOjIwOC42NDk3NDk4NzMzNDk5OCwieSI6NzQxLjc5OTk4Nzc5Mjk2ODh9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_CRON_PF_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_PF_RUN_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_RUN_APPLY_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_APPLY_GATES_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_GATES_MERGE_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_TAIL_EVENT_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_EVENT_LEDGER_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_LEDGER_LENSI_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_LENSI_FINDING_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_RESOLVER_LENSI_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel" transform="translate(433.84693, 663.39369)"><g class="label" data-id="L_FINDING_GATES_0" transform="translate(0, -28.099998474121094)"><g><rect class="background" style="" x="-95.828125" y="-1" width="191.65625" height="58.19999694824219"/><text y="-10.1" text-anchor="middle" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">operator</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> adds</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> an</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> entry</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">whose</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> name:</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> matches</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> the</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="2.1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">bucket</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> →</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> PR</tspan></tspan></text></g></g></g></g><g class="nodes"><g class="node default" id="my-svg-flowchart-CRON-0" data-look="classic" transform="translate(132.68359375, 207.89999771118164)"><rect class="basic label-container" style="" x="-86.40625" y="-33.29999923706055" width="172.8125" height="66.5999984741211"/><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">cron</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">09:00</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> UTC</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> daily</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-PF-1" data-look="classic" transform="translate(132.68359375, 333.2999954223633)"><rect class="basic label-container" style="" x="-81.59375" y="-33.29999923706055" width="163.1875" height="66.5999984741211"/><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">audit-prefilter</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">--max=10</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-RUN-3" data-look="classic" transform="translate(132.68359375, 458.6999931335449)"><rect class="basic label-container" style="" x="-85.171875" y="-33.29999923706055" width="170.34375" height="66.5999984741211"/><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">audit-run-entry</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">grounded</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> LLM</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-APPLY-5" data-look="classic" transform="translate(132.68359375, 575.299991607666)"><rect class="basic label-container" style="" x="-70.84375" y="-33.29999923706055" width="141.6875" height="66.5999984741211"/><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">audit-apply</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">--open-pr</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-GATES-7" data-look="classic" transform="translate(190.59765625, 766.2999877929688)"><rect class="basic label-container" style="" x="-67.1328125" y="-24.5" width="134.265625" height="49"/><g class="label" style="" transform="translate(0, -9.5)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">5</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> PR</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> gates</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-MERGE-9" data-look="classic" transform="translate(190.59765625, 874.0999870300293)"><rect class="basic label-container" style="" x="-92.9609375" y="-33.29999923706055" width="185.921875" height="66.5999984741211"/><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">human</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> merge</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">→</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> VERSION</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> bump</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-TAIL-10" data-look="classic" transform="translate(536.59375, 66.29999923706055)"><rect class="basic label-container" style="" x="-90.6171875" y="-33.29999923706055" width="181.234375" height="66.5999984741211"/><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">gap-signal-tail</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">90</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> pipeline</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> steps</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-EVENT-11" data-look="classic" transform="translate(536.59375, 207.89999771118164)"><rect class="basic label-container" style="" x="-111.1875" y="-33.29999923706055" width="222.375" height="66.5999984741211"/><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">scaffold</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> observe</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> event</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">knowledge_gap_signal</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-LEDGER-13" data-look="classic" transform="translate(536.59375, 333.2999954223633)"><rect class="basic label-container" style="" x="-76.09375" y="-33.29999923706055" width="152.1875" height="66.5999984741211"/><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">ledger</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">activity.jsonl</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-LENSI-15" data-look="classic" transform="translate(661.0234375, 458.6999931335449)"><rect class="basic label-container" style="" x="-83.65625" y="-33.29999923706055" width="167.3125" height="66.5999984741211"/><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Lens</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> I</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">90-day</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> window</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-FINDING-17" data-look="classic" transform="translate(661.0234375, 575.299991607666)"><rect class="basic label-container" style="" x="-56.3359375" y="-33.29999923706055" width="112.671875" height="66.5999984741211"/><g class="label" style="" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">finding</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">P1</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> /</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> P2</tspan></tspan></text></g></g></g><g class="node default" id="my-svg-flowchart-RESOLVER-18" data-look="classic" transform="translate(785.453125, 333.2999954223633)"><rect class="basic label-container" style="" x="-122.765625" y="-42.099998474121094" width="245.53125" height="84.19999694824219"/><g class="label" style="" transform="translate(0, -27.099998474121094)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">3-tier</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> --knowledge-root</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">resolver</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="2.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">suppresses</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> covered</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> topics</tspan></tspan></text></g></g></g></g></g></g><defs><filter id="my-svg-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><defs><filter id="my-svg-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><linearGradient id="my-svg-gradient" gradientUnits="objectBoundingBox" x1="0%" y1="0%" x2="100%" y2="0%"><stop offset="0%" stop-color="hsl(0, 0%, 83.3333333333%)" stop-opacity="1"/><stop offset="100%" stop-color="hsl(0, 0%, 88.9215686275%)" stop-opacity="1"/></linearGradient></svg>
@@ -1,3 +1,3 @@
1
1
  {
2
- "diagram-0": "c08617e8996ef893"
2
+ "diagram-0": "dc50f6f23b5dab58"
3
3
  }