@navels/neal 0.3.0 → 0.3.2

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.
package/README.md CHANGED
@@ -9,7 +9,11 @@ stable result.
9
9
 
10
10
  > **A plan-driven, multi-agent coding loop.** Separate **planner**, **coder**, and **reviewer** roles, each on the provider and model you choose, work together to implement your plan.
11
11
 
12
- ![neal execution flow](docs/assets/neal-execution-flow.png)
12
+ <picture>
13
+ <source media="(prefers-color-scheme: dark)" srcset="docs/assets/neal-core-flow-dark.svg">
14
+ <source media="(prefers-color-scheme: light)" srcset="docs/assets/neal-core-flow-light.svg">
15
+ <img alt="neal execution flow" src="docs/assets/neal-core-flow-light.svg">
16
+ </picture>
13
17
 
14
18
  neal is a local planner/coder/reviewer loop for your repo. You write a plan, and neal's planner/reviewer loop turns it into a human-reviewable execution plan with an execution shape, manageable scopes, and high-level implementation detail grounded in the current repository. neal then runs each scope with your configured coder and reviewer roles. After every scope is accepted, a final review pass checks the total set of changes against the entire plan. Run artifacts are recorded under `.neal/` so interrupted work can resume.
15
19
 
@@ -18,7 +22,15 @@ Two choices explain the design:
18
22
  - **The coder and reviewer run on different vendors.** The review is genuinely adversarial: a second model with its own blind spots checks the first, instead of one model grading its own work.
19
23
  - **Each scope starts the coder from a fresh context.** A long plan doesn't drift the way a single agent does as its context fills up.
20
24
 
