@agentsfleet/orly 0.10.14 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.githooks/pre-push +2 -1
- package/AGENTS.md +21 -31
- package/README.md +94 -28
- package/SOUL.md +13 -23
- package/audits/agents-md.md +67 -57
- package/audits/deinit-pairs.sh +13 -18
- package/audits/design-tokens.sh +9 -23
- package/audits/doc-read.sh +10 -33
- package/audits/doc-reads.ts +41 -0
- package/audits/error-codes.sh +18 -25
- package/audits/logging-rust.awk +145 -0
- package/audits/logging.sh +10 -166
- package/audits/msid-ui.sh +45 -18
- package/audits/rule-ledger-lib.sh +9 -6
- package/audits/rust-error.sh +20 -15
- package/audits/scope.sh +88 -0
- package/audits/spec-template.sh +2 -2
- package/audits/spec-template.ts +1 -1
- package/audits/sql-mod.sh +11 -14
- package/audits/ufs-strings.awk +164 -0
- package/audits/ufs.sh +10 -188
- package/core/operating-model.md +8 -8
- package/dispatch/edit_rules.md +8 -6
- package/dispatch/lib.sh +41 -26
- package/dispatch/lifecycle.md +12 -5
- package/dispatch/name_architecture.md +8 -3
- package/dispatch/verify.md +1 -1
- package/dispatch/write_any.md +10 -3
- package/dispatch/write_changelog.md +7 -4
- package/dispatch/write_go.md +1 -1
- package/dispatch/write_http.md +5 -7
- package/dispatch/write_python.md +1 -1
- package/dispatch/write_rust.md +17 -1
- package/dispatch/write_shell.md +1 -1
- package/dispatch/write_spec.md +3 -1
- package/dispatch/write_sql.md +28 -6
- package/dispatch/write_ts_adhere_bun.md +11 -0
- package/dispatch/write_zig.md +53 -21
- package/docs/CHANGELOG.md +10 -0
- package/docs/CHANGELOG_VOICE.md +11 -2
- package/docs/EXECUTE_DOC_READS.md +10 -10
- package/docs/HARNESS_VERIFY_OUTPUT.md +6 -3
- package/docs/JUDGMENTS.md +156 -0
- package/docs/LIFECYCLE_PATTERNS.md +26 -16
- package/docs/LOGGING_STANDARD.md +39 -19
- package/docs/ORLY_ARCHITECTURE.md +77 -6
- package/docs/RELEASE_TEMPLATE.md +21 -5
- package/docs/REST_API_DESIGN_GUIDELINES.md +86 -21
- package/docs/RULE_ENFORCEMENT.md +6 -6
- package/docs/SCHEMA_CONVENTIONS.md +24 -3
- package/docs/TEMPLATE.md +4 -4
- package/docs/VERIFY_TIERS.md +2 -2
- package/docs/greptile-learnings/RULES.md +81 -26
- package/llms.txt +46 -34
- package/package.json +6 -1
- package/packs/language/go/rules.md +1 -1
- package/packs/language/python/rules.md +1 -1
- package/packs/language/rust/rules.md +17 -1
- package/packs/language/shell/rules.md +1 -1
- package/registry.json +22 -7
- package/schemas/profile.schema.json +48 -5
- package/skills/orly-babysit-prs/SKILL.md +87 -34
- package/skills/orly-spec-new/SKILL.md +19 -6
- package/skills/orly-write-integration-test/SKILL.md +4 -4
- package/skills/orly-write-unit-test/SKILL.md +10 -1
- package/src/cli.test.ts +2 -2
- package/src/cli.ts +19 -75
- package/src/cli_help.ts +69 -0
- package/src/command_limits.ts +20 -0
- package/src/command_process.test.ts +109 -0
- package/src/command_process.ts +88 -0
- package/src/command_runner.test.ts +88 -0
- package/src/command_runner.ts +33 -0
- package/src/comprehension_cache.test.ts +123 -0
- package/src/config.test.ts +5 -4
- package/src/config.ts +26 -164
- package/src/config_discovery.ts +159 -0
- package/src/config_validation.test.ts +56 -0
- package/src/config_validation.ts +25 -0
- package/src/criteria.test.ts +1 -1
- package/src/criteria.ts +10 -26
- package/src/criteria_spec.ts +12 -20
- package/src/criteria_support.ts +2 -19
- package/src/doc_reads.test.ts +42 -0
- package/src/doc_rules.ts +2 -2
- package/src/evaluation_resources.test.ts +64 -0
- package/src/execution/config.ts +22 -0
- package/src/execution/plan.test.ts +65 -0
- package/src/execution/plan.ts +51 -0
- package/src/gates.ts +9 -6
- package/src/gates_spec.test.ts +52 -6
- package/src/gates_test_support.ts +9 -7
- package/src/install.test.ts +38 -222
- package/src/install.ts +117 -308
- package/src/install_loaders.test.ts +203 -0
- package/src/install_nested.test.ts +2 -2
- package/src/install_packs.test.ts +66 -6
- package/src/installation/hooks.ts +63 -0
- package/src/installation/lock.test.ts +97 -0
- package/src/installation/lock.ts +56 -0
- package/src/installation/migration.test.ts +212 -0
- package/src/installation/migration.ts +65 -0
- package/src/installation/plan.ts +96 -0
- package/src/installation/transaction.ts +126 -0
- package/src/installation_preservation.test.ts +48 -0
- package/src/judgments/advice.test.ts +38 -0
- package/src/judgments/advice.ts +32 -0
- package/src/judgments/command.integration.test.ts +47 -0
- package/src/judgments/command.ts +90 -0
- package/src/judgments/constants.ts +55 -0
- package/src/judgments/evidence.test.ts +48 -0
- package/src/judgments/evidence.ts +34 -0
- package/src/judgments/files.test.ts +62 -0
- package/src/judgments/files.ts +73 -0
- package/src/judgments/questions.test.ts +19 -0
- package/src/judgments/questions.ts +85 -0
- package/src/judgments/replay.test.ts +43 -0
- package/src/judgments/replay.ts +66 -0
- package/src/judgments/runner.integration.test.ts +165 -0
- package/src/judgments/runner.ts +97 -0
- package/src/judgments/scan.test.ts +19 -0
- package/src/judgments/scan.ts +40 -0
- package/src/judgments/syntax.test.ts +115 -0
- package/src/judgments/syntax.ts +71 -0
- package/src/judgments/syntax_worker.ts +70 -0
- package/src/judgments/test_support.ts +60 -0
- package/src/judgments/transport.integration.test.ts +63 -0
- package/src/judgments/transport.ts +35 -0
- package/src/judgments/types.test.ts +43 -0
- package/src/judgments/types.ts +66 -0
- package/src/judgments/wire.test.ts +48 -0
- package/src/judgments/wire.ts +40 -0
- package/src/loaders.test.ts +13 -16
- package/src/loaders.ts +28 -10
- package/src/model.test.ts +20 -3
- package/src/model.ts +7 -18
- package/src/pack_hygiene.test.ts +42 -1
- package/src/pack_hygiene.ts +18 -8
- package/src/references.ts +15 -7
- package/src/release_inventory.test.ts +80 -0
- package/src/render.test.ts +1 -1
- package/src/render.ts +3 -8
- package/src/required_scanner.test.ts +36 -0
- package/src/review_poll.test.ts +158 -0
- package/src/scanner_scope.test.ts +202 -0
- package/src/setup.test.ts +9 -6
- package/src/spec_baseline.test.ts +1 -1
- package/src/spec_completion.test.ts +74 -0
- package/src/spec_obligations.ts +64 -0
- package/src/spec_rehearsal.test.ts +182 -0
- package/src/spec_template_io.test.ts +11 -9
- package/src/surfaces.test.ts +2 -0
- package/src/surfaces.ts +1 -1
- package/src/validation.ts +7 -4
- package/src/verify.test.ts +18 -2
- package/src/verify.ts +7 -3
package/.githooks/pre-push
CHANGED
|
@@ -32,7 +32,8 @@ if command -v gitleaks >/dev/null 2>&1; then
|
|
|
32
32
|
exit 1
|
|
33
33
|
fi
|
|
34
34
|
else
|
|
35
|
-
echo "pre-push: gitleaks
|
|
35
|
+
echo "pre-push: required gitleaks is not installed — install it with mise before pushing" >&2
|
|
36
|
+
exit 1
|
|
36
37
|
fi
|
|
37
38
|
|
|
38
39
|
GOVERNANCE_PATTERN='^((core|packs|schemas|src)/|(registry|repositories)\.json|AGENTS\.md|SOUL\.md|dispatch/|audits/|docs/(EXECUTE_DOC_READS|ORLY_ARCHITECTURE|HARNESS_VERIFY_OUTPUT|DOCUMENTATION_RULES|TEMPLATE)\.md|evals/|fixtures/|\.githooks/|Makefile|README\.md|package\.json|bun\.lock|tsconfig\.json)'
|
package/AGENTS.md
CHANGED
|
@@ -90,7 +90,7 @@ Auto-memory is **disabled** (`autoMemoryEnabled: false` + `CLAUDE_CODE_DISABLE_A
|
|
|
90
90
|
- No new `make` targets without a distinct caller (CI job, spec-mandated gate, or a workflow existing targets can't express) — check `make/*.mk` first; extend over near-duplicate wrappers.
|
|
91
91
|
- `*.zig` → read `dispatch/write_zig.md`; ZIG GATE fires.
|
|
92
92
|
- Auth-flow (token-minting handlers, credential-typed spec dimensions, the repository's auth directories) → read the repository's `docs/AUTH.md` first, where it exists.
|
|
93
|
-
- **Indy's reference checkouts** (
|
|
93
|
+
- **Indy's reference checkouts** (`~/Projects/`): TypeScript → `oss/supabase/apps/studio` + `oss/supabase/packages/{ui,ui-patterns}` + `oss/cli`; Zig → `oss/ghostty/src/`; Rust → `oss/rs/exonum` + `oss/rs/arrow-rs` + `agentsfleet/rustd/` + `oss/rs/builder/components/builder-core/`. Missing → search `oss/rs/`; ask before cloning.
|
|
94
94
|
|
|
95
95
|
**Forge detection:** `github.com` → `gh`; `gitlab.com` → `glab`. Check `git remote -v`.
|
|
96
96
|
|
|
@@ -120,24 +120,24 @@ Guards fire pre-hoc regardless of lifecycle stage. Override: `<GATE>: SKIPPED pe
|
|
|
120
120
|
|
|
121
121
|
**🚦 Gate-flag triage** — gate fires → never silence, never harness-patch. **Mechanical** (obvious deterministic fix: fmt, lint-autofix, literal → const, over-length → split, dead code): auto-apply + inform the user in one line. **Judgment** (design call / weakened guarantee / security boundary / possible false-positive): STOP, surface the ask — 📟 flagged (symbol·file·line) · 🔦 fix scope (files·lines·follow-on) · 📈 what we gain · 💥 if not fixed (debt·blockages) · ☠️ my call — the user decides fix-or-defer. Never unilaterally call a flag a false-positive.
|
|
122
122
|
|
|
123
|
-
**Seeded `.
|
|
123
|
+
**Seeded `.orly/orly.json`?** Complete it first — `verify.*`, `surfaces`, opt-in packs: `dispatch/lifecycle.md` §Bootstrap.
|
|
124
124
|
|
|
125
125
|
**Rule paths resolve relative to this repository's root.** Every `dispatch/…`, `docs/…`, and `audits/…` path a rule cites is a real file here — `orly init`/`orly update` materialised it from the packs this repository selected. A path your repo lacks means its sources never selected that pack, not that the reference is broken.
|
|
126
126
|
|
|
127
127
|
**Dispatch index — full rule prose in each `dispatch/<entry>.md` façade. Read the façade when its trigger fires — sectioned: scan headers, read the sections the diff touches.** Trigger-surface extensions: `*.zig`, `*.ts`, `*.tsx`, `*.js`, `*.jsx`, `*.py`, `*.rs`, `*.go`, `*.sh`, `*.sql`, `*.mdx`, and public OpenAPI prose. Latent `.md` per entry, deterministic `.sh` where mechanisable. Signals: 🟢 pass · 🟠 warn · 🔴 fail · 🛑 blocked · 🔥 critical · 🤔 judgment-only · 🟣 delegated. Output glyphs: 🧲 eval · 🛍️ evidence · 👮 security · ⛈️ rule · 💡 info · 📌 note. The router below **is** the gate set.
|
|
128
128
|
|
|
129
|
-
**Legacy-workaround family** — four rules together: **RULE NDC** (no dead code at write time, `docs/greptile-learnings/RULES.md`), **RULE NLR** (touch-it-fix-it cleanup), **RULE NLG** (no
|
|
129
|
+
**Legacy-workaround family** — four rules together: **RULE NDC** (no dead code at write time, `docs/greptile-learnings/RULES.md`), **RULE NLR** (touch-it-fix-it cleanup), **RULE NLG** (no speculative compatibility framing; selected product version policy applies), **Legacy-Design Consult Guard** (user A/B/C consult before patching/keeping/testing legacy). **No compatibility aliases** — old verbs, flag aliases, route wrappers, env aliases, fallback spellings — unless the user explicitly asks in-session.
|
|
130
130
|
|
|
131
131
|
| Trigger — when you… | Dispatch | Latent façade carries · override |
|
|
132
132
|
|---|---|---|
|
|
133
|
-
| write `*.zig` | `write_zig` | `dispatch/write_zig.md` — memory safety, init/deinit + `errdefer`, pub shape verdict (`FILE SHAPE DECISION` — auto-mode does NOT cover), tagged unions, length caps, cross-compile
|
|
133
|
+
| write `*.zig` | `write_zig` | `dispatch/write_zig.md` — memory safety, init/deinit + `errdefer`, pub shape verdict (`FILE SHAPE DECISION` — auto-mode does NOT cover), tagged unions, length caps, declared cross-compile matrix · `ZIG GATE` / `PUB GATE` / `LIFECYCLE GATE: SKIPPED per user override (reason: ...)`. |
|
|
134
134
|
| write `*.ts`/`*.tsx`/`*.js`/`*.jsx` | `write_ts_adhere_bun` | `dispatch/write_ts_adhere_bun.md` — TS FILE SHAPE DECISION at PLAN, `const`/import/Bun-primitive discipline, raw-HTML → design-system primitive, `*-[...]` → token utility · `UI GATE` / `DESIGN TOKEN GATE: SKIPPED per user override (reason: ...)`; auto-mode does NOT cover; reason must cite a concrete external constraint. |
|
|
135
135
|
| write `*.rs` | `write_rust` | `dispatch/write_rust.md` — ownership, justified `unsafe`, preserved error variants, feature combinations, deterministic concurrency tests · 🤔 judgment-only. |
|
|
136
136
|
| write `*.go` | `write_go` | `dispatch/write_go.md` — wrapped errors, goroutine exit paths, context first, defer at acquire, `-race` · 🤔 judgment-only. |
|
|
137
137
|
| write `*.py` | `write_python` | `dispatch/write_python.md` — standard-library parsing, context-managed resources, boundary validation, specific exceptions · 🤔 judgment-only. |
|
|
138
138
|
| write `*.sh` | `write_shell` | `dispatch/write_shell.md` — quoted expansions, array arguments, temp-file cleanup, no untrusted `eval`, shell compatibility · 🤔 judgment-only. |
|
|
139
139
|
| write `*.mdx` | `write_mdx` | `dispatch/write_mdx.md` — Markdown JSX structure, front matter, links, code fences, image descriptions, Mintlify isolation · 🤔 judgment-only. |
|
|
140
|
-
| write
|
|
140
|
+
| write SQL or migration registration | `write_sql` | `dispatch/write_sql.md` — schema / migration rules, repository live-data policy and owner approval for destructive changes; product-specific Schema Table Removal Guard only when selected. |
|
|
141
141
|
| write **any** source file | `write_any` | `dispatch/write_any.md` — File & Function Length, LOGGING, MILESTONE-ID, ERROR REGISTRY (repo-declared scheme, delegated), UFS named-constants, GREPTILE end-of-turn read, legacy family · `LENGTH` / `LOGGING` / `MILESTONE ID` / `UFS GATE: SKIPPED per user override (reason: ...)`; auto-mode does NOT cover. |
|
|
142
142
|
| write a spec under `docs/v*/…` | `write_spec` | `dispatch/write_spec.md` — required + prohibited spec sections (SPEC TEMPLATE GATE), `docs/TEMPLATE.md` shape · `SPEC TEMPLATE GATE: SKIPPED per user override (reason: ...)`; auto-mode does NOT cover; reason must cite a concrete external constraint. |
|
|
143
143
|
| write `src/http/handlers/**` / OpenAPI | `write_http` | `dispatch/write_http.md` — REST API design rules; reads `docs/REST_API_DESIGN_GUIDELINES.md` before · 🟣 delegated. |
|
|
@@ -148,7 +148,7 @@ Guards fire pre-hoc regardless of lifecycle stage. Override: `<GATE>: SKIPPED pe
|
|
|
148
148
|
| claim "tests pass / ready / shipping" | `verify` | `dispatch/verify.md` — verification tiers (`make` canonical; package-scoped runners are **not** verification), done-message glyph format · 🤔 judgment-only, `VERIFY GATE: <target> skipped per environment constraint (reason: ...)` only when genuinely unrunnable. |
|
|
149
149
|
| name a stream/channel/Redis namespace/queue/RPC/Postgres schema, or describe a flow | `name_architecture` | `dispatch/name_architecture.md` — architecture-consult discipline; grep relevant `docs/architecture/` (chat brainstorming counts) · **no override** — doc wins until reconciled. |
|
|
150
150
|
| run a lifecycle stage (open→close a stream, worktree setup, milestone bootstrap) | `lifecycle` | `dispatch/lifecycle.md` — stage runbooks: CHORE(open/close) checklists, PLAN expansions, spec discipline, deferral format, pre-PR gates, LAND · 🤔 judgment-only. |
|
|
151
|
-
| edit the governance (`core/**`, `packs/**`, `schemas/**`, `src/**`, `registry.json`, generated `AGENTS.md`, `dispatch/`, audits, hooks) | `edit_rules` | `dispatch/edit_rules.md` — runs `make audit`, the `audits/agents-md.md` questionnaire, live comprehension evaluation when semantics change, and generated evidence · **no override** from the agent
|
|
151
|
+
| edit the governance (`core/**`, `packs/**`, `schemas/**`, `src/**`, `registry.json`, generated `AGENTS.md`, `dispatch/`, audits, hooks) | `edit_rules` | `dispatch/edit_rules.md` — runs `make audit`, the `audits/agents-md.md` questionnaire, live comprehension evaluation when semantics change, and generated evidence · **no override** from the agent. |
|
|
152
152
|
|
|
153
153
|
---
|
|
154
154
|
|
|
@@ -164,7 +164,7 @@ Guards fire pre-hoc regardless of lifecycle stage. Override: `<GATE>: SKIPPED pe
|
|
|
164
164
|
|
|
165
165
|
| Event | Action |
|
|
166
166
|
|---|---|
|
|
167
|
-
| New milestone, plan-{eng,ceo,design}-review, `TODO.md` attempt | Invoke `orly-spec-new`. Land in `docs/v{N}/pending/`, `Status: PENDING`, commit on
|
|
167
|
+
| New milestone, plan-{eng,ceo,design}-review, `TODO.md` attempt | Invoke `orly-spec-new`. Land in `docs/v{N}/pending/`, `Status: PENDING`, commit on the detected default branch. |
|
|
168
168
|
| Begin implementation OR branch carries spec changes in `pending/` | CHORE(open): `pending/`→`active/`, `Status: IN_PROGRESS` + `Branch:`, create worktree, commit on feature branch. **No code until 4 steps committed.** |
|
|
169
169
|
| Every commit during implementation | Mark completed Dimensions/Sections `DONE` same commit as the code. |
|
|
170
170
|
| All work complete, before PR | CHORE(close). |
|
|
@@ -205,7 +205,7 @@ Edit only approved scope; no opportunistic refactors. Stay in active worktree. C
|
|
|
205
205
|
|
|
206
206
|
### CONFORM
|
|
207
207
|
|
|
208
|
-
Runs after EXECUTE, before VERIFY. Invokes the `conform` commands the repository declares in `.
|
|
208
|
+
Runs after EXECUTE, before VERIFY. Invokes the `conform` commands the repository declares in `.orly/orly.json` and aggregates every gate verdict. Any 🔴 returns to EXECUTE; the lifecycle does not advance. This is the `work` gate's tier and the pre-commit hook runs it at every commit: declare a `conform` costing seconds, not minutes.
|
|
209
209
|
In `agentsfleet` this stage is `make harness-verify`; its output block and end-of-turn audit detail live in `docs/HARNESS_VERIFY_OUTPUT.md`. Required rows: FILE SHAPE, PUB GATE, LENGTH GATE, MILESTONE-ID GATE, ZIG GATE, UI GATE, DESIGN TOKEN GATE, UFS GATE, SCHEMA GUARD, GREPTILE GATE, Architecture consult, Coverage, and `/orly-write-unit-test`.
|
|
210
210
|
|
|
211
211
|
### VERIFY
|
|
@@ -257,12 +257,6 @@ Required when spec involved — after last COMMIT, before PR. Also runs when par
|
|
|
257
257
|
> carries the judgment — how Indy decides, what he accepts, what he rejects.
|
|
258
258
|
> In force every session; standing orders, not suggestions. Re-read when
|
|
259
259
|
> padding or burying the answer.
|
|
260
|
-
> Evidence lives in `SOUL_LOG.md` in the orly repository: 24 rows of what I
|
|
261
|
-
> did, what Indy said, and the rule it produced. It does not ship — the
|
|
262
|
-
> package allowlist keeps personal files out of a public release — so these
|
|
263
|
-
> rules carry no back-cites and stand on their own words. Each row names its
|
|
264
|
-
> rule, which is the direction that resolves. Append one the moment he
|
|
265
|
-
> corrects you.
|
|
266
260
|
|
|
267
261
|
## Reply shape
|
|
268
262
|
|
|
@@ -270,11 +264,9 @@ Optimise for one thing: he never has to ask twice.
|
|
|
270
264
|
|
|
271
265
|
- **Answer first.** Verdict in sentence one. Yes/no questions get yes/no.
|
|
272
266
|
- **Check before asking.** If git, `gh`, or the file system holds the answer,
|
|
273
|
-
read it.
|
|
274
|
-
laziness.
|
|
267
|
+
read it.
|
|
275
268
|
- **Decide, do not offer.** One option and why. A menu is right only when the
|
|
276
|
-
choice is his taste; when the gap is my missing knowledge, go and get it
|
|
277
|
-
.
|
|
269
|
+
choice is his taste; when the gap is my missing knowledge, go and get it.
|
|
278
270
|
- **Do the revertible work, then report.** A branch, a Pull Request, a backup:
|
|
279
271
|
all revertible, so no permission needed. Stop and ask where undo is real
|
|
280
272
|
work or impossible — force-push, deleting a remote branch, publishing,
|
|
@@ -298,7 +290,7 @@ Optimise for one thing: he never has to ask twice.
|
|
|
298
290
|
fake-profound kickers. End on the clearest concrete sentence. The banned-word
|
|
299
291
|
list lives in `docs/DOCUMENTATION_RULES.md` §DOC-05, §DOC-07, §DOC-14b, and
|
|
300
292
|
`orly gate verify` REPORTS it — `docs.language` prints findings and stays
|
|
301
|
-
green.
|
|
293
|
+
green.
|
|
302
294
|
|
|
303
295
|
## Reading Indy
|
|
304
296
|
|
|
@@ -319,27 +311,25 @@ Optimise for one thing: he never has to ask twice.
|
|
|
319
311
|
included; an external rule quote is not a rewrite mandate — local convention
|
|
320
312
|
wins; skills are config, not code (one `SKILL.md` + one `TRIGGER.md`, no
|
|
321
313
|
YAML allowlists).
|
|
322
|
-
- **An approved default stands** — don't re-open it with tuning menus
|
|
323
|
-
.
|
|
314
|
+
- **An approved default stands** — don't re-open it with tuning menus.
|
|
324
315
|
- **Governance edits:** cut rationale tails, never triggers — ask each
|
|
325
316
|
clause "does this fire, or merely justify?" `make audit` caps the
|
|
326
|
-
rendered `AGENTS.md` (this file inlined)
|
|
327
|
-
means making room.
|
|
317
|
+
rendered `AGENTS.md` (this file inlined); adding a rule means making room.
|
|
328
318
|
- **Corrections route by shape** (`AGENTS.md` §Memory Discipline): rule →
|
|
329
|
-
dispatch façade;
|
|
330
|
-
|
|
331
|
-
without writing it down is a lie.
|
|
319
|
+
dispatch façade; working style → the applicable rule here;
|
|
320
|
+
architecture → repo docs; in-flight state → the active spec.
|
|
332
321
|
|
|
333
322
|
## Code is the design
|
|
334
323
|
|
|
335
324
|
- **Load-bearing behaviour facts come from source on the target branch** —
|
|
336
|
-
never from handoffs, specs, `api.json`, or any prose, eng-reviewed or not
|
|
337
|
-
.
|
|
325
|
+
never from handoffs, specs, `api.json`, or any prose, eng-reviewed or not.
|
|
338
326
|
- **Reference canon** = `AGENTS.md` §Operational defaults, one list; open the
|
|
339
327
|
reference, then propose. supabase's `data/fetchers.ts` is the template read.
|
|
340
328
|
- **"Broken for us" means I missed the delta.** A pattern shipping in a
|
|
341
329
|
trusted repo is sound; diff our call-site against theirs (version, config,
|
|
342
330
|
wiring) before blaming the principle.
|
|
331
|
+
- **Lint, test and format go through the narrowest make target**, inner loop
|
|
332
|
+
too (`make lint-app` is oxlint + `tsc`). `eslint` is a hand-roll; never run it.
|
|
343
333
|
- **Fold-into-PR test: completes vs adds**. Folding is right when
|
|
344
334
|
the addition finishes an incoherence the PR would otherwise merge; scope
|
|
345
335
|
creep when merely adjacent. Lead with the call; Indy's timing overrides.
|
|
@@ -353,12 +343,12 @@ Optimise for one thing: he never has to ask twice.
|
|
|
353
343
|
5. Every behaviour claim read from source on the target branch?
|
|
354
344
|
6. Slop scan — contrasts, kickers, banned words?
|
|
355
345
|
7. Acronym + banned-vocab scans (`AGENTS.md`)?
|
|
356
|
-
8. Corrected this session?
|
|
346
|
+
8. Corrected this session? Update the rule where the correction applies.
|
|
357
347
|
|
|
358
348
|
---
|
|
359
349
|
|
|
360
|
-
*Keep every line actionable
|
|
361
|
-
|
|
350
|
+
*Keep every line actionable. A fact that fires nowhere has no place here.
|
|
351
|
+
Edit here, then `orly update`.*
|
|
362
352
|
|
|
363
353
|
---
|
|
364
354
|
|
package/README.md
CHANGED
|
@@ -42,6 +42,25 @@ Works with Claude Code, Codex, OpenCode, and Amp.
|
|
|
42
42
|
|
|
43
43
|
---
|
|
44
44
|
|
|
45
|
+
## 0.12.0: migration verification
|
|
46
|
+
|
|
47
|
+
0.12.0 is a local release candidate. Published 0.11.0 already provides the
|
|
48
|
+
`.orly/` layout and the six existing `orly judge` questions.
|
|
49
|
+
This release focuses on package verification, migration evidence and clearer setup guidance; it adds no new runtime judgment question.
|
|
50
|
+
|
|
51
|
+
The `agentsfleet` trial upgraded a dedicated worktree from 0.10.14 using the packed candidate.
|
|
52
|
+
Owner files, hooks and verification commands survived; a second update wrote nothing.
|
|
53
|
+
See the [release report](evals/release/release-report.md) for exact proof and remaining release checks.
|
|
54
|
+
|
|
55
|
+
Jev, TypeSafe's bounded judgment model, supplies advice only when requested.
|
|
56
|
+
Existing deterministic checks retain control of gate results.
|
|
57
|
+
The comparison evaluator is parked for proposed 0.13 work; model accuracy and candidate benefits remain unmeasured.
|
|
58
|
+
See the [judgment reference](docs/JUDGMENTS.md) for evidence selection, offline replay and explicit source upload.
|
|
59
|
+
|
|
60
|
+
The install commands below fetch the published package. They do not select this unpublished candidate.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
45
64
|
## Prerequisites
|
|
46
65
|
|
|
47
66
|
| You need | Why | Version |
|
|
@@ -49,32 +68,33 @@ Works with Claude Code, Codex, OpenCode, and Amp.
|
|
|
49
68
|
| [bun](https://bun.sh) | runs orly; `bunx` fetches it | ≥ 1.4.0 |
|
|
50
69
|
| git | orly writes the hooks; `orly gate` reads the branch | any |
|
|
51
70
|
| a coding agent | something has to read the rules | Claude Code, Codex, OpenCode, or Amp |
|
|
52
|
-
| your own check commands | `orly gate` runs whatever `.
|
|
71
|
+
| your own check commands | `orly gate` runs whatever `.orly/orly.json` names | whatever your repository already runs |
|
|
53
72
|
|
|
54
73
|
> [!IMPORTANT]
|
|
55
74
|
> git never clones hooks. Every teammate runs `orly init` once in their own checkout, even after the rules are committed.
|
|
56
75
|
|
|
57
76
|
---
|
|
58
77
|
|
|
59
|
-
## Install
|
|
78
|
+
## Install the published package
|
|
60
79
|
|
|
61
80
|
Run this inside the repository you want governed.
|
|
62
81
|
|
|
63
82
|
```bash
|
|
64
|
-
bun
|
|
65
|
-
orly init
|
|
83
|
+
bunx --bun @agentsfleet/orly init
|
|
66
84
|
```
|
|
67
85
|
|
|
68
86
|
orly scans your source, detects your languages, and installs only the rules that apply.
|
|
69
87
|
|
|
70
88
|
> [!TIP]
|
|
71
|
-
> Try `orly init --dry-run` first. It previews the generated rules and changes nothing.
|
|
89
|
+
> Try `bunx --bun @agentsfleet/orly init --dry-run` first. It previews the generated rules and changes nothing.
|
|
90
|
+
|
|
91
|
+
Complete any setup items printed by `init`, then run `bunx --bun @agentsfleet/orly doctor` and commit the generated files.
|
|
92
|
+
Use `bunx --bun @agentsfleet/orly <COMMAND>` for the commands below; `<COMMAND>` names the command and its options.
|
|
93
|
+
Generated Git hooks invoke the pinned package through `bunx`; Bun must be on the hook search path. No global orly installation or project dependency is required.
|
|
72
94
|
|
|
73
|
-
The Git hooks use the installed `orly` executable. Keep it on `PATH`.
|
|
74
|
-
Complete any setup items printed by `init`, then run `orly doctor` and commit the generated files.
|
|
75
95
|
Teammates get the rules on clone and run `orly init` to install their hooks.
|
|
76
96
|
|
|
77
|
-
Declare `conform` and at least one `verify.*` command in `.
|
|
97
|
+
Declare `conform` and at least one `verify.*` command in `.orly/orly.json`.
|
|
78
98
|
Orly runs your repository's commands; the verification name does not require a particular language or test runner.
|
|
79
99
|
For a documentation repository whose Makefile provides `test` and `lint`:
|
|
80
100
|
|
|
@@ -89,6 +109,45 @@ Here `test` checks documentation during work, and `lint` validates the site and
|
|
|
89
109
|
Markdown and Markdown JSX (MDX) repositories do not need application unit or integration suites.
|
|
90
110
|
`orly doctor` checks configuration and installed files; run the gates to verify the commands themselves.
|
|
91
111
|
|
|
112
|
+
Each invocation has a 30-minute deadline and a 64-mebibyte combined output budget.
|
|
113
|
+
Exceeding either limit fails the check, stops its child processes and prints a private output receipt path.
|
|
114
|
+
Set per-command overrides in `.orly/orly.json`, for example:
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
"limits": {
|
|
118
|
+
"verify.unit": { "timeout_ms": 1800000, "output_bytes": 67108864 }
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
The receipt retains all captured output until you remove its printed directory.
|
|
123
|
+
Unknown settings and malformed values are refused; `schemas/profile.schema.json` describes the repository configuration.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Upgrade from 0.10.x
|
|
128
|
+
|
|
129
|
+
Run the update from the consumer repository. If the repository owns its hooks, preserve them explicitly:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
bunx --bun @agentsfleet/orly update --no-hooks
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Expected: managed files move under `.orly/`; owner hooks remain unchanged. Conflicting owner edits stop the update and name the affected path.
|
|
136
|
+
Use the installed candidate executable for an unpublished release trial; the command above fetches the published version.
|
|
137
|
+
|
|
138
|
+
Update repository-owned callers that still read `.oracle/orly.json`, root `dispatch/`, or managed root audit paths.
|
|
139
|
+
Their replacements are `.orly/orly.json`, `.orly/dispatch/`, and `.orly/audits/`.
|
|
140
|
+
Repository-owned audit scripts and project documents retain their existing locations.
|
|
141
|
+
Review existing hooks before choosing an update without `--no-hooks`.
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
bunx --bun @agentsfleet/orly doctor
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Expected: installed rules match `.orly/orly.json` and work and verification commands are declared.
|
|
148
|
+
Then run the repository's declared checks; `doctor` alone does not run them.
|
|
149
|
+
An empty old directory can remain after its files move. Git does not track empty directories; remove one only after checking it is empty.
|
|
150
|
+
|
|
92
151
|
---
|
|
93
152
|
|
|
94
153
|
## What lands in your repository
|
|
@@ -97,24 +156,25 @@ Markdown and Markdown JSX (MDX) repositories do not need application unit or int
|
|
|
97
156
|
your-repo/
|
|
98
157
|
│
|
|
99
158
|
├── AGENTS.md ─────────────── yours. untouched, except one delimited pointer block
|
|
100
|
-
├──
|
|
159
|
+
├── .orly/AGENTS.md ────────── the generated rules: safety, dispatch router, lifecycle
|
|
101
160
|
│
|
|
102
161
|
├── CLAUDE.md ─────────────── one import line; the only file Claude Code loads itself
|
|
103
162
|
├── opencode.json ─────────── names both rule files; opencode loads nothing by default
|
|
104
163
|
│
|
|
105
|
-
├── dispatch/*.md
|
|
106
|
-
├── audits
|
|
107
|
-
├── docs/*.md
|
|
164
|
+
├── .orly/dispatch/*.md ───── one rule page per kind of work
|
|
165
|
+
├── .orly/audits/ ─────────── the deterministic gates
|
|
166
|
+
├── .orly/docs/*.md ───────── the standards those rules cite
|
|
167
|
+
├── .orly/skills/ ─────────── full skill instructions
|
|
108
168
|
│
|
|
109
|
-
├── .claude/skills/ ─────────
|
|
169
|
+
├── .claude/skills/ ───────── thin discovery entries per agent host
|
|
110
170
|
├── .agents/skills/
|
|
111
171
|
├── .opencode/skills/
|
|
112
172
|
│
|
|
113
|
-
├── .
|
|
114
|
-
└── .
|
|
173
|
+
├── .orly/hooks/ ──────────── pinned bunx pre-commit and pre-push calls
|
|
174
|
+
└── .orly/orly.json ─────── which packs, which commands, what orly installed
|
|
115
175
|
```
|
|
116
176
|
|
|
117
|
-
`orly init` also seeds `.
|
|
177
|
+
`orly init` also seeds `.orly/orly.json` with any gate commands it finds in your `Makefile` or `package.json`. Fill in the rest, commit it, and every clone gates identically.
|
|
118
178
|
|
|
119
179
|
---
|
|
120
180
|
|
|
@@ -153,7 +213,7 @@ The spec is a file on disk, and **its directory is the status**. Only the stages
|
|
|
153
213
|
flowchart TB
|
|
154
214
|
you["🤠 you<br/>add webhook retries"]
|
|
155
215
|
agent["🦉 agent<br/>writes the spec"]
|
|
156
|
-
pending["📄 docs/v1/pending/<br/><small>spec committed on
|
|
216
|
+
pending["📄 docs/v1/pending/<br/><small>spec committed on default branch</small>"]
|
|
157
217
|
|
|
158
218
|
you --> agent
|
|
159
219
|
agent --> pending
|
|
@@ -188,7 +248,7 @@ flowchart TB
|
|
|
188
248
|
|
|
189
249
|
| Directory | Meaning |
|
|
190
250
|
|---|---|
|
|
191
|
-
| `docs/v1/pending/` | the spec is written and committed on
|
|
251
|
+
| `docs/v1/pending/` | the spec is written and committed on the detected default branch |
|
|
192
252
|
| `docs/v1/active/` | branch cut, comparison revision recorded, measurement pending; no code until it commits |
|
|
193
253
|
| `docs/v1/done/` | gates green, Pull Request opens |
|
|
194
254
|
|
|
@@ -211,16 +271,22 @@ Each edit activates the rule page for that file kind. A gate proves whether the
|
|
|
211
271
|
| File | Owner | On `orly update` |
|
|
212
272
|
|---|---|---|
|
|
213
273
|
| `AGENTS.md` | **you** | untouched, except one delimited pointer block |
|
|
214
|
-
|
|
|
215
|
-
| `CLAUDE.md` | **you** |
|
|
274
|
+
| `.orly/AGENTS.md` | orly | rewritten |
|
|
275
|
+
| `CLAUDE.md` | **you** | creates a missing loader; refreshes owned imports; preserves unrelated content |
|
|
216
276
|
| `opencode.json` | **you** | gains the two rule files in `instructions`; nothing else touched |
|
|
217
277
|
|
|
218
|
-
`AGENTS.md` stays yours
|
|
278
|
+
`AGENTS.md` stays yours. orly writes its rules beside it and points at them from one delimited block.
|
|
279
|
+
|
|
280
|
+
The last two files deliver rules through each runtime's loader. Codex and Amp auto-load `AGENTS.md`, which carries the pointer block onward.
|
|
281
|
+
|
|
282
|
+
Claude Code loads `CLAUDE.md` and nothing else. opencode loads only what its `instructions` name.
|
|
219
283
|
|
|
220
|
-
|
|
284
|
+
orly writes the required import when the loader is missing and refreshes its own delimited block or recognized generated loader.
|
|
285
|
+
Unrelated owner content stays unchanged. Resolved links inside the repository are preserved; unresolved or escaping links refuse the update.
|
|
221
286
|
|
|
222
287
|
> [!WARNING]
|
|
223
|
-
> orly refuses
|
|
288
|
+
> orly refuses unowned conflicting content and executable owner hooks. Review explicit `--force` or `--no-hooks` choices before proceeding.
|
|
289
|
+
> Preflight conflicts preserve owner bytes. An interruption during writes may leave completed steps and a journal; rerun to recover after resolving conflicts.
|
|
224
290
|
|
|
225
291
|
---
|
|
226
292
|
|
|
@@ -268,12 +334,12 @@ orly scans four directories deep. It skips `node_modules`, `target`, `.venv`, an
|
|
|
268
334
|
| `workflow.specifications` | the spec template and the gate that checks its shape |
|
|
269
335
|
| `workflow.skills` | four skills, written once for all four agents |
|
|
270
336
|
|
|
271
|
-
### Opt-in, only when `.
|
|
337
|
+
### Opt-in, only when `.orly/orly.json` names them
|
|
272
338
|
|
|
273
339
|
| Pack | What it adds | Why it is opt-in |
|
|
274
340
|
|---|---|---|
|
|
275
341
|
| 🦉 `workflow.governance` | the rules for editing rules, their questionnaire, and orly's architecture | only useful if you edit orly itself |
|
|
276
|
-
| `product.agentsfleet` |
|
|
342
|
+
| `product.agentsfleet` | two audit scripts, the verify dispatch page, three `agentsfleet` docs | a product surface that means nothing in another checkout |
|
|
277
343
|
| 🤠 `persona.indy` | no files; it rewrites the address handles and tone in the generated rules | one maintainer's name and voice |
|
|
278
344
|
|
|
279
345
|
---
|
|
@@ -326,8 +392,8 @@ make audit
|
|
|
326
392
|
`make audit` is the bar. If it passes, the change is reviewable. Its steps run in parallel, around half a minute:
|
|
327
393
|
|
|
328
394
|
- **typecheck and unit tests**
|
|
329
|
-
- **render determinism
|
|
330
|
-
- **gate fixtures
|
|
395
|
+
- **render determinism:** the same sources always produce the same rules
|
|
396
|
+
- **gate fixtures:** every gate proved against one passing and one failing case
|
|
331
397
|
|
|
332
398
|
Coverage is gated at a 90% line floor. The workflow fails below it.
|
|
333
399
|
|
|
@@ -370,7 +436,7 @@ It prints the rules it would install, already rendered for the languages it foun
|
|
|
370
436
|
Then hand your agent the prompt orly was built for:
|
|
371
437
|
|
|
372
438
|
```text
|
|
373
|
-
Read
|
|
439
|
+
Read .orly/AGENTS.md. Tell me which of my last ten commits would have tripped a
|
|
374
440
|
gate, and name the rule that caught each one.
|
|
375
441
|
```
|
|
376
442
|
|
package/SOUL.md
CHANGED
|
@@ -5,12 +5,6 @@
|
|
|
5
5
|
> carries the judgment — how Indy decides, what he accepts, what he rejects.
|
|
6
6
|
> In force every session; standing orders, not suggestions. Re-read when
|
|
7
7
|
> padding or burying the answer.
|
|
8
|
-
> Evidence lives in `SOUL_LOG.md` in the orly repository: 24 rows of what I
|
|
9
|
-
> did, what Indy said, and the rule it produced. It does not ship — the
|
|
10
|
-
> package allowlist keeps personal files out of a public release — so these
|
|
11
|
-
> rules carry no back-cites and stand on their own words. Each row names its
|
|
12
|
-
> rule, which is the direction that resolves. Append one the moment he
|
|
13
|
-
> corrects you.
|
|
14
8
|
|
|
15
9
|
## Reply shape
|
|
16
10
|
|
|
@@ -18,11 +12,9 @@ Optimise for one thing: he never has to ask twice.
|
|
|
18
12
|
|
|
19
13
|
- **Answer first.** Verdict in sentence one. Yes/no questions get yes/no.
|
|
20
14
|
- **Check before asking.** If git, `gh`, or the file system holds the answer,
|
|
21
|
-
read it.
|
|
22
|
-
laziness.
|
|
15
|
+
read it.
|
|
23
16
|
- **Decide, do not offer.** One option and why. A menu is right only when the
|
|
24
|
-
choice is his taste; when the gap is my missing knowledge, go and get it
|
|
25
|
-
.
|
|
17
|
+
choice is his taste; when the gap is my missing knowledge, go and get it.
|
|
26
18
|
- **Do the revertible work, then report.** A branch, a Pull Request, a backup:
|
|
27
19
|
all revertible, so no permission needed. Stop and ask where undo is real
|
|
28
20
|
work or impossible — force-push, deleting a remote branch, publishing,
|
|
@@ -46,7 +38,7 @@ Optimise for one thing: he never has to ask twice.
|
|
|
46
38
|
fake-profound kickers. End on the clearest concrete sentence. The banned-word
|
|
47
39
|
list lives in `docs/DOCUMENTATION_RULES.md` §DOC-05, §DOC-07, §DOC-14b, and
|
|
48
40
|
`orly gate verify` REPORTS it — `docs.language` prints findings and stays
|
|
49
|
-
green.
|
|
41
|
+
green.
|
|
50
42
|
|
|
51
43
|
## Reading Indy
|
|
52
44
|
|
|
@@ -67,27 +59,25 @@ Optimise for one thing: he never has to ask twice.
|
|
|
67
59
|
included; an external rule quote is not a rewrite mandate — local convention
|
|
68
60
|
wins; skills are config, not code (one `SKILL.md` + one `TRIGGER.md`, no
|
|
69
61
|
YAML allowlists).
|
|
70
|
-
- **An approved default stands** — don't re-open it with tuning menus
|
|
71
|
-
.
|
|
62
|
+
- **An approved default stands** — don't re-open it with tuning menus.
|
|
72
63
|
- **Governance edits:** cut rationale tails, never triggers — ask each
|
|
73
64
|
clause "does this fire, or merely justify?" `make audit` caps the
|
|
74
|
-
rendered `AGENTS.md` (this file inlined)
|
|
75
|
-
means making room.
|
|
65
|
+
rendered `AGENTS.md` (this file inlined); adding a rule means making room.
|
|
76
66
|
- **Corrections route by shape** (`AGENTS.md` §Memory Discipline): rule →
|
|
77
|
-
dispatch façade;
|
|
78
|
-
|
|
79
|
-
without writing it down is a lie.
|
|
67
|
+
dispatch façade; working style → the applicable rule here;
|
|
68
|
+
architecture → repo docs; in-flight state → the active spec.
|
|
80
69
|
|
|
81
70
|
## Code is the design
|
|
82
71
|
|
|
83
72
|
- **Load-bearing behaviour facts come from source on the target branch** —
|
|
84
|
-
never from handoffs, specs, `api.json`, or any prose, eng-reviewed or not
|
|
85
|
-
.
|
|
73
|
+
never from handoffs, specs, `api.json`, or any prose, eng-reviewed or not.
|
|
86
74
|
- **Reference canon** = `AGENTS.md` §Operational defaults, one list; open the
|
|
87
75
|
reference, then propose. supabase's `data/fetchers.ts` is the template read.
|
|
88
76
|
- **"Broken for us" means I missed the delta.** A pattern shipping in a
|
|
89
77
|
trusted repo is sound; diff our call-site against theirs (version, config,
|
|
90
78
|
wiring) before blaming the principle.
|
|
79
|
+
- **Lint, test and format go through the narrowest make target**, inner loop
|
|
80
|
+
too (`make lint-app` is oxlint + `tsc`). `eslint` is a hand-roll; never run it.
|
|
91
81
|
- **Fold-into-PR test: completes vs adds**. Folding is right when
|
|
92
82
|
the addition finishes an incoherence the PR would otherwise merge; scope
|
|
93
83
|
creep when merely adjacent. Lead with the call; Indy's timing overrides.
|
|
@@ -101,10 +91,10 @@ Optimise for one thing: he never has to ask twice.
|
|
|
101
91
|
5. Every behaviour claim read from source on the target branch?
|
|
102
92
|
6. Slop scan — contrasts, kickers, banned words?
|
|
103
93
|
7. Acronym + banned-vocab scans (`AGENTS.md`)?
|
|
104
|
-
8. Corrected this session?
|
|
94
|
+
8. Corrected this session? Update the rule where the correction applies.
|
|
105
95
|
|
|
106
96
|
---
|
|
107
97
|
|
|
108
|
-
*Keep every line actionable
|
|
109
|
-
|
|
98
|
+
*Keep every line actionable. A fact that fires nowhere has no place here.
|
|
99
|
+
Edit here, then `orly update`.*
|
|
110
100
|
<!-- oracle-packs:end -->
|