orizu 0.5.21 → 0.5.23
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 +46 -15
- package/dist/cleanup.d.ts +6 -0
- package/dist/cleanup.d.ts.map +1 -0
- package/dist/cleanup.js +27 -0
- package/dist/gepa-engine-dispatch.d.ts.map +1 -1
- package/dist/gepa-engine-dispatch.js +20 -1
- package/dist/gepa-python-paths.d.ts.map +1 -1
- package/dist/gepa-python-paths.js +25 -6
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +37 -15
- package/dist/hosted-commands.d.ts +13 -0
- package/dist/hosted-commands.d.ts.map +1 -0
- package/dist/hosted-commands.js +10 -0
- package/dist/hosted-gepa-cli.d.ts +11 -0
- package/dist/hosted-gepa-cli.d.ts.map +1 -0
- package/dist/hosted-gepa-cli.js +110 -0
- package/dist/hosted-gepa-numeric-values.d.ts +3 -0
- package/dist/hosted-gepa-numeric-values.d.ts.map +1 -0
- package/dist/hosted-gepa-numeric-values.js +49 -0
- package/dist/hosted-provider-settings.d.ts +3 -0
- package/dist/hosted-provider-settings.d.ts.map +1 -0
- package/dist/hosted-provider-settings.js +69 -0
- package/dist/hosted-session-cli.d.ts.map +1 -1
- package/dist/hosted-session-cli.js +6 -1
- package/dist/http.d.ts +1 -0
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +72 -74
- package/dist/instruction-set-loader.d.ts.map +1 -1
- package/dist/instruction-set-loader.js +57 -5
- package/dist/instruction-sets-cli.d.ts +5 -2
- package/dist/instruction-sets-cli.d.ts.map +1 -1
- package/dist/instruction-sets-cli.js +134 -24
- package/dist/optimizations-promote-cli.d.ts +3 -0
- package/dist/optimizations-promote-cli.d.ts.map +1 -1
- package/dist/optimizations-promote-cli.js +75 -7
- package/dist/runner-dir-verify.d.ts.map +1 -1
- package/dist/runner-dir-verify.js +4 -7
- package/dist/skilled-proposer-bake-report.d.ts +2 -0
- package/dist/skilled-proposer-bake-report.d.ts.map +1 -0
- package/dist/skilled-proposer-bake-report.js +1 -0
- package/dist/skilled-proposer-config.d.ts +2 -0
- package/dist/skilled-proposer-config.d.ts.map +1 -0
- package/dist/skilled-proposer-config.js +212 -0
- package/dist/skilled-proposer-launch.d.ts +26 -0
- package/dist/skilled-proposer-launch.d.ts.map +1 -1
- package/dist/skilled-proposer-launch.js +103 -6
- package/package.json +1 -1
- package/scripts/vendor-gepa-python.mjs +81 -12
- package/src/cleanup.ts +37 -0
- package/src/gepa-engine-dispatch.ts +21 -1
- package/src/gepa-python-paths.ts +24 -6
- package/src/help.ts +37 -15
- package/src/hosted-commands.ts +4 -0
- package/src/hosted-gepa-cli.ts +107 -0
- package/src/hosted-gepa-numeric-values.ts +60 -0
- package/src/hosted-provider-settings.ts +69 -0
- package/src/hosted-session-cli.ts +4 -1
- package/src/http.ts +8 -0
- package/src/index.ts +112 -89
- package/src/instruction-set-loader.ts +55 -5
- package/src/instruction-sets-cli.ts +173 -19
- package/src/optimizations-promote-cli.ts +85 -7
- package/src/runner-dir-verify.ts +11 -6
- package/src/skilled-proposer-bake-report.ts +1 -0
- package/src/skilled-proposer-config.ts +191 -0
- package/src/skilled-proposer-launch.ts +96 -7
- package/src/skilled-proposer-venv-manager.mjs +44 -27
- package/vendor/orizu-gepa/src/orizu_gepa_connector/engine.py +36 -3
- package/vendor/orizu-gepa/src/orizu_gepa_connector/instruction_set_loader.py +31 -3
- package/vendor/orizu-gepa/src/orizu_gepa_connector/runtime.py +7 -2
- package/vendor/orizu-gepa/src/orizu_gepa_connector/skilled_proposer_bridge.py +354 -5
- package/vendor/orizu-gepa-python/src/orizu_gepa/cli.py +1 -0
- package/vendor/orizu-gepa-python/src/orizu_gepa/client.py +15 -0
- package/vendor/skills/orizu-cli/SKILL.md +94 -168
- package/vendor/skills/orizu-cli/references/assess-and-plan.md +107 -0
- package/vendor/skills/orizu-cli/references/building-judges.md +442 -180
- package/vendor/skills/orizu-cli/references/cli-reference.md +69 -39
- package/vendor/skills/orizu-cli/references/dataset-design.md +100 -0
- package/vendor/skills/orizu-cli/references/eval-strategy.md +64 -0
- package/vendor/skills/orizu-cli/references/instructions-after-prompts.md +115 -0
- package/vendor/skills/orizu-cli/references/migrate-existing-gepa-setup.md +150 -82
- package/vendor/skills/orizu-cli/references/optimization-reports.md +196 -104
- package/vendor/skills/orizu-cli/references/optimization-with-gepa.md +57 -37
- package/vendor/skills/orizu-cli/references/primer.md +43 -18
- package/vendor/skills/orizu-cli/references/prompt-control-plane.md +199 -131
|
@@ -1,208 +1,134 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: orizu-cli
|
|
3
|
-
description: Use when the user
|
|
3
|
+
description: Use when the user mentions Orizu; wants measurable improvement for a specific LLM application or agent; collects human feedback on model outputs or turns failures into evals; validates judges; optimizes instruction sets; migrates an existing GEPA setup; or establishes continuous improvement. Step aside and handle directly generic instruction-writing theory or one-off edits the user explicitly will not validate with evals.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Orizu
|
|
7
7
|
|
|
8
|
-
Orizu improves LLM applications
|
|
8
|
+
Orizu improves LLM applications with an evals-first workflow, then optimizes against the resulting evidence. Use `orizu instructions` as the primary path for customer instruction sets. Follow the applicable J0–J6 path in order and satisfy each applicable exit criterion; J4 is conditional on missing approved ground truth. Read `references/primer.md` for the methodology and `references/cli-reference.md` for the current command surface instead of relying on remembered commands.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
The journey uses **datasets** for versioned rows, **apps** and **tasks** for labels, **judges**, **runners**, and **scorers** for automated evaluation, **instruction sets** for customer instruction work, and **optimization runs** for searching profile candidates.
|
|
11
11
|
|
|
12
|
-
##
|
|
12
|
+
## Critical: scorer-runner input contract
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
- The user wants a one-off prompt tweak they explicitly won't validate with evals.
|
|
16
|
-
- The user has already said they don't want to set up evals.
|
|
17
|
-
- The request is generic prompt-engineering theory unrelated to a specific app.
|
|
14
|
+
A judge runner built for flat rows will silently score every candidate 0 unless `flat_row` is selected by `--scorer-input-contract` or the runner manifest and, when needed, the candidate field is selected by flag or manifest.
|
|
18
15
|
|
|
19
|
-
#
|
|
16
|
+
# Vocabulary
|
|
20
17
|
|
|
21
|
-
|
|
18
|
+
- **Evals-first** — understand observed failures, build and validate evaluations, then optimize the LLM application against that evidence.
|
|
19
|
+
- **Journey step** — one ordered stage in the workflow: J0 — Discover & evaluate, J1 — Install & set up, J2 — Assess & plan, J3 — Build the dataset, J4 — Ground truth via annotation (conditional), J5 — Build & validate judges, or J6 — Optimize & promote.
|
|
20
|
+
- **Exit criterion** — the checkable evidence required before leaving one journey step for the next.
|
|
21
|
+
- **Human-only** — an action the agent prepares with exact evidence and an authorized human executes.
|
|
22
|
+
- **Local surface** — a CLI action executed under the user's token; the authority map, not the surface, determines whether an agent or human executes it.
|
|
23
|
+
- **Hosted session** — a platform-managed coding-agent session authenticated with session credentials and bound to its signed team and project scope.
|
|
24
|
+
- **Instruction set** — the customer-facing identity for one agent or LLM experience, with a fixed ordered component shape and model-config profiles that own component values.
|
|
25
|
+
- **Judge trust bar** — the user-agreed metric thresholds a judge must clear for a named downstream decision and failure mode.
|
|
26
|
+
- **Decision class** — the judge's downstream use: gatekeeper, optimization signal, or triage / monitoring.
|
|
27
|
+
- **Scenario class** — a named, meaningful family of cases from the ratified improvement plan whose coverage and results are tracked separately.
|
|
28
|
+
- **Final-held-out** — the application partition reserved for J6's single seed-versus-selected-candidate comparison.
|
|
22
29
|
|
|
23
|
-
|
|
24
|
-
- Install the CLI: `npm i -g orizu`.
|
|
25
|
-
- Run `orizu setup` to sign in, initialize the workbench, and install the global Codex/Claude Code skill symlinks.
|
|
26
|
-
- Or install this skill directly from the CLI package with `orizu install-skill --agent codex --yes` (or `--agent claude`; advanced target IDs remain available via `--target`).
|
|
27
|
-
- Or read the bundled skill in place without installing: `orizu skills path --json` returns `root`, `skillMd`, `source`, `cliVersion`, and `skillHash`.
|
|
28
|
-
- Before doing Orizu work, verify the runtime with `orizu --version` and `orizu capabilities --json`. If the CLI is missing or stale, pause and ask the user to update it.
|
|
29
|
-
- After CLI upgrades, check installed copies with `orizu skills status` and refresh them with `orizu skills update`.
|
|
30
|
-
- Rediscover the command surface any time with `orizu --help`, `orizu <group> --help`, or `orizu capabilities --json`.
|
|
31
|
-
- Every command supports `--json` (prefix `orizu --json <cmd>` or trailing flag) and emits a single JSON document; prefer it over parsing human-formatted text. Long-running commands emit the JSON summary as the final stdout line.
|
|
32
|
-
- Login callback requires `127.0.0.1:43123`.
|
|
33
|
-
- Credentials are stored at `~/.config/orizu/credentials.json`.
|
|
34
|
-
- Current `orizu login` creates a user-owned personal access token for the CLI and stores it as a v3 API-key credential. The raw token is not recoverable after creation.
|
|
30
|
+
# Journey
|
|
35
31
|
|
|
36
|
-
##
|
|
32
|
+
## J0 — Discover & evaluate
|
|
37
33
|
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
- Approving login in the browser creates a personal access token for that Orizu user. The token inherits the user's current team/project access and loses access if the user's role or membership changes.
|
|
41
|
-
- Clear local credentials and revoke the current CLI token: `orizu logout`.
|
|
42
|
-
- Revoke other CLI tokens from the Personal Tokens page in Orizu.
|
|
43
|
-
- Auth failure loop: `orizu login` → `orizu whoami` → rerun the original command.
|
|
44
|
-
- Hosted sandboxes are pre-authenticated via `ORIZU_TOKEN_FILE` (no `orizu login` needed); an explicit `ORIZU_TOKEN` env var overrides both the token file and stored credentials when set.
|
|
34
|
+
- Before installation, explain what Orizu does, inspect only the context the user has supplied, and give an honest fit assessment for the user's LLM application.
|
|
35
|
+
- Recommend adoption when repeated iteration would benefit from measurable evaluations. Step aside for generic instruction-writing theory or a one-off edit the user explicitly will not validate with evals.
|
|
45
36
|
|
|
46
|
-
|
|
37
|
+
**Exit criterion:** The human has the fit assessment and makes the adoption decision.
|
|
47
38
|
|
|
48
|
-
|
|
39
|
+
## J1 — Install & set up
|
|
49
40
|
|
|
50
|
-
- `orizu
|
|
51
|
-
- `orizu
|
|
52
|
-
-
|
|
53
|
-
-
|
|
41
|
+
- For local use, install Node.js 20+, run `npm i -g orizu`, then run `orizu setup` so browser login, the workbench, and skill links are initialized. The callback defaults to `127.0.0.1:43123`; after a collision, set `ORIZU_AUTH_PORT` to an available port from 1024–65535.
|
|
42
|
+
- Verify auth and runtime with `orizu whoami --json` and `orizu capabilities --json`. Verify skill installation and sync separately with `orizu skills status --json`; use `orizu skills update` if stale. Follow the Authority map for surface-specific setup.
|
|
43
|
+
- Establish the team and project with the user's naming choices as directed by the Authority map. Projects live inside teams.
|
|
44
|
+
- Browser login creates a user-owned personal access token. The server/UI cannot redisplay the raw token after issuance, but the local v3 credential retains it for CLI auth. The token inherits current access and loses access when the user's role or membership changes.
|
|
54
45
|
|
|
55
|
-
|
|
46
|
+
**Exit criterion:** The team and project exist; the skill is verified in sync by `orizu skills status` locally, or shipped and present in a hosted session; and both `orizu whoami` and `orizu capabilities` succeed.
|
|
56
47
|
|
|
57
|
-
|
|
48
|
+
## J2 — Assess & plan
|
|
58
49
|
|
|
59
|
-
|
|
50
|
+
- Read `references/assess-and-plan.md` and follow its survey, decision, conversation, and persistence workflow before moving any data.
|
|
60
51
|
|
|
61
|
-
|
|
52
|
+
**Exit criterion:** A human-ratified `improvement-plan.md` is committed at the plain-repo root or at `projects/<directorySlug>/improvement-plan.md` in a workbench; there, it and its `memory.md` pointer are committed together.
|
|
62
53
|
|
|
63
|
-
|
|
64
|
-
- Mix production traces with a **random sample**. Thumbs-down feedback alone is biased toward extreme failures and misses subtle ones.
|
|
65
|
-
- Aim for **~100+ diverse traces**. Stop adding when you stop discovering new failure modes (theoretical saturation).
|
|
66
|
-
- Synthetic data is fine when real traces are scarce — vary structured inputs (feature × persona × scenario), seed from real logs, and filter for difficulty. Don't ask "generate 50 test cases" cold.
|
|
54
|
+
## J3 — Build the dataset
|
|
67
55
|
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
orizu datasets upload --project <teamSlug>/<projectSlug> --file <traces.jsonl> --name "<batch>"
|
|
71
|
-
orizu datasets append --dataset <datasetId> --file <more.jsonl>
|
|
72
|
-
orizu datasets lock --dataset <datasetId> --reason "Freeze for labeling"
|
|
73
|
-
```
|
|
56
|
+
- Follow `references/dataset-design.md` for the ratified source choice, scenario-class coverage, three-way split and mini-batch design, the reserved final-held-out comparison split, versioning, and the pre-annotation mutation guard.
|
|
74
57
|
|
|
75
|
-
|
|
58
|
+
**Exit criterion:** The primary dataset's immutable version and split set cover every scenario class; golden ground truth shortcuts J4 only, while any annotation dataset is versioned, locked, and ready for labeling.
|
|
76
59
|
|
|
77
|
-
##
|
|
60
|
+
## J4 — Ground truth via annotation (conditional)
|
|
78
61
|
|
|
79
|
-
|
|
80
|
-
- **Binary, not Likert.** Pass/fail forces a ship/no-ship decision; 3/5 doesn't.
|
|
81
|
-
- **One question per failure mode.** Don't bundle correctness, tone, and helpfulness.
|
|
82
|
-
- **Annotate failures you've actually observed.** Hypothetical-failure labels are low-value.
|
|
83
|
-
- **Custom UI per task** — generic annotation interfaces collapse signal. The labeler should feel like an app annotators want to use, not a form they tolerate.
|
|
62
|
+
- Follow `references/eval-strategy.md` for the annotation decision, guided eval strategy, labeler-validation gate, task-version pin, and completeness check.
|
|
84
63
|
|
|
85
|
-
|
|
86
|
-
```bash
|
|
87
|
-
orizu apps create --project <teamSlug>/<projectSlug> --name "<labeler>" --dataset <datasetId> \
|
|
88
|
-
--file <App.tsx> --input-schema <input.json> --output-schema <output.json>
|
|
64
|
+
**Exit criterion:** Golden ground truth is recorded as the reason annotation was skipped, or labels are exported and the approved task report is published.
|
|
89
65
|
|
|
90
|
-
|
|
91
|
-
--title "<round>" --labels-per-item 2
|
|
66
|
+
## J5 — Build & validate judges
|
|
92
67
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
68
|
+
- Build automated evaluators from the ground truth: use code assertions for deterministic rules and LLM judges only for nuanced criteria. A 100% pass rate is a saturation warning, not proof that the evaluator is useful.
|
|
69
|
+
- Validate against judge-test human labels. Track TPR and TNR per failure mode, and use Cohen's kappa alongside raw agreement when establishing the judge trust bar with the user for the decision it powers.
|
|
70
|
+
- Store the versioned judge and runner, then register the row or set scorer that defines how its output is displayed, compared, and used. GEPA reflection needs a row-mode scorer because it consumes per-row feedback.
|
|
71
|
+
- Read `references/building-judges.md` for judge trust bar agreement, submitted alignment evidence, and judge optimization; its agreed judge trust bars govern over older fixed defaults. Read `references/prompt-control-plane.md` for artifact contracts.
|
|
97
72
|
|
|
98
|
-
orizu
|
|
99
|
-
orizu tasks report set --task <taskId> --report-file ./task-report.md
|
|
100
|
-
orizu tasks export --task <taskId> --format jsonl --out ./labels.jsonl
|
|
101
|
-
```
|
|
73
|
+
**Exit criterion:** Every gating judge clears its agreed judge trust bar; its scorers are registered; `runners exec` evidence, `scores submit`, and a measured `scorers exec` run are submitted; and the agent hands `orizu scores accept <score-run-id>` to a human curator, whose acceptance is required before gating decisions.
|
|
102
74
|
|
|
103
|
-
|
|
75
|
+
## J6 — Optimize & promote
|
|
104
76
|
|
|
105
|
-
|
|
77
|
+
- Optimize only against validated judges. Package candidate execution as a runner and run the optimizer against registered scorers. After selection, run one final comparison of the selected candidate against the seed on the final-held-out partition, with per-failure-mode results.
|
|
78
|
+
- Use `orizu instructions` for the instruction set. Each run targets one model-config profile and treats its complete component map as the candidate; promotion never moves one component independently.
|
|
79
|
+
- Inspect the local run logs when available, otherwise export the run. Write and attach a markdown report using `references/optimization-reports.md`; the report should explain candidate tradeoffs and regressions clearly enough for the human to make the promotion decision.
|
|
106
80
|
|
|
107
|
-
|
|
81
|
+
Bundled `run-gepa` flag behavior and execution semantics live in `references/optimization-with-gepa.md`.
|
|
82
|
+
Read that reference before configuring a run; keep this journey focused on workflow and exit criteria.
|
|
108
83
|
|
|
109
|
-
|
|
84
|
+
**Exit criterion:** The human has made a promotion decision from the optimization report; if shipping, the new profile version is live.
|
|
110
85
|
|
|
111
|
-
|
|
86
|
+
# Improve continuously
|
|
112
87
|
|
|
113
|
-
|
|
88
|
+
- Feed improved-system traces into a new dataset version and repeat from dataset building. Each report should recommend the next scenario classes or failure modes to investigate.
|
|
89
|
+
- Propose a cadence for fresh-trace collection, evaluation, and optimization; set it up only after the user agrees, then complete the first cycle.
|
|
114
90
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
Principles:
|
|
118
|
-
- **Code assertions first.** If a failure is a rule (keyword present, tool called, format valid), write a code check. Fast, free, deterministic.
|
|
119
|
-
- **LLM-as-a-judge for nuanced criteria only.** Always validate against your human labels.
|
|
120
|
-
- **TPR > 90% and TNR > 90%** before trusting a judge. Track each separately — accuracy is misleading on imbalanced data.
|
|
121
|
-
- **A 100% pass rate is a smell.** Your evals are saturated; add harder cases.
|
|
122
|
-
|
|
123
|
-
Authoring workflow:
|
|
124
|
-
1. Export labels: `orizu tasks export --task <id> --format jsonl --out labels.jsonl`.
|
|
125
|
-
2. For each failure mode, choose code assertion or LLM-judge.
|
|
126
|
-
3. Build the judge.
|
|
127
|
-
4. Validate: split labels train/dev/test (20/40/40), measure TPR + TNR on test, target both > 90%.
|
|
128
|
-
5. Run the validated judge over future outputs.
|
|
129
|
-
|
|
130
|
-
Detailed walkthrough — code assertion patterns, LLM-judge prompt scaffold, train/dev/test split, TPR/TNR computation, saturation: **`references/building-judges.md`**.
|
|
131
|
-
|
|
132
|
-
## 4. Optimize — hill-climb against validated judges
|
|
133
|
-
|
|
134
|
-
Use the Phase 0 prompt control plane when the user wants an optimizer run to appear in Orizu, stream live events, or promote accepted candidates into the prompt timeline. For text-candidate GEPA-style optimization, prefer the bundled `orizu optimizations run-gepa` flow. Read **`references/prompt-control-plane.md`** before wiring those endpoints.
|
|
135
|
-
|
|
136
|
-
GEPA details below are still useful for local optimizer implementation. DSPy is only relevant when the customer already uses DSPy or asks for an external DSPy GEPA implementation.
|
|
137
|
-
|
|
138
|
-
Principles:
|
|
139
|
-
- Only optimize against judges you've validated. Otherwise you Goodhart your way to a worse system.
|
|
140
|
-
- Compare before/after on the **same held-out eval suite**. Don't trust vibes.
|
|
141
|
-
- Read **per-failure-mode metrics**, not just combined — averages hide regressions.
|
|
142
|
-
- Improved-system traces feed back into step 1; the loop continues.
|
|
143
|
-
|
|
144
|
-
Local execution workflow:
|
|
145
|
-
1. Package the candidate execution as an Orizu runner.
|
|
146
|
-
2. Register validated row/set scorers.
|
|
147
|
-
3. Run the bundled GEPA-style optimizer or a custom optimizer against the scorer set.
|
|
148
|
-
4. Inspect `logs/<optimization_run_id>` for full local optimization traces, especially `evaluations.jsonl`, `reflections.jsonl`, `events.jsonl`, and `result.json`.
|
|
149
|
-
5. If the local log is unavailable or the run happened remotely, use `orizu optimizations export <run-id> --out <run-id>.optimization.json`.
|
|
150
|
-
6. Write a markdown optimization report from the logs/export and attach it with `--report-file <path>` when finishing, failing, or cancelling the run.
|
|
151
|
-
7. Diff before/after on a held-out set; ship if it holds.
|
|
152
|
-
|
|
153
|
-
Bundled `run-gepa` reflection behavior:
|
|
154
|
-
- **Scorer contract:** `run-gepa` sends the scorer runner a GEPA-shaped row (`{source_row, candidate_id, candidate_output, …}`), NOT the flat-row shape used by `runners exec --scorer-version`. A judge runner built for flat-row score runs will silently score every candidate 0 unless you pass `--scorer-input-contract flat_row` (add `--scorer-candidate-field <row-field>`, e.g. `draft`, when the judge reads the candidate output from a named row field). Do not hand-write an adapter runner — the flag applies the official adapter without changing the registered runner bytes, so it composes with `--scorer-runner-dir` content-sha verification. `run-gepa` validates the contract on the seed at launch and refuses a uniformly-worst-scoring seed with a diagnosis; `--allow-degenerate-seed` overrides only when the seed genuinely deserves the worst score everywhere. Both contracts: `references/prompt-control-plane.md` ("Scorer-Runner Input Contracts").
|
|
155
|
-
- Budget controls are mutually exclusive. Use at most one of `--budget auto|light|medium|heavy`, `--max-metric-calls <n>`, `--max-full-evals <n>`, `--max-iterations <n>`, or `--max-candidate-proposals <n>`. The proposal cap is official-engine-only. If none is provided, `run-gepa` uses `--budget auto`, the balanced medium preset.
|
|
156
|
-
- **Skilled proposer:** opt in with `--candidate-proposer skilled-proposer` on the official engine; the selected run prepares or reuses its managed Python environment automatically. Bound proposal work with `--proposal-max-tokens` and `--proposal-max-calls`, independently of `--max-metric-calls`. Read `references/prompt-control-plane.md` ("Skilled proposer") for validation and recovery; readiness is proven when optimizer execution begins without an `ALI_1505_*` environment diagnostic.
|
|
157
|
-
- The reflective LM's final text is used verbatim as the next candidate prompt. It should return only the complete updated prompt body, not analysis, labels, XML tags, or markdown fences.
|
|
158
|
-
- Keep provider-native reasoning controls separate from the prompt text with `--reflection-provider-settings <json|@file>`.
|
|
159
|
-
- Reflection max-token limits are explicit config, not implicit defaults. Use `--reflection-max-tokens <n>` when a provider requires an output cap; this maps to Anthropic `max_tokens` and OpenAI `max_output_tokens`.
|
|
160
|
-
- Anthropic native Messages reflection requires `max_tokens`, so `run-gepa` with an `anthropic/...` reflection model must receive `--reflection-max-tokens <n>` and should fail fast if it is omitted. OpenAI reflection may omit `max_output_tokens` unless the user explicitly wants a cap.
|
|
161
|
-
- Reflection HTTP calls retry transient provider failures by default (`--reflection-retry-attempts 3`, `--reflection-http-timeout-seconds 180`). Retryable failures include timeouts, connection reset/abort, HTTP 429, and common server/capacity statuses. If reflection still fails after retries, `run-gepa` logs `reflection_failed`, counts the proposal against budget, and continues to the next iteration.
|
|
162
|
-
- By default, `run-gepa` skips reflection and child creation when every row in the selected parent mini-batch is already perfect (`1.0` for higher-is-better scorers, `0.0` for lower-is-better scorers). This saves reflection tokens because the child cannot beat a saturated mini-batch. Use `--no-skip-perfect-parent-reflection` to force reflection anyway, or `--skip-perfect-parent-reflection` to make the default explicit in scripted runs.
|
|
163
|
-
- By default, `run-gepa` sets `--num-threads auto` for row evaluations. Auto uses mini-batch size, validation-set size, 2x CPU count, memory estimate, file-descriptor limit, and a 64-thread default ceiling to avoid launching too many runner subprocesses at once while still scaling large runs. Set `ORIZU_GEPA_AUTO_THREADS_MAX` or use `--num-threads <n>` only when the runner/provider capacity is known.
|
|
164
|
-
- `run-gepa` writes complete local logs by default under `logs/<optimization_run_id>`; override with `--log-dir <dir>` or disable with `--no-local-log`.
|
|
165
|
-
- Server optimization events redact row snapshots and reflection prompts by default; the local log keeps full row inputs, outputs, scores, feedback, reflection prompts, and reflection responses for later agent analysis.
|
|
166
|
-
- OpenAI example: `--reflection-model openai/gpt-5 --reflection-provider-settings '{"reasoning":{"effort":"medium","summary":"auto"}}'`.
|
|
167
|
-
- Anthropic example: `--reflection-model anthropic/claude-opus-4-7 --reflection-max-tokens 4096 --reflection-provider-settings '{"thinking":{"type":"adaptive","display":"omitted"},"output_config":{"effort":"medium"}}'`.
|
|
168
|
-
|
|
169
|
-
Detailed walkthrough — GEPA mechanics, Orizu-tracked optimization, optional DSPy context for customers already using it, and before/after comparison: **`references/optimization-with-gepa.md`**. Report-writing structure and interpretation guidance: **`references/optimization-reports.md`**.
|
|
91
|
+
The loop is established when a cadence is agreed and its first cycle is complete, with new data feeding the next J3 dataset version.
|
|
170
92
|
|
|
171
93
|
# Reference index
|
|
172
94
|
|
|
173
|
-
- `references/primer.md` —
|
|
174
|
-
- `references/
|
|
175
|
-
- `references/
|
|
176
|
-
- `references/
|
|
177
|
-
- `references/
|
|
178
|
-
- `references/
|
|
179
|
-
- `references/
|
|
180
|
-
- `references/
|
|
181
|
-
- `
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
- `
|
|
190
|
-
-
|
|
191
|
-
- `datasets
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
95
|
+
- `references/primer.md` — end-to-end evals-first methodology.
|
|
96
|
+
- `references/assess-and-plan.md` — codebase survey, user-owned decisions, plan conversation, and durable J2 artifact.
|
|
97
|
+
- `references/cli-reference.md` — current CLI command surface.
|
|
98
|
+
- `references/dataset-design.md` — golden-data import, scenario-class coverage, splits, and versioning.
|
|
99
|
+
- `references/eval-strategy.md` — annotation decision, eval strategy, and labeler validation before task publish.
|
|
100
|
+
- `references/building-apps.md` — labeler contract, design, patterns, preview, and smoke test.
|
|
101
|
+
- `references/building-judges.md` — judge/scorer authoring and alignment validation.
|
|
102
|
+
- `references/prompt-control-plane.md` — artifact contracts, score submission, optimizer behavior, and promotion endpoints.
|
|
103
|
+
- `references/optimization-with-gepa.md` — GEPA workflow and optional DSPy context.
|
|
104
|
+
- `references/migrate-existing-gepa-setup.md` — migration ending in scorer parity before optimization.
|
|
105
|
+
- `references/optimization-reports.md` — report structure and interpretation guidance.
|
|
106
|
+
- `references/instructions-after-prompts.md` — prompts-era compatibility, including the remaining session-scoped read surface; read before changing legacy material.
|
|
107
|
+
- `scripts/test-app.mjs` — plain-Node app contract smoke test.
|
|
108
|
+
|
|
109
|
+
# Execution facts
|
|
110
|
+
|
|
111
|
+
- `--json` may appear before or after a command. Non-streaming commands emit one JSON document, with long-running summaries on the final stdout line; streaming `orizu run tail --json` instead emits JSONL, one event object per line.
|
|
112
|
+
- Task creation is draft-first; publish only after the returned task URL has been tested and approved. Both `--assignees` and assignment-file rows accept user IDs or member emails.
|
|
113
|
+
- Dataset locks reject append, edit, and delete-row mutations, but whole-dataset deletion does not check the lock. `datasets edit-rows --file` requires every row to carry a non-empty string `id`.
|
|
114
|
+
|
|
115
|
+
# Authority map
|
|
116
|
+
|
|
117
|
+
This is the single source of truth for who runs each action. Replace placeholders with resolved values before giving a hand-off. The full per-role matrix is `docs/authorization-matrix.md`.
|
|
118
|
+
|
|
119
|
+
| Surface | Work | Agent runs | Human role or exact hand-off |
|
|
120
|
+
| --- | --- | --- | --- |
|
|
121
|
+
| All surfaces | Resolve state | Query Orizu for instruction-set defaults, profile production pointers, scorer/runner pointers, version lineage, score runs, optimization runs, and report history; for example, `orizu instructions list --project <team/project>`, `orizu instructions show <set> --project <team/project>`, and `orizu runs ...`. | Orizu is the source of truth for this state. |
|
|
122
|
+
| All surfaces | Edit files | Edit and commit source, configs, `App.tsx`, schemas, and local traces under `logs/<run-id>` in the repo working set. | Repo files are not canonical pointer or run state. |
|
|
123
|
+
| Local agent under the user's token | Workflow | Survey the customer codebase, resolve state, prepare the plan, files, manifests, diffs, and evidence, then ask the human to ratify the workflow design. | The human moments are plan ratification and execution of all production/default pointer moves. |
|
|
124
|
+
| Local agent under the user's token | Catalog mutations and pointer preparation | After plan ratification, pull instruction material from the customer codebase and run `orizu instructions create <manifest> --project <team/project>`, `orizu instructions push <manifest> --project <team/project> --set <slug-or-exact-name>`, shape add/remove, archive/restore itself under the user's token. For pointer changes, gather only read-only resolution and binding evidence, prepare the exact commands, then hand them off. | Per the Micro-round 3 custody ruling, a human admin or curator using a user token executes every runner default-label move, optimizer-label move, scorer production-label move, profile promote/rollback, default move, and labeled optimization promotion on every surface. |
|
|
125
|
+
| Hosted session | Start and scope | Use the pre-authenticated CLI from `ORIZU_TOKEN_FILE` and `ORIZU_BASE_URL`; resolve only the session's signed team with `orizu teams list`, then list or create projects only within it. Run `orizu projects create --name "<project name>" --team <signed-team>` when needed. | Team creation is platform-enforced human-only. Hand off: `orizu teams create --name "<team name>"`, then ask the human to start a new hosted session scoped to that team; the current session cannot switch teams. |
|
|
126
|
+
| Hosted session | Team-wide curator work | While the hosted session is active and its kill switch is clear, perform setup plus ordinary curator reads and writes within the signed team. Run `orizu instructions profiles new <set> --project <team/project> --model-config <identity>` and `orizu instructions sync <set> --out <dir> --project <team/project>`. For git-canonical judges, scorers, runners, and optimizers, write with `--session <session-id>`, keep bytes as commits on the session branch, then verify with `git ls-files <path>` and inspect the commit. | The agent executes this work; an Orizu version id alone is not proof of committed bytes. Signed-project exceptions are in the next row. |
|
|
127
|
+
| Hosted session | Signed-project work | Run optimization mutations only for the JWT's project, keep git-canonical draft writes on that session and project, and read diff comments only for that project. | Sibling-project optimization mutations, draft writes, and diff-comment reads are out of scope even where ordinary curator access is team-wide. |
|
|
128
|
+
| Hosted session | Materialize an instruction set | When the survey finds only a candidate seed, turn it into the complete manifest. | ADR-008 requires a human curator using a local CLI user token. Create/push are hosted CLI route-enforced; direct RPC remains agent-writable and is a fix-forward gap. Hand off `orizu instructions create <manifest> --project <team/project>` for a fresh set, or `orizu instructions push <manifest> --project <team/project> --set <slug-or-exact-name>` for an existing set. Their measured 403 is `Sessionless registration is not available to the hosted agent: this artifact class is git-canonical (ADR-007) and its bytes must be committed to the session branch. Re-run with --session <session-id>.` None of these six catalog mutation commands accepts `--session`. |
|
|
129
|
+
| Hosted session | Profiles and component shape | Prepare any shape-change manifest. | A human admin or curator with `can_manage_project` runs `orizu instructions shape add <set> --project <team/project> --key <key> --from <manifest>` or `orizu instructions shape remove <set> --project <team/project> --key <key>`. Route and database enforcement return `Agents cannot change instruction-set shapes`. |
|
|
130
|
+
| Hosted session | Instruction-set visibility | Prepare the requested visibility change. | A human admin or curator with `can_manage_project` runs `orizu instructions archive <slug-or-exact-name> --project <team/project>` or `orizu instructions restore <slug-or-exact-name> --project <team/project>`. Hosted CLI route enforcement returns `Agent sessions cannot perform this action`; direct RPC remains agent-writable. |
|
|
131
|
+
| Hosted session | Instruction scorers | Run `orizu instructions scorers set-headline <set> --key <component-key> --scorer-version <id> --project <team/project>` and `orizu instructions scorers add <set> --key <component-key> --scorer-version <id> --project <team/project>`; prepare scorer-pointer evidence. | A human admin or curator with `can_manage_project` runs `orizu scorers labels set <scorer-name> production --version <scorer-version-id> --project <team/project>`. The measured 403 is `Agents cannot move scorer labels; labels are human-only pointers. Propose the label change as a promotion manifest for a human to apply.` |
|
|
132
|
+
| Hosted session | Promotion | After report acceptance, the two-stage path materializes once with unlabeled `orizu optimizations promote <run-id> --candidate <id> --project <team/project>`; hand the exact run id, candidate id, project, and report evidence to the human. | For the staged path, a human admin or curator with `can_manage_project` re-runs the same promotion as `orizu optimizations promote <run-id> --candidate <id> --label production --project <team/project>`. The idempotent finalizer finds the existing version by run and candidate provenance, moves production to that exact materialized version, and creates no duplicate profile version or candidate-promoted event. Equivalent simpler one-shot path: without prior materialization, the human runs the same labeled command once. A human admin or curator also runs `orizu manifests approve <id>`, `orizu manifests reject <id>`, and, after approval, `orizu manifests apply <id>`. |
|
|
133
|
+
| Hosted session | Review instructions | Read diff comments with `orizu comments diff --run <run-id> --from <candidate-id> --to <candidate-id> --detail hunk` or `orizu comments diff --prompt <prompt-id> --from <version> --to <version> --detail hunk`; keep report-comment CLI targets inside the signed project and prepare proposed review text. | A human admin or curator adds or deletes a diff comment. To change one, delete it and re-add it; the mutation APIs expose POST and DELETE, not edit. Hand off the target, exact anchor, exact text, and named add/delete action. |
|
|
134
|
+
| Hosted session | Session, credentials, and administration | Use connector secrets only through environment variables resolved at boot; prepare requested values without reading credential material. | A team ADMIN runs `orizu teams members add --email <email> --team <team>`, `orizu teams members remove --email <email> --team <team>`, or `orizu teams members role --team <team> --email <email> --role <admin\|curator\|judge>`. A session owner or team admin/curator may run `orizu session end --session <id>` for manual teardown; the coordinator owns automatic lifetime and provisions session and service-internal canonical-write credentials. A human runs `orizu session start --hosted --task "<prompt>" --project <team/project>`. For provider installation, kill switch, billing, deploy keys, or credential reads, ask the human to complete the named UI action and report completion without sharing secrets. |
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Assess & plan
|
|
2
|
+
|
|
3
|
+
This journey turns evidence from the customer's codebase into an evals-first improvement plan. It ends before dataset construction: the durable exit artifact is a human-ratified `improvement-plan.md` written to the canonical path in section 7 and committed before data access.
|
|
4
|
+
|
|
5
|
+
## 1. Hold the data boundary
|
|
6
|
+
|
|
7
|
+
Survey code, configuration, documentation, and the names and wiring of integrations. Inventory candidate customer data, but do not open or read, export, sample, transform, or upload it. Do not call a provider, run a production query, copy traces, or create an Orizu dataset during this journey. Inspect secret names and configuration shape only; never read credential values.
|
|
8
|
+
|
|
9
|
+
Only after the user ratifies the plan and the ratified plan is committed at its canonical path, together with the required workbench memory pointer, may J3 — Build the dataset access the approved sources. If the user asks to move data while decisions remain open, show the missing decisions and ask for ratification first.
|
|
10
|
+
|
|
11
|
+
## 2. Survey the codebase
|
|
12
|
+
|
|
13
|
+
Locate every LLM surface, not only obvious instruction files. Search for model SDK and API calls, agent entry points, RAG or retrieval pipelines, tool definitions, structured-output parsers, instruction and template files, Model Config identity and settings, and fallbacks. For each surface, record:
|
|
14
|
+
|
|
15
|
+
- the user-visible job, owner, entry point, and execution flow;
|
|
16
|
+
- its instruction set or candidate seed, using the instructions CLI command surface when it is already registered;
|
|
17
|
+
- Model Config identity and settings, tools, retrieval dependencies, output contracts, and safety boundaries;
|
|
18
|
+
- observed failure reports and other evidence, clearly separated from hypotheses;
|
|
19
|
+
- existing evals, tests, judges, golden labels, and deployment or monitoring gates;
|
|
20
|
+
- where Orizu could add measurement leverage and where it would add no value.
|
|
21
|
+
|
|
22
|
+
Do not collapse multiple surfaces into one optimization target. Call out repeated infrastructure and dependencies, but keep each surface's failures and evidence attributable.
|
|
23
|
+
|
|
24
|
+
## 3. Inventory candidate data sources
|
|
25
|
+
|
|
26
|
+
Build a source inventory from code and integration metadata without accessing the underlying records. Include unavailable sources and explain the gap; absence is a planning fact, not permission to substitute synthetic data silently.
|
|
27
|
+
|
|
28
|
+
| Candidate source | What to establish without opening records | Decision to bring to the user |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| Production logs | Owning system, retention window, schema, volume, sampling hooks, redaction boundary | Whether access is allowed and which representative sampling policy is acceptable |
|
|
31
|
+
| Observability providers | Wired provider and project, trace shape, feedback or score fields, export boundary | Whether this provider is authoritative and which fields may leave it |
|
|
32
|
+
| User-behavior signals | Feedback controls, retries, abandonments, escalations, edits, or downstream outcomes | Which signals mean success or failure and how selection bias will be handled |
|
|
33
|
+
| Existing golden datasets | Location, provenance, scenario coverage, label meaning, freshness, and split history | Whether the labels remain trusted ground truth or need human spot-checking |
|
|
34
|
+
|
|
35
|
+
Also note synthetic generation as a possible gap-filler, never as an automatic replacement for missing real evidence. Record privacy, security, consent, residency, retention, and identifier-handling constraints for every candidate source.
|
|
36
|
+
|
|
37
|
+
## 4. Surface the judgment calls
|
|
38
|
+
|
|
39
|
+
Convert survey gaps into an explicit decision ledger. The human owns these calls; evidence may support a recommendation, but the agent does not decide by omission. At minimum, surface:
|
|
40
|
+
|
|
41
|
+
- the user outcome, baseline, success measure, acceptable regressions, and priority order;
|
|
42
|
+
- the observed failure modes and scenario class boundaries worth measuring first;
|
|
43
|
+
- the data-source decision, including access, sampling, privacy, retention, and whether synthetic cases may fill a named gap;
|
|
44
|
+
- whether existing labels are trusted ground truth, whether humans must annotate, and who can make that judgment;
|
|
45
|
+
- the judge type for each failure mode and the judge trust bar appropriate to the decision it will power;
|
|
46
|
+
- the customer-facing instruction set, model-config profile, components, and other code that are in or out of the optimization target;
|
|
47
|
+
- Final-held-out validation, per-scenario regression limits, cost and latency limits, rollback evidence, and who owns the promotion decision.
|
|
48
|
+
|
|
49
|
+
Mark each item **decided**, **proposed**, or **open**, with its evidence and owner. Never convert a default, convention, inferred preference, or agent recommendation into a user decision.
|
|
50
|
+
|
|
51
|
+
## 5. Run the guided conversation
|
|
52
|
+
|
|
53
|
+
Use a pointed, grilling-style conversation to resolve the ledger, not a generic intake questionnaire:
|
|
54
|
+
|
|
55
|
+
1. Present the codebase assessment first: observed facts, hypotheses, gaps, Orizu opportunities, and the decisions they create.
|
|
56
|
+
2. Ask the highest-leverage open question in context. Explain why it matters, give concrete options and tradeoffs when useful, and state a recommendation separately from the decision.
|
|
57
|
+
3. Probe vague goals. Ask what observable outcome would disprove success, which scenario class matters first, and what regression would block shipping.
|
|
58
|
+
4. Challenge contradictions and hidden assumptions respectfully. For example, a source cannot be both unavailable and the required ground truth; a judge cannot gate promotion before its trust bar is agreed and validated.
|
|
59
|
+
5. Reflect the answer into the ledger and confirm the consequence. Then take the next open decision.
|
|
60
|
+
|
|
61
|
+
Never answer your own questions, infer approval from silence, or bury a choice in implementation detail. If the repository or supplied context already records an answer, use it and cite it; do not re-ask the user unless the records conflict or the decision is explicitly stale.
|
|
62
|
+
|
|
63
|
+
After the ledger is resolved, present the complete plan and ask the user to revise, reject, or explicitly ratify it. “Looks plausible,” lack of objection, and approval of one source are not plan ratification. Change the plan from **Proposed** to **Ratified** only when the user explicitly ratifies the complete plan.
|
|
64
|
+
|
|
65
|
+
## 6. Write `improvement-plan.md`
|
|
66
|
+
|
|
67
|
+
Write a specific plan that another agent can execute without reconstructing the conversation. Use this outline, adapting detail rather than deleting unresolved decisions:
|
|
68
|
+
|
|
69
|
+
1. **Status and ratification** — Proposed or Ratified; Orizu `team/project`; ratifier, date, and the user statement or recorded decision that constitutes approval.
|
|
70
|
+
2. **Desired outcome and success measures** — user-visible goal, current evidence, target measures, constraints, and non-goals.
|
|
71
|
+
3. **Codebase assessment** — every LLM surface, its entry point and flow, instruction set or seed, Model Config, dependencies, owner, existing evals, and Orizu opportunity.
|
|
72
|
+
4. **Failure modes and scenario classes** — observed evidence, priority, coverage boundary, and explicit hypotheses that still need data.
|
|
73
|
+
5. **Source inventory and data-source decision** — all candidate sources, the chosen sources and rejected alternatives, access owner, sampling, privacy, retention, redaction, and spot-check plan.
|
|
74
|
+
6. **Ground truth and annotation** — trusted golden labels or human labeling path, decision owner, and how label quality will be checked.
|
|
75
|
+
7. **Judge plan and trust bars** — code assertion or LLM judge per failure mode, validation evidence required, and the user-owned judge trust bar for each downstream decision.
|
|
76
|
+
8. **Instruction set and optimization target** — target profile and complete component map, other code in scope, exclusions, and the held-constant environment.
|
|
77
|
+
9. **Final-held-out validation and promotion decision** — split strategy, scenario-class measures, regression limits, cost and latency bounds, ship/rollback evidence, and the human promotion owner.
|
|
78
|
+
10. **Phased work and handoffs** — ordered dataset, annotation, judge, optimization, and report work with human gates before irreversible or production-impacting actions.
|
|
79
|
+
11. **Open decisions** — owner, evidence needed, and why each item blocks ratification or a later phase.
|
|
80
|
+
|
|
81
|
+
Do not disguise open decisions as assumptions. If any ratification-blocking item remains, keep the status Proposed and continue the conversation. Once the user ratifies, update the status and ratification record, remove resolved items from Open decisions, and write `improvement-plan.md` to the canonical path below. Complete its required memory update and commit before accessing any approved data source.
|
|
82
|
+
|
|
83
|
+
## 7. Persist only what Orizu supports today
|
|
84
|
+
|
|
85
|
+
The plan artifact is always named `improvement-plan.md`; its canonical path depends on the workspace:
|
|
86
|
+
|
|
87
|
+
- **Orizu workbench:** resolve the selected project's `directorySlug` through the same per-project manifest that locates `projects/<directorySlug>/memory.md`: find the `projects/<directorySlug>/orizu.project.json` whose project identity matches the resolved Orizu `team/project`, then use that containing directory. Write `projects/<directorySlug>/improvement-plan.md`. Add a concise decision summary and relative plan link to the sibling `memory.md`; do not duplicate the whole plan there.
|
|
88
|
+
- **Plain repository:** write `improvement-plan.md` at the repository root and record the resolved Orizu `team/project` inside it.
|
|
89
|
+
|
|
90
|
+
If the matching `projects/<directorySlug>/orizu.project.json` is absent, or a resolved project directory lacks its sibling `memory.md` or any required primitive directory, do not guess the directory slug or create missing entries by hand.
|
|
91
|
+
With existing authenticated CLI credentials, run `orizu setup --team <teamSlug> --non-interactive --verbose` from the workbench root; the current directory is the default workspace.
|
|
92
|
+
Authenticated setup reconciles each required project path independently: it creates missing files and directories while preserving existing ones.
|
|
93
|
+
Empty project directories are not committed and must be recreated after a fresh clone.
|
|
94
|
+
This per-path seeding does not require `--fix`. Use a separate `orizu setup --team <teamSlug> --fix --non-interactive --verbose` run only when independently diagnosed ADR-004 case or pointer damage also needs repair.
|
|
95
|
+
Verbose output shows the actions.
|
|
96
|
+
When setup completes, re-resolve `orizu.project.json` and continue only from the directory whose manifest identity matches the resolved Orizu project.
|
|
97
|
+
If the manifest is still absent, another required entry remains missing, or setup reports an authentication or repair error, stop and ask the user to repair the workbench instead of writing the plan to a guessed path.
|
|
98
|
+
Setup repairs the local checkout only: it does not commit or push.
|
|
99
|
+
Track newly materialized project-stub files and commit them together with the plan and memory pointer.
|
|
100
|
+
|
|
101
|
+
The repo is truth for the plan contents. In a workbench, both `projects/<directorySlug>/improvement-plan.md` and its sibling `memory.md` pointer must be tracked and committed together. In a plain repository, the root plan must be tracked and committed. These commits make the ratified plan durable and keep later work in the approved project.
|
|
102
|
+
|
|
103
|
+
There is no dedicated CLI command for uploading an improvement plan or arbitrary project context. The generic `orizu workspace apply <path>` command can promote a registered repo-owned resource such as project `memory.md`; it does not make the plan a DB-native artifact or introduce a plan-specific storage format. Richer structured persistence is arriving through the **J2 — Assess & plan** project; until it ships in the installed CLI, use only the Git-backed files above.
|
|
104
|
+
|
|
105
|
+
## Exit criterion
|
|
106
|
+
|
|
107
|
+
J2 is complete only when the user has explicitly ratified the complete plan and `improvement-plan.md` records that ratification and the resolved Orizu project. The canonical plan must be tracked and committed; in a workbench, its sibling `memory.md` pointer must be tracked and committed together with it. Otherwise remain in assess-and-plan; do not start dataset work.
|