21
- ### What makes it interesting
25
+ ### Support MusiCares
26
+
27
+ If neal has been useful to you, please consider donating to MusiCares. It's a
28
+ non-profit giving musicians a place to turn to in times of financial, personal,
29
+ or medical crisis.
30
+
31
+ [![Donate to MusiCares](https://img.shields.io/badge/Donate_to-MusiCares-b51f2e.svg)](https://www.musicares.org/about/?form=FUNKYMLRVWU&fundraiser=NTYJWDJE&member=SHEDDUJS)
32
+
33
+ ### What makes neal interesting
22
34
 
23
35
  - **Roles, not one monolithic agent.** Planner, coder, and reviewer are independent, separately configurable roles. Mix vendors and models per role (e.g. Codex codes, Claude reviews).
24
36
  - **The reviewer is read-only.** Declared at provider registration and enforced mechanically in each adapter (OS sandbox for Codex, SDK tool allowlist for Claude, a neal-owned jailed toolset for OpenRouter models). See [SECURITY.md](SECURITY.md) and [docs/providers.md](docs/providers.md).
@@ -274,7 +286,7 @@ neal status --json --all
274
286
 
275
287
  ## Automation contract
276
288
 
277
- neal keeps a stable machine-facing contract for driving it from scripts, CI, and benchmark harnesses: writer exit codes, the `neal status --json` classification schema, patch-submission eligibility, and harness timeout and trace-publishing guidance. See [docs/automation.md](docs/automation.md).
289
+ neal keeps a stable machine-facing contract for driving it from scripts, CI, and benchmark harnesses: writer exit codes, the `neal status --json` classification schema, patch-submission eligibility, and harness timeout and trace-publishing guidance. See [docs/automation.md](docs/automation.md). [neal-swebench](https://github.com/navels/neal-swebench) drives neal through this contract to benchmark role pairings on SWE-bench Pro.
278
290
 
279
291
  ## Commands
280
292
 
@@ -0,0 +1,2 @@
1
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1742.6871929611189 581.5018875438792" width="1742.6871929611189" height="581.5018875438792"><!-- svg-source:excalidraw --><metadata/><defs><style class="style-fonts">
2
+ @font-face { font-family: Nunito; src: url(data:font/woff2;base64,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); }</style></defs><rect x="0" y="0" width="1742.6871929611189" height="581.5018875438792" fill="#161b22" rx="12" ry="12"/><g stroke-linecap="round" transform="translate(262.94598202361897 301.8905594188792) rotate(0 85 40)"><path d="M0 0 L170 0 L170 80 L0 80" stroke="none" stroke-width="0" fill="#1a4d2e"/><path d="M0 0 C43.09 0, 86.19 0, 170 0 M0 0 C34.13 0, 68.26 0, 170 0 M170 0 C170 25.31, 170 50.63, 170 80 M170 0 C170 20.8, 170 41.61, 170 80 M170 80 C125.5 80, 81.01 80, 0 80 M170 80 C115.24 80, 60.48 80, 0 80 M0 80 C0 58.78, 0 37.55, 0 0 M0 80 C0 53.09, 0 26.18, 0 0" stroke="#2f9e44" stroke-width="2" fill="none"/></g><g transform="translate(296.70603756561115 328.3905594188792) rotate(0 51.23994445800781 13.5)"><text x="51.23994445800781" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#e6edf3" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Refine plan</text></g><g stroke-linecap="round" transform="translate(512.945982023619 301.6639969188792) rotate(0 84.99999999999994 40)"><path d="M0 0 L170 0 L170 80 L0 80" stroke="none" stroke-width="0" fill="#15426b"/><path d="M0 0 C44.15 0, 88.31 0, 170 0 M0 0 C53.01 0, 106.02 0, 170 0 M170 0 C170 21.32, 170 42.64, 170 80 M170 0 C170 17.07, 170 34.14, 170 80 M170 80 C121.13 80, 72.26 80, 0 80 M170 80 C117.79 80, 65.57 80, 0 80 M0 80 C0 61.7, 0 43.41, 0 0 M0 80 C0 55.64, 0 31.28, 0 0" stroke="#58a6ff" stroke-width="2" fill="none"/></g><g transform="translate(544.5860424484237 314.6639969188792) rotate(0 53.359939575195256 27)"><text x="53.35993957519531" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#e6edf3" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Fresh agent</text><text x="53.35993957519531" y="47.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#e6edf3" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"> context</text></g><g stroke-linecap="round" transform="translate(762.9459820236189 301.8905594188792) rotate(0 85 40)"><path d="M0 0 L170 0 L170 80 L0 80" stroke="none" stroke-width="0" fill="#15426b"/><path d="M0 0 C35.27 0, 70.54 0, 170 0 M0 0 C62.07 0, 124.14 0, 170 0 M170 0 C170 28.28, 170 56.57, 170 80 M170 0 C170 18.91, 170 37.82, 170 80 M170 80 C132.43 80, 94.86 80, 0 80 M170 80 C113.18 80, 56.36 80, 0 80 M0 80 C0 57.57, 0 35.14, 0 0 M0 80 C0 52.18, 0 24.36, 0 0" stroke="#58a6ff" stroke-width="2" fill="none"/></g><g transform="translate(783.5960522140485 328.3905594188792) rotate(0 64.34992980957031 13.5)"><text x="64.34992980957031" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#e6edf3" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Execute scope</text></g><g stroke-linecap="round" transform="translate(1012.9459820236189 301.8905594188792) rotate(0 85 40)"><path d="M0 0 L170 0 L170 80 L0 80" stroke="none" stroke-width="0" fill="#15426b"/><path d="M0 0 C53.64 0, 107.27 0, 170 0 M0 0 C44.06 0, 88.12 0, 170 0 M170 0 C170 31.75, 170 63.51, 170 80 M170 0 C170 31.54, 170 63.07, 170 80 M170 80 C123.64 80, 77.28 80, 0 80 M170 80 C102.9 80, 35.81 80, 0 80 M0 80 C0 55.01, 0 30.02, 0 0 M0 80 C0 60.57, 0 41.13, 0 0" stroke="#58a6ff" stroke-width="2" fill="none"/></g><g transform="translate(1062.7760067428571 328.3905594188792) rotate(0 35.16997528076172 13.5)"><text x="35.16997528076172" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#e6edf3" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Commit</text></g><g stroke-linecap="round" transform="translate(1262.687192961119 301.8905594188792) rotate(0 85 40)"><path d="M0 0 L170 0 L170 80 L0 80" stroke="none" stroke-width="0" fill="#15426b"/><path d="M0 0 C50.17 0, 100.34 0, 170 0 M0 0 C58.72 0, 117.44 0, 170 0 M170 0 C170 23.41, 170 46.83, 170 80 M170 0 C170 21.65, 170 43.3, 170 80 M170 80 C133.58 80, 97.17 80, 0 80 M170 80 C108.13 80, 46.27 80, 0 80 M0 80 C0 51, 0 22, 0 0 M0 80 C0 54.68, 0 29.37, 0 0" stroke="#58a6ff" stroke-width="2" fill="none"/></g><g transform="translate(1289.757261320494 328.3905594188792) rotate(0 57.929931640625 13.5)"><text x="57.929931640625" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#e6edf3" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Final Review</text></g><g stroke-linecap="round" transform="translate(1512.687192961119 301.8905594188792) rotate(0 84.99999999999989 40)"><path d="M0 0 L170 0 L170 80 L0 80" stroke="none" stroke-width="0" fill="#63391d"/><path d="M0 0 C66.42 0, 132.83 0, 170 0 M0 0 C57.35 0, 114.7 0, 170 0 M170 0 C170 28.36, 170 56.72, 170 80 M170 0 C170 30.17, 170 60.35, 170 80 M170 80 C132.77 80, 95.54 80, 0 80 M170 80 C117.17 80, 64.33 80, 0 80 M0 80 C0 51.63, 0 23.25, 0 0 M0 80 C0 59.69, 0 39.37, 0 0" stroke="#e8590c" stroke-width="2" fill="none"/></g><g transform="translate(1564.107229277037 328.3905594188792) rotate(0 33.57996368408192 13.5)"><text x="33.57996368408203" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#e6edf3" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Squash</text></g><g stroke-linecap="round"><g transform="translate(441.94598202361897 341.8905594188792) rotate(0 29.5 0)"><path d="M0 0 C18.9 0, 37.79 0, 59 0 M0 0 C18.89 0, 37.78 0, 59 0" stroke="#8b949e" stroke-width="2" fill="none"/></g><g transform="translate(441.94598202361897 341.8905594188792) rotate(0 29.5 0)"><path d="M59 0 L45.41 6.34 L45.41 -6.34 L59 0" stroke="none" stroke-width="0" fill="#8b949e" fill-rule="evenodd"/><path d="M59 0 C54.65 2.03, 50.29 4.06, 45.41 6.34 M59 0 C54.65 2.03, 50.29 4.06, 45.41 6.34 M45.41 6.34 C45.41 1.85, 45.41 -2.64, 45.41 -6.34 M45.41 6.34 C45.41 3.01, 45.41 -0.32, 45.41 -6.34 M45.41 -6.34 C48.17 -5.05, 50.92 -3.77, 59 0 M45.41 -6.34 C49.58 -4.39, 53.75 -2.45, 59 0 M59 0 C59 0, 59 0, 59 0 M59 0 C59 0, 59 0, 59 0" stroke="#8b949e" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(691.9459820236189 341.7657960210282) rotate(0 29.5 0.03502764805136849)"><path d="M0 0 C18.67 0.02, 37.34 0.04, 59 0.07 M0 0 C15.34 0.02, 30.69 0.04, 59 0.07" stroke="#8b949e" stroke-width="2" fill="none"/></g><g transform="translate(691.9459820236189 341.7657960210282) rotate(0 29.5 0.03502764805136849)"><path d="M59 0.07 L45.4 6.39 L45.41 -6.29 L59 0.07" stroke="none" stroke-width="0" fill="#8b949e" fill-rule="evenodd"/><path d="M59 0.07 C54.7 2.07, 50.39 4.07, 45.4 6.39 M59 0.07 C55.46 1.71, 51.93 3.36, 45.4 6.39 M45.4 6.39 C45.4 3.07, 45.41 -0.24, 45.41 -6.29 M45.4 6.39 C45.4 2.31, 45.41 -1.78, 45.41 -6.29 M45.41 -6.29 C49.02 -4.6, 52.62 -2.91, 59 0.07 M45.41 -6.29 C49.98 -4.15, 54.55 -2.01, 59 0.07 M59 0.07 C59 0.07, 59 0.07, 59 0.07 M59 0.07 C59 0.07, 59 0.07, 59 0.07" stroke="#8b949e" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(941.9459820236189 341.8905594188792) rotate(0 29.5 0)"><path d="M0 0 C15.72 0, 31.45 0, 59 0 M0 0 C12.59 0, 25.18 0, 59 0" stroke="#8b949e" stroke-width="2" fill="none"/></g><g transform="translate(941.9459820236189 341.8905594188792) rotate(0 29.5 0)"><path d="M59 0 L45.41 6.34 L45.41 -6.34 L59 0" stroke="none" stroke-width="0" fill="#8b949e" fill-rule="evenodd"/><path d="M59 0 C55.38 1.69, 51.75 3.38, 45.41 6.34 M59 0 C56.1 1.35, 53.2 2.71, 45.41 6.34 M45.41 6.34 C45.41 2.69, 45.41 -0.95, 45.41 -6.34 M45.41 6.34 C45.41 2.45, 45.41 -1.45, 45.41 -6.34 M45.41 -6.34 C48.51 -4.89, 51.62 -3.44, 59 0 M45.41 -6.34 C49.55 -4.41, 53.68 -2.48, 59 0 M59 0 C59 0, 59 0, 59 0 M59 0 C59 0, 59 0, 59 0" stroke="#8b949e" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(1192.1871929611189 341.8905594188792) rotate(0 29 0)"><path d="M0 0 C20.51 0, 41.01 0, 58 0 M0 0 C13.71 0, 27.42 0, 58 0" stroke="#8b949e" stroke-width="2" fill="none"/></g><g transform="translate(1192.1871929611189 341.8905594188792) rotate(0 29 0)"><path d="M58 0 L44.41 6.34 L44.41 -6.34 L58 0" stroke="none" stroke-width="0" fill="#8b949e" fill-rule="evenodd"/><path d="M58 0 C53.19 2.24, 48.39 4.48, 44.41 6.34 M58 0 C54.79 1.5, 51.57 3, 44.41 6.34 M44.41 6.34 C44.41 3.54, 44.41 0.74, 44.41 -6.34 M44.41 6.34 C44.41 2.1, 44.41 -2.14, 44.41 -6.34 M44.41 -6.34 C48.22 -4.56, 52.03 -2.78, 58 0 M44.41 -6.34 C49.13 -4.13, 53.86 -1.93, 58 0 M58 0 C58 0, 58 0, 58 0 M58 0 C58 0, 58 0, 58 0" stroke="#8b949e" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(1442.187192961119 341.8905594188792) rotate(0 29 0)"><path d="M0 0 C23.02 0, 46.04 0, 58 0 M0 0 C22.86 0, 45.73 0, 58 0" stroke="#8b949e" stroke-width="2" fill="none"/></g><g transform="translate(1442.187192961119 341.8905594188792) rotate(0 29 0)"><path d="M58 0 L44.41 6.34 L44.41 -6.34 L58 0" stroke="none" stroke-width="0" fill="#8b949e" fill-rule="evenodd"/><path d="M58 0 C52.6 2.52, 47.21 5.03, 44.41 6.34 M58 0 C52.64 2.5, 47.28 5, 44.41 6.34 M44.41 6.34 C44.41 2.88, 44.41 -0.58, 44.41 -6.34 M44.41 6.34 C44.41 1.34, 44.41 -3.67, 44.41 -6.34 M44.41 -6.34 C48.65 -4.36, 52.9 -2.38, 58 0 M44.41 -6.34 C47.71 -4.8, 51.01 -3.26, 58 0 M58 0 C58 0, 58 0, 58 0 M58 0 C58 0, 58 0, 58 0" stroke="#8b949e" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(1105.9713525935056 301.24160820093687) rotate(0 -257.13862305703515 -25.36790720352883)"><path d="M0 0 C0.16 -15.45, 0.82 -29.61, 0.46 -50.74 M0.46 -50.74 C-203.45 -49.33, -406.37 -49.36, -514.73 -50.74 M-514.73 -50.74 C-514.48 -35.22, -513.61 -21.1, -514.73 -4.58" stroke="#c9d1d9" stroke-width="2.5" fill="none" stroke-dasharray="8 10"/></g><g transform="translate(1105.9713525935056 301.24160820093687) rotate(0 -257.13862305703515 -25.36790720352883)"><path d="M-513.93 -6.29 L-519.84 -18.63 L-506.52 -18.98 L-514.46 -6.35" stroke="none" stroke-width="0" fill="#c9d1d9" fill-rule="evenodd"/><path d="M-514.73 -4.58 C-516.24 -9.61, -517.43 -13.62, -520.55 -18.4 M-520.55 -18.4 C-516.46 -18.16, -510.8 -18.02, -507.88 -17.92 M-507.88 -17.92 C-509.91 -12.89, -511.4 -8.95, -514.73 -4.58 M-514.73 -4.58 C-514.73 -4.58, -514.73 -4.58, -514.73 -4.58" stroke="#c9d1d9" stroke-width="2.5" fill="none"/></g></g><mask/><g stroke-linecap="round" transform="translate(764.0054128271904 439.53467214209365) rotate(0 85 40)"><path d="M0 0 L170 0 L170 80 L0 80" stroke="none" stroke-width="0" fill="#4a2c59"/><path d="M0 0 C36.42 0, 72.83 0, 170 0 M0 0 C61.87 0, 123.73 0, 170 0 M170 0 C170 29, 170 58, 170 80 M170 0 C170 25.32, 170 50.63, 170 80 M170 80 C112.9 80, 55.8 80, 0 80 M170 80 C132.74 80, 95.48 80, 0 80 M0 80 C0 54.98, 0 29.96, 0 0 M0 80 C0 53.73, 0 27.46, 0 0" stroke="#c297ea" stroke-width="2" fill="none"/></g><g transform="translate(814.3154409033623 466.03467214209365) rotate(0 34.689971923828125 13.5)"><text x="34.689971923828125" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#e6edf3" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Consult</text></g><g stroke-linecap="round" transform="translate(1013.2731304611189 441.5018875438792) rotate(0 85 40)"><path d="M0 0 L170 0 L170 80 L0 80" stroke="none" stroke-width="0" fill="#4a2c59"/><path d="M0 0 C34.51 0, 69.02 0, 170 0 M0 0 C52.19 0, 104.37 0, 170 0 M170 0 C170 27.18, 170 54.36, 170 80 M170 0 C170 16.74, 170 33.49, 170 80 M170 80 C116.69 80, 63.38 80, 0 80 M170 80 C128.54 80, 87.08 80, 0 80 M0 80 C0 61.19, 0 42.38, 0 0 M0 80 C0 50.47, 0 20.94, 0 0" stroke="#c297ea" stroke-width="2" fill="none"/></g><g transform="translate(1065.1331615890485 468.0018875438792) rotate(0 33.13996887207031 13.5)"><text x="33.13996887207031" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#e6edf3" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Review</text></g><g stroke-linecap="round" transform="translate(1263.102232023619 441.3544266063792) rotate(0 85 40)"><path d="M0 0 L170 0 L170 80 L0 80" stroke="none" stroke-width="0" fill="#4a2c59"/><path d="M0 0 C38.88 0, 77.76 0, 170 0 M0 0 C51.77 0, 103.54 0, 170 0 M170 0 C170 21.59, 170 43.18, 170 80 M170 0 C170 23.08, 170 46.17, 170 80 M170 80 C127.7 80, 85.4 80, 0 80 M170 80 C105.5 80, 41 80, 0 80 M0 80 C0 52.33, 0 24.66, 0 0 M0 80 C0 55.98, 0 31.96, 0 0" stroke="#c297ea" stroke-width="2" fill="none"/></g><g transform="translate(1314.9622631515488 467.8544266063792) rotate(0 33.13996887207031 13.5)"><text x="33.13996887207031" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#e6edf3" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Review</text></g><g stroke-linecap="round"><g transform="translate(821.8011252527858 384.9074865022129) rotate(0 -10.062174479166742 24.93419828869048)"><path d="M0.34 0.02 C-2.97 4.08, -19.12 16.29, -19.82 24.55 C-20.53 32.8, -6.44 45.32, -3.88 49.55" stroke="#c9d1d9" stroke-width="2.5" fill="none" stroke-dasharray="8 10"/></g><g transform="translate(821.8011252527858 384.9074865022129) rotate(0 -10.062174479166742 24.93419828869048)"><path d="M-4.68 50.51 L-17.29 43.89 L-7.77 34.52 L-4.53 49.85" stroke="none" stroke-width="0" fill="#c9d1d9" fill-rule="evenodd"/><path d="M-3.88 49.55 C-8.09 47.99, -11.99 45.86, -17.42 43.1 M-17.42 43.1 C-15.21 40.84, -12.54 38.6, -7.64 35.03 M-7.64 35.03 C-6.51 40.48, -5.54 45.01, -3.88 49.55 M-3.88 49.55 C-3.88 49.55, -3.88 49.55, -3.88 49.55" stroke="#c9d1d9" stroke-width="2.5" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(877.3578282503618 437.32861745459365) rotate(0 10.902312563711916 -25.476190476190595)"><path d="M0.66 0.57 C4.24 -3.94, 21.69 -18.5, 22.28 -27.05 C22.87 -35.61, 7.15 -46.68, 4.2 -50.76" stroke="#c9d1d9" stroke-width="2.5" fill="none" stroke-dasharray="8 10"/></g><g transform="translate(877.3578282503618 437.32861745459365) rotate(0 10.902312563711916 -25.476190476190595)"><path d="M4.46 -49.17 L17.95 -46.71 L8.02 -36.18 L5.93 -50.19" stroke="none" stroke-width="0" fill="#c9d1d9" fill-rule="evenodd"/><path d="M4.2 -50.76 C9.99 -48.4, 13.51 -48.11, 18.21 -45.68 M18.21 -45.68 C15.58 -44.04, 13.06 -41.15, 9.32 -36.76 M9.32 -36.76 C6.83 -41.23, 4.58 -46.12, 4.2 -50.76 M4.2 -50.76 C4.2 -50.76, 4.2 -50.76, 4.2 -50.76" stroke="#c9d1d9" stroke-width="2.5" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(1071.1701842067077 386.325152451304) rotate(0 -10.062174479166629 25.09602864583337)"><path d="M0.48 -0.68 C-3.11 3.3, -20.11 16.09, -20.89 24.48 C-21.67 32.87, -7.08 45.54, -4.21 49.64" stroke="#c9d1d9" stroke-width="2.5" fill="none" stroke-dasharray="8 10"/></g><g transform="translate(1071.1701842067077 386.325152451304) rotate(0 -10.062174479166629 25.09602864583337)"><path d="M-4.47 48.61 L-19.27 44.26 L-6.76 35.83 L-3.29 50.49" stroke="none" stroke-width="0" fill="#c9d1d9" fill-rule="evenodd"/><path d="M-4.21 49.64 C-9.97 46.62, -13.75 45.01, -17.97 43.67 M-17.97 43.67 C-15.07 40.54, -12.71 39.34, -8.49 35.26 M-8.49 35.26 C-8.31 40.55, -6.63 45.08, -4.21 49.64 M-4.21 49.64 C-4.21 49.64, -4.21 49.64, -4.21 49.64" stroke="#c9d1d9" stroke-width="2.5" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(1126.6981789983745 439.0699441179705) rotate(0 10.916666666666629 -25.63802083333337)"><path d="M-0.77 0.2 C2.73 -4.23, 20.48 -18.48, 21.47 -27.25 C22.47 -36.01, 7.86 -48.19, 5.2 -52.36" stroke="#c9d1d9" stroke-width="2.5" fill="none" stroke-dasharray="8 10"/></g><g transform="translate(1126.6981789983745 439.0699441179705) rotate(0 10.916666666666629 -25.63802083333337)"><path d="M3.9 -51.78 L20.53 -45.74 L10.22 -37.19 L3.93 -50.98" stroke="none" stroke-width="0" fill="#c9d1d9" fill-rule="evenodd"/><path d="M5.2 -52.36 C10.03 -50.67, 13.72 -47.91, 18.81 -46.31 M18.81 -46.31 C17.3 -44.8, 15.72 -43.59, 9.3 -38.04 M9.3 -38.04 C6.94 -43.3, 7.32 -46.83, 5.2 -52.36 M5.2 -52.36 C5.2 -52.36, 5.2 -52.36, 5.2 -52.36" stroke="#c9d1d9" stroke-width="2.5" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(1319.601173790041 385.524371201304) rotate(0 -10.062174479166629 25.09602864583337)"><path d="M-0.36 -0.55 C-3.55 3.28, -19.43 14.91, -19.93 23.19 C-20.43 31.48, -6.12 44.69, -3.36 49.17" stroke="#c9d1d9" stroke-width="2.5" fill="none" stroke-dasharray="8 10"/></g><g transform="translate(1319.601173790041 385.524371201304) rotate(0 -10.062174479166629 25.09602864583337)"><path d="M-1.64 49.73 L-15.94 43.46 L-8.28 36 L-2.56 49.44" stroke="none" stroke-width="0" fill="#c9d1d9" fill-rule="evenodd"/><path d="M-3.36 49.17 C-7.25 47.82, -11.1 46.63, -16.85 42.61 M-16.85 42.61 C-13.91 40.23, -12.49 38.07, -7.01 34.62 M-7.01 34.62 C-5.56 39.2, -5.78 42.18, -3.36 49.17 M-3.36 49.17 C-3.36 49.17, -3.36 49.17, -3.36 49.17" stroke="#c9d1d9" stroke-width="2.5" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(1375.129168581708 438.2691628679705) rotate(0 10.916666666666629 -25.63802083333337)"><path d="M0.2 -1.09 C3.98 -5.62, 21.45 -19.33, 22.32 -27.72 C23.19 -36.11, 8.18 -47.38, 5.43 -51.41" stroke="#c9d1d9" stroke-width="2.5" fill="none" stroke-dasharray="8 10"/></g><g transform="translate(1375.129168581708 438.2691628679705) rotate(0 10.916666666666629 -25.63802083333337)"><path d="M6.35 -50.56 L18.02 -44.55 L10.94 -37.01 L4.15 -51.41" stroke="none" stroke-width="0" fill="#c9d1d9" fill-rule="evenodd"/><path d="M5.43 -51.41 C7.79 -49.36, 11.61 -47.94, 19.28 -45.93 M19.28 -45.93 C16.87 -44.6, 14.07 -42.01, 10.14 -37.28 M10.14 -37.28 C8.08 -41.98, 9.18 -44.12, 5.43 -51.41 M5.43 -51.41 C5.43 -51.41, 5.43 -51.41, 5.43 -51.41" stroke="#c9d1d9" stroke-width="2.5" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(196.5947372939562 342.6703833276098) rotate(0 29.25 0)"><path d="M0 0 C17.64 0, 35.28 0, 58.5 0 M0 0 C22.59 0, 45.19 0, 58.5 0" stroke="#8b949e" stroke-width="2" fill="none"/></g><g transform="translate(196.5947372939562 342.6703833276098) rotate(0 29.25 0)"><path d="M58.5 0 L44.91 6.34 L44.91 -6.34 L58.5 0" stroke="none" stroke-width="0" fill="#8b949e" fill-rule="evenodd"/><path d="M58.5 0 C54.4 1.91, 50.3 3.82, 44.91 6.34 M58.5 0 C53.25 2.45, 48 4.9, 44.91 6.34 M44.91 6.34 C44.91 3.68, 44.91 1.02, 44.91 -6.34 M44.91 6.34 C44.91 3.14, 44.91 -0.06, 44.91 -6.34 M44.91 -6.34 C50.13 -3.9, 55.36 -1.46, 58.5 0 M44.91 -6.34 C48.63 -4.6, 52.35 -2.87, 58.5 0 M58.5 0 C58.5 0, 58.5 0, 58.5 0 M58.5 0 C58.5 0, 58.5 0, 58.5 0" stroke="#8b949e" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round" transform="translate(262.20034555288464 438.98351854308146) rotate(0 85 40)"><path d="M0 0 L170 0 L170 80 L0 80" stroke="none" stroke-width="0" fill="#4a2c59"/><path d="M0 0 C59.58 0, 119.15 0, 170 0 M0 0 C43.28 0, 86.56 0, 170 0 M170 0 C170 18.75, 170 37.49, 170 80 M170 0 C170 23.47, 170 46.94, 170 80 M170 80 C128.04 80, 86.08 80, 0 80 M170 80 C130.51 80, 91.03 80, 0 80 M0 80 C0 52.15, 0 24.3, 0 0 M0 80 C0 60.03, 0 40.05, 0 0" stroke="#c297ea" stroke-width="2" fill="none"/></g><g transform="translate(314.06037668081433 465.48351854308146) rotate(0 33.13996887207031 13.5)"><text x="33.13996887207031" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#e6edf3" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Review</text></g><g stroke-linecap="round"><g transform="translate(320.49605797848005 384.8563329032007) rotate(0 -10.312174479166742 24.68419828869048)"><path d="M-0.5 -0.25 C-3.98 3.6, -20.17 15.03, -20.76 23.26 C-21.36 31.49, -6.8 44.77, -4.07 49.1" stroke="#c9d1d9" stroke-width="2.5" fill="none" stroke-dasharray="8 10"/></g><g transform="translate(320.49605797848005 384.8563329032007) rotate(0 -10.312174479166742 24.68419828869048)"><path d="M-3.48 49.66 L-18.55 42 L-7.62 34.94 L-4.87 49.56" stroke="none" stroke-width="0" fill="#c9d1d9" fill-rule="evenodd"/><path d="M-4.07 49.1 C-8.81 46.77, -13.57 45.6, -17.63 42.68 M-17.63 42.68 C-15.61 40.77, -12.14 38.35, -7.87 34.59 M-7.87 34.59 C-6.45 40.69, -5.69 45, -4.07 49.1 M-4.07 49.1 C-4.07 49.1, -4.07 49.1, -4.07 49.1" stroke="#c9d1d9" stroke-width="2.5" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(375.0527609760561 436.27746385558146) rotate(0 11.152312563711916 -25.226190476190595)"><path d="M-0.31 -1.14 C3.78 -5.46, 22.42 -18.18, 23.45 -26.45 C24.49 -34.72, 9.03 -46.8, 5.9 -50.77" stroke="#c9d1d9" stroke-width="2.5" fill="none" stroke-dasharray="8 10"/></g><g transform="translate(375.0527609760561 436.27746385558146) rotate(0 11.152312563711916 -25.226190476190595)"><path d="M4.07 -52.12 L20.37 -44.87 L9.32 -35.83 L5.08 -51.14" stroke="none" stroke-width="0" fill="#c9d1d9" fill-rule="evenodd"/><path d="M5.9 -50.77 C7.39 -48.22, 11.02 -48.02, 19.87 -45.58 M19.87 -45.58 C18.55 -43.7, 15.89 -40.14, 10.9 -36.74 M10.9 -36.74 C7.51 -43.3, 6.21 -49.02, 5.9 -50.77 M5.9 -50.77 C5.9 -50.77, 5.9 -50.77, 5.9 -50.77" stroke="#c9d1d9" stroke-width="2.5" fill="none"/></g></g><mask/><g stroke-linecap="round" transform="translate(60.0 279.7176124656595) rotate(0 57.3193359375 77.412109375)"><path d="M0 0 L114.64 0 L114.64 154.82 L0 154.82" stroke="none" stroke-width="0" fill="#161b22"/><path d="M0 0 C44.32 0, 88.63 0, 114.64 0 M0 0 C42.97 0, 85.94 0, 114.64 0 M114.64 0 C114.64 37.65, 114.64 75.3, 114.64 154.82 M114.64 0 C114.64 35.17, 114.64 70.35, 114.64 154.82 M114.64 154.82 C78.03 154.82, 41.43 154.82, 0 154.82 M114.64 154.82 C91.16 154.82, 67.68 154.82, 0 154.82 M0 154.82 C0 104.58, 0 54.34, 0 0 M0 154.82 C0 114.99, 0 75.15, 0 0" stroke="#c9d1d9" stroke-width="2" fill="none"/></g><g stroke-linecap="round" transform="translate(65.69945484203299 272.8620149381867) rotate(0 57.3193359375 77.412109375)"><path d="M0 0 L114.64 0 L114.64 154.82 L0 154.82" stroke="none" stroke-width="0" fill="#161b22"/><path d="M0 0 C42.04 0, 84.08 0, 114.64 0 M0 0 C26.56 0, 53.13 0, 114.64 0 M114.64 0 C114.64 45.34, 114.64 90.67, 114.64 154.82 M114.64 0 C114.64 61.43, 114.64 122.86, 114.64 154.82 M114.64 154.82 C76.05 154.82, 37.45 154.82, 0 154.82 M114.64 154.82 C74.88 154.82, 35.12 154.82, 0 154.82 M0 154.82 C0 102.3, 0 49.77, 0 0 M0 154.82 C0 114.72, 0 74.61, 0 0" stroke="#c9d1d9" stroke-width="2" fill="none"/></g><g stroke-linecap="round" transform="translate(72.9987980769231 266.25772664835165) rotate(0 57.3193359375 77.412109375)"><path d="M0 0 L114.64 0 L114.64 154.82 L0 154.82" stroke="none" stroke-width="0" fill="#161b22"/><path d="M0 0 C45.21 0, 90.42 0, 114.64 0 M0 0 C43.7 0, 87.4 0, 114.64 0 M114.64 0 C114.64 50.88, 114.64 101.75, 114.64 154.82 M114.64 0 C114.64 36.13, 114.64 72.26, 114.64 154.82 M114.64 154.82 C86 154.82, 57.37 154.82, 0 154.82 M114.64 154.82 C70.06 154.82, 25.47 154.82, 0 154.82 M0 154.82 C0 108.8, 0 62.78, 0 0 M0 154.82 C0 123.11, 0 91.4, 0 0" stroke="#c9d1d9" stroke-width="2" fill="none"/></g><g transform="translate(84.64819688063403 330.16983602335165) rotate(0 45.66993713378906 13.5)"><text x="45.66993713378906" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#c9d1d9" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Draft plan</text></g><g stroke-linecap="round" transform="translate(865.0207224416213 60.0) rotate(0 21.26395089285711 21.26395089285711)"><path d="M10.63 0 C18.12 0.24, 25.5 -3.17, 31.9 0 C35.43 1.36, 44.97 6.75, 42.53 10.63 C44.08 15.5, 40.58 25.74, 42.53 31.9 C42.67 42.04, 38.4 44.12, 31.9 42.53 C28.32 44.33, 19.69 42.34, 10.63 42.53 C0.32 41.86, -0.24 37.54, 0 31.9 C3.09 25.1, -0.23 21.45, 0 10.63 C1.16 0.09, 5.48 -2.49, 10.63 0" stroke="none" stroke-width="0" fill="#1a4d2e"/><path d="M10.63 0 C20.62 -0.43, 26.56 1.5, 31.9 0 M10.63 0 C18.93 -0.52, 28.03 -0.51, 31.9 0 M31.9 0 C39.09 1.11, 42.62 3.37, 42.53 10.63 M31.9 0 C37.01 -0.77, 44.77 2.55, 42.53 10.63 M42.53 10.63 C42.25 18.45, 43.09 22.01, 42.53 31.9 M42.53 10.63 C42.79 16.74, 41.85 23.3, 42.53 31.9 M42.53 31.9 C42.94 37.17, 40.81 42.73, 31.9 42.53 M42.53 31.9 C44.62 39.47, 37.92 41.6, 31.9 42.53 M31.9 42.53 C23.88 40.86, 17.47 44.21, 10.63 42.53 M31.9 42.53 C24.7 41.99, 19.54 42.68, 10.63 42.53 M10.63 42.53 C4.9 42.47, 0.86 40.46, 0 31.9 M10.63 42.53 C2.64 42.72, -2.11 39.55, 0 31.9 M0 31.9 C-0.97 25.66, 0.76 18.75, 0 10.63 M0 31.9 C0.49 25.45, 0.33 17.65, 0 10.63 M0 10.63 C0.35 2.69, 1.7 1.35, 10.63 0 M0 10.63 C1.74 3.11, 4.65 -0.13, 10.63 0" stroke="#2f9e44" stroke-width="2" fill="none"/></g><g transform="translate(927.0519724416213 63.66249999999991) rotate(0 49.19597625732422 18.899999999999977)"><text x="0" y="28.112000000000002" font-family="Nunito, Segoe UI Emoji" font-size="28px" fill="#c9d1d9" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Planner</text></g><g stroke-linecap="round" transform="translate(865.4586747557255 117.35435267857133) rotate(0 21.26395089285711 21.26395089285711)"><path d="M10.63 0 C15.06 1.38, 25.47 -1.68, 31.9 0 C35.8 -1.09, 45.94 1.77, 42.53 10.63 C40.92 19.78, 39.62 26.29, 42.53 31.9 C42.97 38.85, 35.86 45.03, 31.9 42.53 C23.98 42.85, 21.98 44.26, 10.63 42.53 C1.05 41.97, -1.55 37.37, 0 31.9 C1.06 22.3, 0.33 16.22, 0 10.63 C2.04 5.91, 3.73 0.05, 10.63 0" stroke="none" stroke-width="0" fill="#15426b"/><path d="M10.63 0 C15.74 1.42, 23.95 0.46, 31.9 0 M10.63 0 C15.66 -0.4, 20.45 0.5, 31.9 0 M31.9 0 C38.15 -0.81, 43.25 3.88, 42.53 10.63 M31.9 0 C39.57 -0.57, 42.57 4.98, 42.53 10.63 M42.53 10.63 C41.79 16.74, 41.58 25.26, 42.53 31.9 M42.53 10.63 C42.55 17.6, 41.94 25, 42.53 31.9 M42.53 31.9 C40.66 39.96, 37.08 42.38, 31.9 42.53 M42.53 31.9 C43.63 41.16, 40.55 41.14, 31.9 42.53 M31.9 42.53 C21.44 42.28, 16.31 43.54, 10.63 42.53 M31.9 42.53 C27.39 42.67, 22.41 42.28, 10.63 42.53 M10.63 42.53 C5.35 41.71, -0.78 38.03, 0 31.9 M10.63 42.53 C2.61 42.91, -1.44 40.81, 0 31.9 M0 31.9 C-0.27 25.06, 0.45 15.49, 0 10.63 M0 31.9 C-0.12 25.02, -0.49 15.28, 0 10.63 M0 10.63 C-0.86 3.94, 3.36 1.79, 10.63 0 M0 10.63 C-2.23 1.91, 4.33 2.09, 10.63 0" stroke="#58a6ff" stroke-width="2" fill="none"/></g><g transform="translate(927.2018388182255 121.01685267857124) rotate(0 37.603981018066406 18.899999999999977)"><text x="0" y="28.112000000000002" font-family="Nunito, Segoe UI Emoji" font-size="28px" fill="#c9d1d9" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Coder</text></g><g stroke-linecap="round" transform="translate(865.3347908271539 175.30412946428555) rotate(0 21.26395089285711 23.900000000000034)"><path d="M10.63 0 C13.98 2.61, 22.61 -2.06, 31.9 0 C38.23 0.74, 43.59 3.62, 42.53 10.63 C45.57 14.92, 45.08 24.25, 42.53 37.17 C40.43 45.27, 42.34 47.56, 31.9 47.8 C25.29 47.75, 18.47 46.41, 10.63 47.8 C5.31 49.31, 2.31 45.9, 0 37.17 C-1.23 31.33, -1.61 25.12, 0 10.63 C1.19 3.63, 6.63 -1.01, 10.63 0" stroke="none" stroke-width="0" fill="#4a2c59"/><path d="M10.63 0 C19.85 -1.32, 28.15 1.1, 31.9 0 M10.63 0 C15.6 0.51, 21.71 0, 31.9 0 M31.9 0 C39.36 1.65, 40.78 4.59, 42.53 10.63 M31.9 0 C37.9 1.81, 44.53 2.01, 42.53 10.63 M42.53 10.63 C44.27 20.29, 43.57 28.64, 42.53 37.17 M42.53 10.63 C42.61 19.92, 43.2 29.54, 42.53 37.17 M42.53 37.17 C41.81 42.68, 37.38 47.58, 31.9 47.8 M42.53 37.17 C40.75 44.93, 40.43 48.56, 31.9 47.8 M31.9 47.8 C24.76 49.47, 14.86 47.7, 10.63 47.8 M31.9 47.8 C23.36 48.21, 15.34 47.63, 10.63 47.8 M10.63 47.8 C1.83 49.75, 0.43 45.46, 0 37.17 M10.63 47.8 C4.98 48.88, -1.1 42.72, 0 37.17 M0 37.17 C0.72 30.31, 0.04 21.04, 0 10.63 M0 37.17 C0.79 28.14, 0.23 17.65, 0 10.63 M0 10.63 C-1.09 4.68, 4.92 -1.77, 10.63 0 M0 10.63 C0.55 3.52, 2.11 1.02, 10.63 0" stroke="#c297ea" stroke-width="2" fill="none"/></g><g transform="translate(927.3660408271539 178.96662946428592) rotate(0 58.869972229003906 18.899999999999977)"><text x="0" y="28.112000000000002" font-family="Nunito, Segoe UI Emoji" font-size="28px" fill="#c9d1d9" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Reviewer</text></g><g transform="translate(610.2606563358518 115.59231627747204) rotate(0 116.1359634399414 24.30000000000001)"><text x="0" y="36.144000000000005" font-family="Nunito, Segoe UI Emoji" font-size="36px" fill="#c9d1d9" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Three models:</text></g></svg>
@@ -0,0 +1,2 @@
1
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1742.6871929611189 581.5018875438792" width="1742.6871929611189" height="581.5018875438792"><!-- svg-source:excalidraw --><metadata/><defs><style class="style-fonts">
2
+ @font-face { font-family: Nunito; src: url(data:font/woff2;base64,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); }</style></defs><rect x="0" y="0" width="1742.6871929611189" height="581.5018875438792" fill="#ffffff"/><g stroke-linecap="round" transform="translate(262.94598202361897 301.8905594188792) rotate(0 85 40)"><path d="M0 0 L170 0 L170 80 L0 80" stroke="none" stroke-width="0" fill="#ebfbee"/><path d="M0 0 C43.09 0, 86.19 0, 170 0 M0 0 C34.13 0, 68.26 0, 170 0 M170 0 C170 25.31, 170 50.63, 170 80 M170 0 C170 20.8, 170 41.61, 170 80 M170 80 C125.5 80, 81.01 80, 0 80 M170 80 C115.24 80, 60.48 80, 0 80 M0 80 C0 58.78, 0 37.55, 0 0 M0 80 C0 53.09, 0 26.18, 0 0" stroke="#2f9e44" stroke-width="2" fill="none"/></g><g transform="translate(296.70603756561115 328.3905594188792) rotate(0 51.23994445800781 13.5)"><text x="51.23994445800781" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Refine plan</text></g><g stroke-linecap="round" transform="translate(512.945982023619 301.6639969188792) rotate(0 84.99999999999994 40)"><path d="M0 0 L170 0 L170 80 L0 80" stroke="none" stroke-width="0" fill="#e7f5ff"/><path d="M0 0 C44.15 0, 88.31 0, 170 0 M0 0 C53.01 0, 106.02 0, 170 0 M170 0 C170 21.32, 170 42.64, 170 80 M170 0 C170 17.07, 170 34.14, 170 80 M170 80 C121.13 80, 72.26 80, 0 80 M170 80 C117.79 80, 65.57 80, 0 80 M0 80 C0 61.7, 0 43.41, 0 0 M0 80 C0 55.64, 0 31.28, 0 0" stroke="#1971c2" stroke-width="2" fill="none"/></g><g transform="translate(544.5860424484237 314.6639969188792) rotate(0 53.359939575195256 27)"><text x="53.35993957519531" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Fresh agent</text><text x="53.35993957519531" y="47.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"> context</text></g><g stroke-linecap="round" transform="translate(762.9459820236189 301.8905594188792) rotate(0 85 40)"><path d="M0 0 L170 0 L170 80 L0 80" stroke="none" stroke-width="0" fill="#e7f5ff"/><path d="M0 0 C35.27 0, 70.54 0, 170 0 M0 0 C62.07 0, 124.14 0, 170 0 M170 0 C170 28.28, 170 56.57, 170 80 M170 0 C170 18.91, 170 37.82, 170 80 M170 80 C132.43 80, 94.86 80, 0 80 M170 80 C113.18 80, 56.36 80, 0 80 M0 80 C0 57.57, 0 35.14, 0 0 M0 80 C0 52.18, 0 24.36, 0 0" stroke="#1971c2" stroke-width="2" fill="none"/></g><g transform="translate(783.5960522140485 328.3905594188792) rotate(0 64.34992980957031 13.5)"><text x="64.34992980957031" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Execute scope</text></g><g stroke-linecap="round" transform="translate(1012.9459820236189 301.8905594188792) rotate(0 85 40)"><path d="M0 0 L170 0 L170 80 L0 80" stroke="none" stroke-width="0" fill="#e7f5ff"/><path d="M0 0 C53.64 0, 107.27 0, 170 0 M0 0 C44.06 0, 88.12 0, 170 0 M170 0 C170 31.75, 170 63.51, 170 80 M170 0 C170 31.54, 170 63.07, 170 80 M170 80 C123.64 80, 77.28 80, 0 80 M170 80 C102.9 80, 35.81 80, 0 80 M0 80 C0 55.01, 0 30.02, 0 0 M0 80 C0 60.57, 0 41.13, 0 0" stroke="#1971c2" stroke-width="2" fill="none"/></g><g transform="translate(1062.7760067428571 328.3905594188792) rotate(0 35.16997528076172 13.5)"><text x="35.16997528076172" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Commit</text></g><g stroke-linecap="round" transform="translate(1262.687192961119 301.8905594188792) rotate(0 85 40)"><path d="M0 0 L170 0 L170 80 L0 80" stroke="none" stroke-width="0" fill="#e7f5ff"/><path d="M0 0 C50.17 0, 100.34 0, 170 0 M0 0 C58.72 0, 117.44 0, 170 0 M170 0 C170 23.41, 170 46.83, 170 80 M170 0 C170 21.65, 170 43.3, 170 80 M170 80 C133.58 80, 97.17 80, 0 80 M170 80 C108.13 80, 46.27 80, 0 80 M0 80 C0 51, 0 22, 0 0 M0 80 C0 54.68, 0 29.37, 0 0" stroke="#1971c2" stroke-width="2" fill="none"/></g><g transform="translate(1289.757261320494 328.3905594188792) rotate(0 57.929931640625 13.5)"><text x="57.929931640625" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Final Review</text></g><g stroke-linecap="round" transform="translate(1512.687192961119 301.8905594188792) rotate(0 84.99999999999989 40)"><path d="M0 0 L170 0 L170 80 L0 80" stroke="none" stroke-width="0" fill="#fff4e6"/><path d="M0 0 C66.42 0, 132.83 0, 170 0 M0 0 C57.35 0, 114.7 0, 170 0 M170 0 C170 28.36, 170 56.72, 170 80 M170 0 C170 30.17, 170 60.35, 170 80 M170 80 C132.77 80, 95.54 80, 0 80 M170 80 C117.17 80, 64.33 80, 0 80 M0 80 C0 51.63, 0 23.25, 0 0 M0 80 C0 59.69, 0 39.37, 0 0" stroke="#e8590c" stroke-width="2" fill="none"/></g><g transform="translate(1564.107229277037 328.3905594188792) rotate(0 33.57996368408192 13.5)"><text x="33.57996368408203" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Squash</text></g><g stroke-linecap="round"><g transform="translate(441.94598202361897 341.8905594188792) rotate(0 29.5 0)"><path d="M0 0 C18.9 0, 37.79 0, 59 0 M0 0 C18.89 0, 37.78 0, 59 0" stroke="#495057" stroke-width="2" fill="none"/></g><g transform="translate(441.94598202361897 341.8905594188792) rotate(0 29.5 0)"><path d="M59 0 L45.41 6.34 L45.41 -6.34 L59 0" stroke="none" stroke-width="0" fill="#495057" fill-rule="evenodd"/><path d="M59 0 C54.65 2.03, 50.29 4.06, 45.41 6.34 M59 0 C54.65 2.03, 50.29 4.06, 45.41 6.34 M45.41 6.34 C45.41 1.85, 45.41 -2.64, 45.41 -6.34 M45.41 6.34 C45.41 3.01, 45.41 -0.32, 45.41 -6.34 M45.41 -6.34 C48.17 -5.05, 50.92 -3.77, 59 0 M45.41 -6.34 C49.58 -4.39, 53.75 -2.45, 59 0 M59 0 C59 0, 59 0, 59 0 M59 0 C59 0, 59 0, 59 0" stroke="#495057" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(691.9459820236189 341.7657960210282) rotate(0 29.5 0.03502764805136849)"><path d="M0 0 C18.67 0.02, 37.34 0.04, 59 0.07 M0 0 C15.34 0.02, 30.69 0.04, 59 0.07" stroke="#495057" stroke-width="2" fill="none"/></g><g transform="translate(691.9459820236189 341.7657960210282) rotate(0 29.5 0.03502764805136849)"><path d="M59 0.07 L45.4 6.39 L45.41 -6.29 L59 0.07" stroke="none" stroke-width="0" fill="#495057" fill-rule="evenodd"/><path d="M59 0.07 C54.7 2.07, 50.39 4.07, 45.4 6.39 M59 0.07 C55.46 1.71, 51.93 3.36, 45.4 6.39 M45.4 6.39 C45.4 3.07, 45.41 -0.24, 45.41 -6.29 M45.4 6.39 C45.4 2.31, 45.41 -1.78, 45.41 -6.29 M45.41 -6.29 C49.02 -4.6, 52.62 -2.91, 59 0.07 M45.41 -6.29 C49.98 -4.15, 54.55 -2.01, 59 0.07 M59 0.07 C59 0.07, 59 0.07, 59 0.07 M59 0.07 C59 0.07, 59 0.07, 59 0.07" stroke="#495057" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(941.9459820236189 341.8905594188792) rotate(0 29.5 0)"><path d="M0 0 C15.72 0, 31.45 0, 59 0 M0 0 C12.59 0, 25.18 0, 59 0" stroke="#495057" stroke-width="2" fill="none"/></g><g transform="translate(941.9459820236189 341.8905594188792) rotate(0 29.5 0)"><path d="M59 0 L45.41 6.34 L45.41 -6.34 L59 0" stroke="none" stroke-width="0" fill="#495057" fill-rule="evenodd"/><path d="M59 0 C55.38 1.69, 51.75 3.38, 45.41 6.34 M59 0 C56.1 1.35, 53.2 2.71, 45.41 6.34 M45.41 6.34 C45.41 2.69, 45.41 -0.95, 45.41 -6.34 M45.41 6.34 C45.41 2.45, 45.41 -1.45, 45.41 -6.34 M45.41 -6.34 C48.51 -4.89, 51.62 -3.44, 59 0 M45.41 -6.34 C49.55 -4.41, 53.68 -2.48, 59 0 M59 0 C59 0, 59 0, 59 0 M59 0 C59 0, 59 0, 59 0" stroke="#495057" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(1192.1871929611189 341.8905594188792) rotate(0 29 0)"><path d="M0 0 C20.51 0, 41.01 0, 58 0 M0 0 C13.71 0, 27.42 0, 58 0" stroke="#495057" stroke-width="2" fill="none"/></g><g transform="translate(1192.1871929611189 341.8905594188792) rotate(0 29 0)"><path d="M58 0 L44.41 6.34 L44.41 -6.34 L58 0" stroke="none" stroke-width="0" fill="#495057" fill-rule="evenodd"/><path d="M58 0 C53.19 2.24, 48.39 4.48, 44.41 6.34 M58 0 C54.79 1.5, 51.57 3, 44.41 6.34 M44.41 6.34 C44.41 3.54, 44.41 0.74, 44.41 -6.34 M44.41 6.34 C44.41 2.1, 44.41 -2.14, 44.41 -6.34 M44.41 -6.34 C48.22 -4.56, 52.03 -2.78, 58 0 M44.41 -6.34 C49.13 -4.13, 53.86 -1.93, 58 0 M58 0 C58 0, 58 0, 58 0 M58 0 C58 0, 58 0, 58 0" stroke="#495057" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(1442.187192961119 341.8905594188792) rotate(0 29 0)"><path d="M0 0 C23.02 0, 46.04 0, 58 0 M0 0 C22.86 0, 45.73 0, 58 0" stroke="#495057" stroke-width="2" fill="none"/></g><g transform="translate(1442.187192961119 341.8905594188792) rotate(0 29 0)"><path d="M58 0 L44.41 6.34 L44.41 -6.34 L58 0" stroke="none" stroke-width="0" fill="#495057" fill-rule="evenodd"/><path d="M58 0 C52.6 2.52, 47.21 5.03, 44.41 6.34 M58 0 C52.64 2.5, 47.28 5, 44.41 6.34 M44.41 6.34 C44.41 2.88, 44.41 -0.58, 44.41 -6.34 M44.41 6.34 C44.41 1.34, 44.41 -3.67, 44.41 -6.34 M44.41 -6.34 C48.65 -4.36, 52.9 -2.38, 58 0 M44.41 -6.34 C47.71 -4.8, 51.01 -3.26, 58 0 M58 0 C58 0, 58 0, 58 0 M58 0 C58 0, 58 0, 58 0" stroke="#495057" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(1105.9713525935056 301.24160820093687) rotate(0 -257.13862305703515 -25.36790720352883)"><path d="M0 0 C0.16 -15.45, 0.82 -29.61, 0.46 -50.74 M0.46 -50.74 C-203.45 -49.33, -406.37 -49.36, -514.73 -50.74 M-514.73 -50.74 C-514.48 -35.22, -513.61 -21.1, -514.73 -4.58" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="8 10"/></g><g transform="translate(1105.9713525935056 301.24160820093687) rotate(0 -257.13862305703515 -25.36790720352883)"><path d="M-513.93 -6.29 L-519.84 -18.63 L-506.52 -18.98 L-514.46 -6.35" stroke="none" stroke-width="0" fill="#1e1e1e" fill-rule="evenodd"/><path d="M-514.73 -4.58 C-516.24 -9.61, -517.43 -13.62, -520.55 -18.4 M-520.55 -18.4 C-516.46 -18.16, -510.8 -18.02, -507.88 -17.92 M-507.88 -17.92 C-509.91 -12.89, -511.4 -8.95, -514.73 -4.58 M-514.73 -4.58 C-514.73 -4.58, -514.73 -4.58, -514.73 -4.58" stroke="#1e1e1e" stroke-width="2.5" fill="none"/></g></g><mask/><g stroke-linecap="round" transform="translate(764.0054128271904 439.53467214209365) rotate(0 85 40)"><path d="M0 0 L170 0 L170 80 L0 80" stroke="none" stroke-width="0" fill="#f8f0fc"/><path d="M0 0 C36.42 0, 72.83 0, 170 0 M0 0 C61.87 0, 123.73 0, 170 0 M170 0 C170 29, 170 58, 170 80 M170 0 C170 25.32, 170 50.63, 170 80 M170 80 C112.9 80, 55.8 80, 0 80 M170 80 C132.74 80, 95.48 80, 0 80 M0 80 C0 54.98, 0 29.96, 0 0 M0 80 C0 53.73, 0 27.46, 0 0" stroke="#9c36b5" stroke-width="2" fill="none"/></g><g transform="translate(814.3154409033623 466.03467214209365) rotate(0 34.689971923828125 13.5)"><text x="34.689971923828125" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Consult</text></g><g stroke-linecap="round" transform="translate(1013.2731304611189 441.5018875438792) rotate(0 85 40)"><path d="M0 0 L170 0 L170 80 L0 80" stroke="none" stroke-width="0" fill="#f8f0fc"/><path d="M0 0 C34.51 0, 69.02 0, 170 0 M0 0 C52.19 0, 104.37 0, 170 0 M170 0 C170 27.18, 170 54.36, 170 80 M170 0 C170 16.74, 170 33.49, 170 80 M170 80 C116.69 80, 63.38 80, 0 80 M170 80 C128.54 80, 87.08 80, 0 80 M0 80 C0 61.19, 0 42.38, 0 0 M0 80 C0 50.47, 0 20.94, 0 0" stroke="#9c36b5" stroke-width="2" fill="none"/></g><g transform="translate(1065.1331615890485 468.0018875438792) rotate(0 33.13996887207031 13.5)"><text x="33.13996887207031" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Review</text></g><g stroke-linecap="round" transform="translate(1263.102232023619 441.3544266063792) rotate(0 85 40)"><path d="M0 0 L170 0 L170 80 L0 80" stroke="none" stroke-width="0" fill="#f8f0fc"/><path d="M0 0 C38.88 0, 77.76 0, 170 0 M0 0 C51.77 0, 103.54 0, 170 0 M170 0 C170 21.59, 170 43.18, 170 80 M170 0 C170 23.08, 170 46.17, 170 80 M170 80 C127.7 80, 85.4 80, 0 80 M170 80 C105.5 80, 41 80, 0 80 M0 80 C0 52.33, 0 24.66, 0 0 M0 80 C0 55.98, 0 31.96, 0 0" stroke="#9c36b5" stroke-width="2" fill="none"/></g><g transform="translate(1314.9622631515488 467.8544266063792) rotate(0 33.13996887207031 13.5)"><text x="33.13996887207031" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Review</text></g><g stroke-linecap="round"><g transform="translate(821.8011252527858 384.9074865022129) rotate(0 -10.062174479166742 24.93419828869048)"><path d="M0.34 0.02 C-2.97 4.08, -19.12 16.29, -19.82 24.55 C-20.53 32.8, -6.44 45.32, -3.88 49.55" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="8 10"/></g><g transform="translate(821.8011252527858 384.9074865022129) rotate(0 -10.062174479166742 24.93419828869048)"><path d="M-4.68 50.51 L-17.29 43.89 L-7.77 34.52 L-4.53 49.85" stroke="none" stroke-width="0" fill="#1e1e1e" fill-rule="evenodd"/><path d="M-3.88 49.55 C-8.09 47.99, -11.99 45.86, -17.42 43.1 M-17.42 43.1 C-15.21 40.84, -12.54 38.6, -7.64 35.03 M-7.64 35.03 C-6.51 40.48, -5.54 45.01, -3.88 49.55 M-3.88 49.55 C-3.88 49.55, -3.88 49.55, -3.88 49.55" stroke="#1e1e1e" stroke-width="2.5" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(877.3578282503618 437.32861745459365) rotate(0 10.902312563711916 -25.476190476190595)"><path d="M0.66 0.57 C4.24 -3.94, 21.69 -18.5, 22.28 -27.05 C22.87 -35.61, 7.15 -46.68, 4.2 -50.76" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="8 10"/></g><g transform="translate(877.3578282503618 437.32861745459365) rotate(0 10.902312563711916 -25.476190476190595)"><path d="M4.46 -49.17 L17.95 -46.71 L8.02 -36.18 L5.93 -50.19" stroke="none" stroke-width="0" fill="#1e1e1e" fill-rule="evenodd"/><path d="M4.2 -50.76 C9.99 -48.4, 13.51 -48.11, 18.21 -45.68 M18.21 -45.68 C15.58 -44.04, 13.06 -41.15, 9.32 -36.76 M9.32 -36.76 C6.83 -41.23, 4.58 -46.12, 4.2 -50.76 M4.2 -50.76 C4.2 -50.76, 4.2 -50.76, 4.2 -50.76" stroke="#1e1e1e" stroke-width="2.5" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(1071.1701842067077 386.325152451304) rotate(0 -10.062174479166629 25.09602864583337)"><path d="M0.48 -0.68 C-3.11 3.3, -20.11 16.09, -20.89 24.48 C-21.67 32.87, -7.08 45.54, -4.21 49.64" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="8 10"/></g><g transform="translate(1071.1701842067077 386.325152451304) rotate(0 -10.062174479166629 25.09602864583337)"><path d="M-4.47 48.61 L-19.27 44.26 L-6.76 35.83 L-3.29 50.49" stroke="none" stroke-width="0" fill="#1e1e1e" fill-rule="evenodd"/><path d="M-4.21 49.64 C-9.97 46.62, -13.75 45.01, -17.97 43.67 M-17.97 43.67 C-15.07 40.54, -12.71 39.34, -8.49 35.26 M-8.49 35.26 C-8.31 40.55, -6.63 45.08, -4.21 49.64 M-4.21 49.64 C-4.21 49.64, -4.21 49.64, -4.21 49.64" stroke="#1e1e1e" stroke-width="2.5" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(1126.6981789983745 439.0699441179705) rotate(0 10.916666666666629 -25.63802083333337)"><path d="M-0.77 0.2 C2.73 -4.23, 20.48 -18.48, 21.47 -27.25 C22.47 -36.01, 7.86 -48.19, 5.2 -52.36" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="8 10"/></g><g transform="translate(1126.6981789983745 439.0699441179705) rotate(0 10.916666666666629 -25.63802083333337)"><path d="M3.9 -51.78 L20.53 -45.74 L10.22 -37.19 L3.93 -50.98" stroke="none" stroke-width="0" fill="#1e1e1e" fill-rule="evenodd"/><path d="M5.2 -52.36 C10.03 -50.67, 13.72 -47.91, 18.81 -46.31 M18.81 -46.31 C17.3 -44.8, 15.72 -43.59, 9.3 -38.04 M9.3 -38.04 C6.94 -43.3, 7.32 -46.83, 5.2 -52.36 M5.2 -52.36 C5.2 -52.36, 5.2 -52.36, 5.2 -52.36" stroke="#1e1e1e" stroke-width="2.5" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(1319.601173790041 385.524371201304) rotate(0 -10.062174479166629 25.09602864583337)"><path d="M-0.36 -0.55 C-3.55 3.28, -19.43 14.91, -19.93 23.19 C-20.43 31.48, -6.12 44.69, -3.36 49.17" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="8 10"/></g><g transform="translate(1319.601173790041 385.524371201304) rotate(0 -10.062174479166629 25.09602864583337)"><path d="M-1.64 49.73 L-15.94 43.46 L-8.28 36 L-2.56 49.44" stroke="none" stroke-width="0" fill="#1e1e1e" fill-rule="evenodd"/><path d="M-3.36 49.17 C-7.25 47.82, -11.1 46.63, -16.85 42.61 M-16.85 42.61 C-13.91 40.23, -12.49 38.07, -7.01 34.62 M-7.01 34.62 C-5.56 39.2, -5.78 42.18, -3.36 49.17 M-3.36 49.17 C-3.36 49.17, -3.36 49.17, -3.36 49.17" stroke="#1e1e1e" stroke-width="2.5" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(1375.129168581708 438.2691628679705) rotate(0 10.916666666666629 -25.63802083333337)"><path d="M0.2 -1.09 C3.98 -5.62, 21.45 -19.33, 22.32 -27.72 C23.19 -36.11, 8.18 -47.38, 5.43 -51.41" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="8 10"/></g><g transform="translate(1375.129168581708 438.2691628679705) rotate(0 10.916666666666629 -25.63802083333337)"><path d="M6.35 -50.56 L18.02 -44.55 L10.94 -37.01 L4.15 -51.41" stroke="none" stroke-width="0" fill="#1e1e1e" fill-rule="evenodd"/><path d="M5.43 -51.41 C7.79 -49.36, 11.61 -47.94, 19.28 -45.93 M19.28 -45.93 C16.87 -44.6, 14.07 -42.01, 10.14 -37.28 M10.14 -37.28 C8.08 -41.98, 9.18 -44.12, 5.43 -51.41 M5.43 -51.41 C5.43 -51.41, 5.43 -51.41, 5.43 -51.41" stroke="#1e1e1e" stroke-width="2.5" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(196.5947372939562 342.6703833276098) rotate(0 29.25 0)"><path d="M0 0 C17.64 0, 35.28 0, 58.5 0 M0 0 C22.59 0, 45.19 0, 58.5 0" stroke="#495057" stroke-width="2" fill="none"/></g><g transform="translate(196.5947372939562 342.6703833276098) rotate(0 29.25 0)"><path d="M58.5 0 L44.91 6.34 L44.91 -6.34 L58.5 0" stroke="none" stroke-width="0" fill="#495057" fill-rule="evenodd"/><path d="M58.5 0 C54.4 1.91, 50.3 3.82, 44.91 6.34 M58.5 0 C53.25 2.45, 48 4.9, 44.91 6.34 M44.91 6.34 C44.91 3.68, 44.91 1.02, 44.91 -6.34 M44.91 6.34 C44.91 3.14, 44.91 -0.06, 44.91 -6.34 M44.91 -6.34 C50.13 -3.9, 55.36 -1.46, 58.5 0 M44.91 -6.34 C48.63 -4.6, 52.35 -2.87, 58.5 0 M58.5 0 C58.5 0, 58.5 0, 58.5 0 M58.5 0 C58.5 0, 58.5 0, 58.5 0" stroke="#495057" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round" transform="translate(262.20034555288464 438.98351854308146) rotate(0 85 40)"><path d="M0 0 L170 0 L170 80 L0 80" stroke="none" stroke-width="0" fill="#f8f0fc"/><path d="M0 0 C59.58 0, 119.15 0, 170 0 M0 0 C43.28 0, 86.56 0, 170 0 M170 0 C170 18.75, 170 37.49, 170 80 M170 0 C170 23.47, 170 46.94, 170 80 M170 80 C128.04 80, 86.08 80, 0 80 M170 80 C130.51 80, 91.03 80, 0 80 M0 80 C0 52.15, 0 24.3, 0 0 M0 80 C0 60.03, 0 40.05, 0 0" stroke="#9c36b5" stroke-width="2" fill="none"/></g><g transform="translate(314.06037668081433 465.48351854308146) rotate(0 33.13996887207031 13.5)"><text x="33.13996887207031" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Review</text></g><g stroke-linecap="round"><g transform="translate(320.49605797848005 384.8563329032007) rotate(0 -10.312174479166742 24.68419828869048)"><path d="M-0.5 -0.25 C-3.98 3.6, -20.17 15.03, -20.76 23.26 C-21.36 31.49, -6.8 44.77, -4.07 49.1" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="8 10"/></g><g transform="translate(320.49605797848005 384.8563329032007) rotate(0 -10.312174479166742 24.68419828869048)"><path d="M-3.48 49.66 L-18.55 42 L-7.62 34.94 L-4.87 49.56" stroke="none" stroke-width="0" fill="#1e1e1e" fill-rule="evenodd"/><path d="M-4.07 49.1 C-8.81 46.77, -13.57 45.6, -17.63 42.68 M-17.63 42.68 C-15.61 40.77, -12.14 38.35, -7.87 34.59 M-7.87 34.59 C-6.45 40.69, -5.69 45, -4.07 49.1 M-4.07 49.1 C-4.07 49.1, -4.07 49.1, -4.07 49.1" stroke="#1e1e1e" stroke-width="2.5" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(375.0527609760561 436.27746385558146) rotate(0 11.152312563711916 -25.226190476190595)"><path d="M-0.31 -1.14 C3.78 -5.46, 22.42 -18.18, 23.45 -26.45 C24.49 -34.72, 9.03 -46.8, 5.9 -50.77" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="8 10"/></g><g transform="translate(375.0527609760561 436.27746385558146) rotate(0 11.152312563711916 -25.226190476190595)"><path d="M4.07 -52.12 L20.37 -44.87 L9.32 -35.83 L5.08 -51.14" stroke="none" stroke-width="0" fill="#1e1e1e" fill-rule="evenodd"/><path d="M5.9 -50.77 C7.39 -48.22, 11.02 -48.02, 19.87 -45.58 M19.87 -45.58 C18.55 -43.7, 15.89 -40.14, 10.9 -36.74 M10.9 -36.74 C7.51 -43.3, 6.21 -49.02, 5.9 -50.77 M5.9 -50.77 C5.9 -50.77, 5.9 -50.77, 5.9 -50.77" stroke="#1e1e1e" stroke-width="2.5" fill="none"/></g></g><mask/><g stroke-linecap="round" transform="translate(60.0 279.7176124656595) rotate(0 57.3193359375 77.412109375)"><path d="M0 0 L114.64 0 L114.64 154.82 L0 154.82" stroke="none" stroke-width="0" fill="#ffffff"/><path d="M0 0 C44.32 0, 88.63 0, 114.64 0 M0 0 C42.97 0, 85.94 0, 114.64 0 M114.64 0 C114.64 37.65, 114.64 75.3, 114.64 154.82 M114.64 0 C114.64 35.17, 114.64 70.35, 114.64 154.82 M114.64 154.82 C78.03 154.82, 41.43 154.82, 0 154.82 M114.64 154.82 C91.16 154.82, 67.68 154.82, 0 154.82 M0 154.82 C0 104.58, 0 54.34, 0 0 M0 154.82 C0 114.99, 0 75.15, 0 0" stroke="#1e1e1e" stroke-width="2" fill="none"/></g><g stroke-linecap="round" transform="translate(65.69945484203299 272.8620149381867) rotate(0 57.3193359375 77.412109375)"><path d="M0 0 L114.64 0 L114.64 154.82 L0 154.82" stroke="none" stroke-width="0" fill="#ffffff"/><path d="M0 0 C42.04 0, 84.08 0, 114.64 0 M0 0 C26.56 0, 53.13 0, 114.64 0 M114.64 0 C114.64 45.34, 114.64 90.67, 114.64 154.82 M114.64 0 C114.64 61.43, 114.64 122.86, 114.64 154.82 M114.64 154.82 C76.05 154.82, 37.45 154.82, 0 154.82 M114.64 154.82 C74.88 154.82, 35.12 154.82, 0 154.82 M0 154.82 C0 102.3, 0 49.77, 0 0 M0 154.82 C0 114.72, 0 74.61, 0 0" stroke="#1e1e1e" stroke-width="2" fill="none"/></g><g stroke-linecap="round" transform="translate(72.9987980769231 266.25772664835165) rotate(0 57.3193359375 77.412109375)"><path d="M0 0 L114.64 0 L114.64 154.82 L0 154.82" stroke="none" stroke-width="0" fill="#ffffff"/><path d="M0 0 C45.21 0, 90.42 0, 114.64 0 M0 0 C43.7 0, 87.4 0, 114.64 0 M114.64 0 C114.64 50.88, 114.64 101.75, 114.64 154.82 M114.64 0 C114.64 36.13, 114.64 72.26, 114.64 154.82 M114.64 154.82 C86 154.82, 57.37 154.82, 0 154.82 M114.64 154.82 C70.06 154.82, 25.47 154.82, 0 154.82 M0 154.82 C0 108.8, 0 62.78, 0 0 M0 154.82 C0 123.11, 0 91.4, 0 0" stroke="#1e1e1e" stroke-width="2" fill="none"/></g><g transform="translate(84.64819688063403 330.16983602335165) rotate(0 45.66993713378906 13.5)"><text x="45.66993713378906" y="20.08" font-family="Nunito, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Draft plan</text></g><g stroke-linecap="round" transform="translate(865.0207224416213 60.0) rotate(0 21.26395089285711 21.26395089285711)"><path d="M10.63 0 C18.12 0.24, 25.5 -3.17, 31.9 0 C35.43 1.36, 44.97 6.75, 42.53 10.63 C44.08 15.5, 40.58 25.74, 42.53 31.9 C42.67 42.04, 38.4 44.12, 31.9 42.53 C28.32 44.33, 19.69 42.34, 10.63 42.53 C0.32 41.86, -0.24 37.54, 0 31.9 C3.09 25.1, -0.23 21.45, 0 10.63 C1.16 0.09, 5.48 -2.49, 10.63 0" stroke="none" stroke-width="0" fill="#ebfbee"/><path d="M10.63 0 C20.62 -0.43, 26.56 1.5, 31.9 0 M10.63 0 C18.93 -0.52, 28.03 -0.51, 31.9 0 M31.9 0 C39.09 1.11, 42.62 3.37, 42.53 10.63 M31.9 0 C37.01 -0.77, 44.77 2.55, 42.53 10.63 M42.53 10.63 C42.25 18.45, 43.09 22.01, 42.53 31.9 M42.53 10.63 C42.79 16.74, 41.85 23.3, 42.53 31.9 M42.53 31.9 C42.94 37.17, 40.81 42.73, 31.9 42.53 M42.53 31.9 C44.62 39.47, 37.92 41.6, 31.9 42.53 M31.9 42.53 C23.88 40.86, 17.47 44.21, 10.63 42.53 M31.9 42.53 C24.7 41.99, 19.54 42.68, 10.63 42.53 M10.63 42.53 C4.9 42.47, 0.86 40.46, 0 31.9 M10.63 42.53 C2.64 42.72, -2.11 39.55, 0 31.9 M0 31.9 C-0.97 25.66, 0.76 18.75, 0 10.63 M0 31.9 C0.49 25.45, 0.33 17.65, 0 10.63 M0 10.63 C0.35 2.69, 1.7 1.35, 10.63 0 M0 10.63 C1.74 3.11, 4.65 -0.13, 10.63 0" stroke="#2f9e44" stroke-width="2" fill="none"/></g><g transform="translate(927.0519724416213 63.66249999999991) rotate(0 49.19597625732422 18.899999999999977)"><text x="0" y="28.112000000000002" font-family="Nunito, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Planner</text></g><g stroke-linecap="round" transform="translate(865.4586747557255 117.35435267857133) rotate(0 21.26395089285711 21.26395089285711)"><path d="M10.63 0 C15.06 1.38, 25.47 -1.68, 31.9 0 C35.8 -1.09, 45.94 1.77, 42.53 10.63 C40.92 19.78, 39.62 26.29, 42.53 31.9 C42.97 38.85, 35.86 45.03, 31.9 42.53 C23.98 42.85, 21.98 44.26, 10.63 42.53 C1.05 41.97, -1.55 37.37, 0 31.9 C1.06 22.3, 0.33 16.22, 0 10.63 C2.04 5.91, 3.73 0.05, 10.63 0" stroke="none" stroke-width="0" fill="#e7f5ff"/><path d="M10.63 0 C15.74 1.42, 23.95 0.46, 31.9 0 M10.63 0 C15.66 -0.4, 20.45 0.5, 31.9 0 M31.9 0 C38.15 -0.81, 43.25 3.88, 42.53 10.63 M31.9 0 C39.57 -0.57, 42.57 4.98, 42.53 10.63 M42.53 10.63 C41.79 16.74, 41.58 25.26, 42.53 31.9 M42.53 10.63 C42.55 17.6, 41.94 25, 42.53 31.9 M42.53 31.9 C40.66 39.96, 37.08 42.38, 31.9 42.53 M42.53 31.9 C43.63 41.16, 40.55 41.14, 31.9 42.53 M31.9 42.53 C21.44 42.28, 16.31 43.54, 10.63 42.53 M31.9 42.53 C27.39 42.67, 22.41 42.28, 10.63 42.53 M10.63 42.53 C5.35 41.71, -0.78 38.03, 0 31.9 M10.63 42.53 C2.61 42.91, -1.44 40.81, 0 31.9 M0 31.9 C-0.27 25.06, 0.45 15.49, 0 10.63 M0 31.9 C-0.12 25.02, -0.49 15.28, 0 10.63 M0 10.63 C-0.86 3.94, 3.36 1.79, 10.63 0 M0 10.63 C-2.23 1.91, 4.33 2.09, 10.63 0" stroke="#1971c2" stroke-width="2" fill="none"/></g><g transform="translate(927.2018388182255 121.01685267857124) rotate(0 37.603981018066406 18.899999999999977)"><text x="0" y="28.112000000000002" font-family="Nunito, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Coder</text></g><g stroke-linecap="round" transform="translate(865.3347908271539 175.30412946428555) rotate(0 21.26395089285711 23.900000000000034)"><path d="M10.63 0 C13.98 2.61, 22.61 -2.06, 31.9 0 C38.23 0.74, 43.59 3.62, 42.53 10.63 C45.57 14.92, 45.08 24.25, 42.53 37.17 C40.43 45.27, 42.34 47.56, 31.9 47.8 C25.29 47.75, 18.47 46.41, 10.63 47.8 C5.31 49.31, 2.31 45.9, 0 37.17 C-1.23 31.33, -1.61 25.12, 0 10.63 C1.19 3.63, 6.63 -1.01, 10.63 0" stroke="none" stroke-width="0" fill="#f8f0fc"/><path d="M10.63 0 C19.85 -1.32, 28.15 1.1, 31.9 0 M10.63 0 C15.6 0.51, 21.71 0, 31.9 0 M31.9 0 C39.36 1.65, 40.78 4.59, 42.53 10.63 M31.9 0 C37.9 1.81, 44.53 2.01, 42.53 10.63 M42.53 10.63 C44.27 20.29, 43.57 28.64, 42.53 37.17 M42.53 10.63 C42.61 19.92, 43.2 29.54, 42.53 37.17 M42.53 37.17 C41.81 42.68, 37.38 47.58, 31.9 47.8 M42.53 37.17 C40.75 44.93, 40.43 48.56, 31.9 47.8 M31.9 47.8 C24.76 49.47, 14.86 47.7, 10.63 47.8 M31.9 47.8 C23.36 48.21, 15.34 47.63, 10.63 47.8 M10.63 47.8 C1.83 49.75, 0.43 45.46, 0 37.17 M10.63 47.8 C4.98 48.88, -1.1 42.72, 0 37.17 M0 37.17 C0.72 30.31, 0.04 21.04, 0 10.63 M0 37.17 C0.79 28.14, 0.23 17.65, 0 10.63 M0 10.63 C-1.09 4.68, 4.92 -1.77, 10.63 0 M0 10.63 C0.55 3.52, 2.11 1.02, 10.63 0" stroke="#6741d9" stroke-width="2" fill="none"/></g><g transform="translate(927.3660408271539 178.96662946428592) rotate(0 58.869972229003906 18.899999999999977)"><text x="0" y="28.112000000000002" font-family="Nunito, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Reviewer</text></g><g transform="translate(610.2606563358518 115.59231627747204) rotate(0 116.1359634399414 24.30000000000001)"><text x="0" y="36.144000000000005" font-family="Nunito, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Three models:</text></g></svg>
@@ -1,7 +1,9 @@
1
1
  # Automation contract
2
2
 
3
3
  The machine-facing contract for driving neal from scripts, CI, and benchmark
4
- harnesses.
4
+ harnesses. [neal-swebench](https://github.com/navels/neal-swebench) is a working
5
+ example: a harness that drives neal headless through this contract to benchmark
6
+ role pairings on SWE-bench Pro.
5
7
 
6
8
  Noninteractive harnesses should run `neal execute <plan.md>` for an already
7
9
  accepted executable plan, or `neal run <plan.md>` when neal should refine and
package/docs/compat.md CHANGED
@@ -3,7 +3,7 @@
3
3
  `neal compat` answers one question per model: **can this OpenAI-compatible model
4
4
  drive neal's loop at all**, as a coder, a reviewer, or a planner? It is a
5
5
  **compatibility smoke test, not a performance benchmark**. There is no
6
- resolve-rate, no score, no ranking, and no real SWE-bench repo involved. The
6
+ resolve-rate, no score, and no ranking. The
7
7
  fixtures are deliberately trivial. Any working agent should pass them. A failure
8
8
  therefore means something is **fundamentally wrong** with the model's ability to
9
9
  operate neal's contract. It does not mean a task was hard.
@@ -17,8 +17,8 @@ external benchmark assets, no dataset download, no remote runner.
17
17
  - **Measured:** whether the model can follow neal's contract end to end (valid
18
18
  tool calls + structured output, no max-step loops, no unresolved operator
19
19
  blocks, a clean finalization) **and** solve a trivial bundled fixture.
20
- - **Not measured:** skill. No resolve-rate, no scores, no rankings, no real
21
- SWE-bench repos, trivial fixtures only.
20
+ - **Not measured:** skill. No resolve-rate, no scores, no rankings, trivial
21
+ fixtures only.
22
22
  - **Outcome:** a binary **PASS / FAIL per (model, role)**, with a structural
23
23
  failure mode recorded for every FAIL.
24
24
 
@@ -10,8 +10,8 @@
10
10
 
11
11
  ## How to read this
12
12
 
13
- - Scored under the **discrimination criterion** ([#49](https://github.com/navels/neal/issues/49),
14
- `schemaVersion: 2`): a reviewer PASSes a fixture iff it raises at least one blocking
13
+ - Scored under the **discrimination criterion** (`schemaVersion: 2`): a reviewer
14
+ PASSes a fixture iff it raises at least one blocking
15
15
  finding on the broken diff **and** strictly fewer on the good diff. Severity
16
16
  calibration is not graded. Earlier sweeps (2026-06-18) required zero blocking
17
17
  findings on the good diff and are not comparable.
@@ -163,8 +163,7 @@ neal compat --model <slug> --role all --reference openai-codex --json
163
163
  ```
164
164
 
165
165
  `openai-codex` (gpt-5.5) is the authoritative reference. No OpenRouter model has
166
- validated as a drop-in reference (two tried 2026-06-18, both failed. See the
167
- 2026-06-18 revision of this file). Throttle to about three concurrent invocations
166
+ validated as a drop-in reference. Throttle to about three concurrent invocations
168
167
  for codex capacity.
169
168
 
170
169
  Paid slugs only, never `:free`. Re-run when a slug's backing model version changes.
package/docs/release.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Release process
2
2
 
3
- Releases are manual, versioned npm operations. Normal CI only verifies pushes
4
- and pull requests. The GitHub Actions `Publish` workflow handles publishing and
5
- runs only through `workflow_dispatch`.
3
+ Releases start from the manual GitHub Actions `Publish` workflow. The workflow
4
+ checks and stages the npm package, waits for a maintainer's npm approval, then
5
+ creates the matching GitHub tag and release.
6
6
 
7
7
  ## Versioning policy
8
8
 
@@ -18,9 +18,9 @@ exit codes, or durable run artifacts require a major version.
18
18
 
19
19
  Examples:
20
20
 
21
- - Patch: `0.1.1` fixes a defect or compatibility issue without intentionally
21
+ - Patch: `0.3.2` fixes a defect or compatibility issue without intentionally
22
22
  changing documented behavior.
23
- - Minor before `1.0.0`: `0.2.0` adds a feature or meaningful behavior change
23
+ - Minor before `1.0.0`: `0.4.0` adds a feature or meaningful behavior change
24
24
  while the public contract is still settling.
25
25
  - Major: `1.0.0` establishes the stable public contract. Later breaking
26
26
  contract changes require `2.0.0`, `3.0.0`, and so on.
@@ -40,105 +40,86 @@ published CLI package:
40
40
 
41
41
  An SDK update should land as a normal dependency pull request that updates both
42
42
  `package.json` and `pnpm-lock.yaml`, runs normal CI, and records any provider
43
- compatibility findings. The resulting neal release should match the user-facing
44
- impact: use a patch release for a compatibility fix that preserves documented
45
- behavior, a minor release for behavior changes before `1.0.0`, and a major
46
- release after `1.0.0` if a documented public contract breaks.
43
+ compatibility findings. Match the neal release to the user-facing impact: use a
44
+ patch release for a compatibility fix that preserves documented behavior, a
45
+ minor release for behavior changes before `1.0.0`, and a major release after
46
+ `1.0.0` if a documented public contract breaks.
47
47
 
48
- ## Local release readiness
48
+ ## Prepare a release
49
49
 
50
- Prepare a release with a normal pull request that changes `package.json.version`
51
- to the intended exact SemVer version:
50
+ Bump `package.json.version` and add a nonempty `## [<version>]` section to
51
+ `CHANGELOG.md` in a normal release-preparation pull request:
52
52
 
53
53
  ```sh
54
54
  pnpm version <version> --no-git-tag-version
55
55
  ```
56
56
 
57
- Run the local release-readiness gates from the repository root:
57
+ Run the release gates from the repository root:
58
58
 
59
59
  ```sh
60
60
  RELEASE_VERSION=<version> RELEASE_DRY_RUN=true pnpm run validate:release
61
61
  pnpm typecheck
62
62
  pnpm test
63
+ pnpm lint
63
64
  pnpm build
64
65
  node scripts/verify-package.mjs
65
66
  ```
66
67
 
67
- `validate:release` checks that the workflow input version matches
68
- `package.json.version`, validates required package metadata, checks npm version
69
- availability, and checks remote `v<version>` tag availability when an `origin`
70
- remote is configured. Package verification confirms the built CLI and packed
71
- tarball.
68
+ `validate:release` checks the package version, required metadata, direct SDK
69
+ pins, changelog section, npm version availability, and remote tag availability.
72
70
 
73
- ## Manual publish workflow
71
+ ## Publish
74
72
 
75
- After the release-preparation pull request is merged and normal CI passes, run
76
- the `Publish` workflow manually from `main` with:
73
+ After the release-preparation pull request is merged and normal CI passes, open
74
+ **Actions > Publish > Run workflow** on `main`.
77
75
 
78
- - `version`: the exact `package.json.version`, without a leading `v`
79
- - `dry_run`: `true`
76
+ Run it first with the exact version and `dry_run: true`. This runs every gate
77
+ and `npm publish --dry-run` without changing npm or GitHub.
80
78
 
81
- The workflow is guarded to `refs/heads/main`, uses the `npm-publish`
82
- environment, grants `contents: read` and `id-token: write`, installs with
83
- `pnpm install --frozen-lockfile`, and runs these gates before any publish step:
79
+ Run it again with `dry_run: false` after reviewing the dry run. The workflow:
84
80
 
85
- ```sh
86
- RELEASE_VERSION=<version> RELEASE_DRY_RUN=<dry_run> pnpm run validate:release
87
- pnpm typecheck
88
- pnpm test
89
- pnpm build
90
- node scripts/verify-package.mjs
91
- ```
81
+ 1. Runs the same release gates.
82
+ 2. Runs `npm stage publish` and writes the stage ID and approval commands to the
83
+ GitHub job summary.
84
+ 3. Waits up to 60 minutes for the package to become public.
85
+ 4. Verifies npm's signed provenance against the workflow's repository, path,
86
+ branch, and exact commit SHA.
87
+ 5. Creates `v<version>` at that commit and a GitHub release from the matching
88
+ changelog section.
92
89
 
93
- Review the dry-run result before any real publish. Run `Publish` again with
94
- `dry_run: false` only when a release-preparation plan has explicitly authorized
95
- the real publish.
90
+ Review the stage with `npm stage view <stage-id>` or
91
+ `npm stage download <stage-id>`. Approve it with 2FA using
92
+ `npm stage approve <stage-id>` or the npmjs.com UI. npm won't publish the
93
+ package until that approval happens.
96
94
 
97
- The real-publish path is **staged**: the workflow runs `npm stage publish`,
98
- which places the version in a staged, not-publicly-available state. A
99
- maintainer then reviews and approves it with 2FA: `npm stage list`,
100
- `npm stage view <stage-id>` / `npm stage download <stage-id>`, and
101
- `npm stage approve <stage-id>` (or the npmjs.com UI). Nothing reaches `latest`
102
- without that human approval, so a compromised workflow cannot ship directly.
95
+ ## Recovery
103
96
 
104
- ## First-publish history
97
+ Rerun `Publish` with the same version and `dry_run: false` after a timeout or a
98
+ partial failure. The workflow checks existing state before taking action:
105
99
 
106
- `0.1.0` was published manually on 2026-07-12 with an interactive 2FA publish
107
- from a maintainer terminal: npm trusted publishing cannot be configured for a
108
- package that has never been published, so the first publish had to
109
- authenticate directly. Every release after `0.1.0` goes through the `Publish`
110
- workflow and the staged flow above.
100
+ - If the npm version isn't public, it stages it and waits for approval.
101
+ - If the npm version is public, it skips staging and verifies its signed
102
+ provenance against the current workflow commit.
103
+ - If the tag or GitHub release already exists at the expected commit, it keeps
104
+ it and finishes successfully.
105
+ - If the npm provenance or tag points to another commit, it stops without
106
+ changing the existing release.
111
107
 
112
- ## Trusted publishing setup
113
-
114
- The publish workflow relies on trusted publishing/OIDC and intentionally has no
115
- npm-token fallback. It grants `id-token: write` for OIDC, keeps repository
116
- contents read-only, uses the `npm-publish` GitHub environment, and runs
117
- `npm stage publish` only on the real-publish path (staged publishing requires
118
- npm >= 11.15.0, so the workflow upgrades npm accordingly).
119
-
120
- The npm-side configuration for `@navels/neal`:
108
+ If the approval wait times out, approve the existing npm stage before rerunning.
109
+ Do not try to stage the same version a second time.
121
110
 
122
- - Publishing access: **Require two-factor authentication and disallow tokens**.
123
- This blocks every traditional token permanently. Trusted publishers are
124
- unaffected because they use OIDC, and staged approvals always require a
125
- maintainer's 2FA.
126
- - Trusted publisher: owner/repo `navels/neal`, workflow filename
127
- `publish.yml`, environment `npm-publish`, allowed action **`npm stage
128
- publish` only** (stage-only, plain `npm publish` is deliberately not
129
- granted).
130
-
131
- ## Release boundaries
111
+ ## Trusted publishing setup
132
112
 
133
- The current workflow checks that the remote `v<version>` tag is available, but
134
- it does not create tags or GitHub releases. Do not promise or perform release
135
- marker creation as part of the current publish workflow. If tags or GitHub
136
- releases are needed after a successful publish, add them in a separate plan with
137
- the required permissions and explicit operator approval.
113
+ The workflow uses npm trusted publishing with no token fallback. The npm trusted
114
+ publisher is configured for owner/repository `navels/neal`, workflow
115
+ `publish.yml`, environment `npm-publish`, and the **`npm stage publish` only**
116
+ permission. Publishing access requires two-factor authentication and disallows
117
+ traditional tokens.
138
118
 
139
- Recovery rule for later real publishes: if `npm publish` succeeds but a later
140
- release-marker step fails in a separate plan, do not rerun the publish blindly.
141
- First confirm the npm version exists, then create only the missing marker.
119
+ The workflow grants `id-token: write` for npm's OpenID Connect authentication
120
+ and `contents: write` for the final tag and GitHub release. The `npm-publish`
121
+ environment accepts only `main`. npm's stage-only permission means the workflow
122
+ can't make a package public without a maintainer's 2FA approval.
142
123
 
143
124
  Official references:
144
125
 
@@ -146,5 +127,7 @@ Official references:
146
127
  <https://docs.github.com/en/actions/how-tos/write-workflows/choose-when-workflows-run/trigger-a-workflow>
147
128
  - npm trusted publishing:
148
129
  <https://docs.npmjs.com/trusted-publishers/>
130
+ - npm staged packages:
131
+ <https://docs.npmjs.com/staged-publishing/>
149
132
  - npm trust command:
150
133
  <https://docs.npmjs.com/cli/v11/commands/npm-trust/>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@navels/neal",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "A source-first multi-agent CLI for planning, executing, reviewing, and resuming scoped code changes.",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -56,8 +56,8 @@
56
56
  },
57
57
  "dependencies": {
58
58
  "@ai-sdk/openai-compatible": "3.0.12",
59
- "@anthropic-ai/claude-agent-sdk": "0.3.218",
60
- "@openai/codex-sdk": "0.145.0",
59
+ "@anthropic-ai/claude-agent-sdk": "0.3.220",
60
+ "@openai/codex-sdk": "0.146.0",
61
61
  "ai": "7.0.31",
62
62
  "dotenv": "^17.4.2",
63
63
  "yaml": "^2.9.0",
Binary file