@agentsfleet/orly 0.10.14 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/.githooks/pre-push +2 -1
  2. package/AGENTS.md +21 -31
  3. package/README.md +65 -29
  4. package/SOUL.md +13 -23
  5. package/audits/agents-md.md +67 -57
  6. package/audits/deinit-pairs.sh +13 -18
  7. package/audits/design-tokens.sh +9 -23
  8. package/audits/doc-read.sh +10 -33
  9. package/audits/doc-reads.ts +41 -0
  10. package/audits/error-codes.sh +18 -25
  11. package/audits/logging-rust.awk +145 -0
  12. package/audits/logging.sh +10 -166
  13. package/audits/msid-ui.sh +45 -18
  14. package/audits/rule-ledger-lib.sh +9 -6
  15. package/audits/rust-error.sh +20 -15
  16. package/audits/scope.sh +88 -0
  17. package/audits/spec-template.sh +2 -2
  18. package/audits/spec-template.ts +1 -1
  19. package/audits/sql-mod.sh +11 -14
  20. package/audits/ufs-strings.awk +164 -0
  21. package/audits/ufs.sh +10 -188
  22. package/core/operating-model.md +8 -8
  23. package/dispatch/edit_rules.md +8 -6
  24. package/dispatch/lib.sh +41 -26
  25. package/dispatch/lifecycle.md +12 -5
  26. package/dispatch/name_architecture.md +8 -3
  27. package/dispatch/verify.md +1 -1
  28. package/dispatch/write_any.md +10 -3
  29. package/dispatch/write_changelog.md +7 -4
  30. package/dispatch/write_go.md +1 -1
  31. package/dispatch/write_http.md +5 -7
  32. package/dispatch/write_python.md +1 -1
  33. package/dispatch/write_rust.md +17 -1
  34. package/dispatch/write_shell.md +1 -1
  35. package/dispatch/write_spec.md +3 -1
  36. package/dispatch/write_sql.md +28 -6
  37. package/dispatch/write_ts_adhere_bun.md +11 -0
  38. package/dispatch/write_zig.md +53 -21
  39. package/docs/CHANGELOG_VOICE.md +11 -2
  40. package/docs/EXECUTE_DOC_READS.md +10 -10
  41. package/docs/HARNESS_VERIFY_OUTPUT.md +6 -3
  42. package/docs/JUDGMENTS.md +153 -0
  43. package/docs/LIFECYCLE_PATTERNS.md +26 -16
  44. package/docs/LOGGING_STANDARD.md +39 -19
  45. package/docs/ORLY_ARCHITECTURE.md +77 -6
  46. package/docs/RELEASE_TEMPLATE.md +21 -5
  47. package/docs/REST_API_DESIGN_GUIDELINES.md +86 -21
  48. package/docs/RULE_ENFORCEMENT.md +6 -6
  49. package/docs/SCHEMA_CONVENTIONS.md +24 -3
  50. package/docs/TEMPLATE.md +4 -4
  51. package/docs/VERIFY_TIERS.md +2 -2
  52. package/docs/greptile-learnings/RULES.md +81 -26
  53. package/llms.txt +37 -34
  54. package/package.json +6 -1
  55. package/packs/language/go/rules.md +1 -1
  56. package/packs/language/python/rules.md +1 -1
  57. package/packs/language/rust/rules.md +17 -1
  58. package/packs/language/shell/rules.md +1 -1
  59. package/registry.json +22 -7
  60. package/schemas/profile.schema.json +48 -5
  61. package/skills/orly-babysit-prs/SKILL.md +87 -34
  62. package/skills/orly-spec-new/SKILL.md +19 -6
  63. package/skills/orly-write-integration-test/SKILL.md +4 -4
  64. package/skills/orly-write-unit-test/SKILL.md +10 -1
  65. package/src/cli.test.ts +2 -2
  66. package/src/cli.ts +19 -75
  67. package/src/cli_help.ts +69 -0
  68. package/src/command_limits.ts +20 -0
  69. package/src/command_process.test.ts +109 -0
  70. package/src/command_process.ts +88 -0
  71. package/src/command_runner.test.ts +88 -0
  72. package/src/command_runner.ts +33 -0
  73. package/src/comprehension_cache.test.ts +123 -0
  74. package/src/config.test.ts +5 -4
  75. package/src/config.ts +26 -164
  76. package/src/config_discovery.ts +159 -0
  77. package/src/config_validation.test.ts +56 -0
  78. package/src/config_validation.ts +25 -0
  79. package/src/criteria.test.ts +1 -1
  80. package/src/criteria.ts +10 -26
  81. package/src/criteria_spec.ts +12 -20
  82. package/src/criteria_support.ts +2 -19
  83. package/src/doc_reads.test.ts +42 -0
  84. package/src/doc_rules.ts +2 -2
  85. package/src/evaluation_resources.test.ts +64 -0
  86. package/src/execution/config.ts +22 -0
  87. package/src/execution/plan.test.ts +65 -0
  88. package/src/execution/plan.ts +51 -0
  89. package/src/gates.ts +9 -6
  90. package/src/gates_spec.test.ts +52 -6
  91. package/src/gates_test_support.ts +9 -7
  92. package/src/install.test.ts +38 -222
  93. package/src/install.ts +117 -308
  94. package/src/install_loaders.test.ts +203 -0
  95. package/src/install_nested.test.ts +2 -2
  96. package/src/install_packs.test.ts +66 -6
  97. package/src/installation/hooks.ts +63 -0
  98. package/src/installation/lock.test.ts +97 -0
  99. package/src/installation/lock.ts +56 -0
  100. package/src/installation/migration.test.ts +212 -0
  101. package/src/installation/migration.ts +65 -0
  102. package/src/installation/plan.ts +96 -0
  103. package/src/installation/transaction.ts +126 -0
  104. package/src/installation_preservation.test.ts +48 -0
  105. package/src/judgments/advice.test.ts +38 -0
  106. package/src/judgments/advice.ts +32 -0
  107. package/src/judgments/command.integration.test.ts +47 -0
  108. package/src/judgments/command.ts +90 -0
  109. package/src/judgments/constants.ts +55 -0
  110. package/src/judgments/evidence.test.ts +48 -0
  111. package/src/judgments/evidence.ts +34 -0
  112. package/src/judgments/files.test.ts +62 -0
  113. package/src/judgments/files.ts +73 -0
  114. package/src/judgments/questions.test.ts +19 -0
  115. package/src/judgments/questions.ts +85 -0
  116. package/src/judgments/replay.test.ts +43 -0
  117. package/src/judgments/replay.ts +66 -0
  118. package/src/judgments/runner.integration.test.ts +165 -0
  119. package/src/judgments/runner.ts +97 -0
  120. package/src/judgments/scan.test.ts +19 -0
  121. package/src/judgments/scan.ts +40 -0
  122. package/src/judgments/syntax.test.ts +115 -0
  123. package/src/judgments/syntax.ts +71 -0
  124. package/src/judgments/syntax_worker.ts +70 -0
  125. package/src/judgments/test_support.ts +60 -0
  126. package/src/judgments/transport.integration.test.ts +63 -0
  127. package/src/judgments/transport.ts +35 -0
  128. package/src/judgments/types.test.ts +43 -0
  129. package/src/judgments/types.ts +66 -0
  130. package/src/judgments/wire.test.ts +48 -0
  131. package/src/judgments/wire.ts +40 -0
  132. package/src/loaders.test.ts +13 -16
  133. package/src/loaders.ts +28 -10
  134. package/src/model.test.ts +20 -3
  135. package/src/model.ts +7 -18
  136. package/src/pack_hygiene.test.ts +42 -1
  137. package/src/pack_hygiene.ts +18 -8
  138. package/src/references.ts +15 -7
  139. package/src/release_inventory.test.ts +80 -0
  140. package/src/render.test.ts +1 -1
  141. package/src/render.ts +3 -8
  142. package/src/required_scanner.test.ts +36 -0
  143. package/src/review_poll.test.ts +158 -0
  144. package/src/scanner_scope.test.ts +202 -0
  145. package/src/setup.test.ts +9 -6
  146. package/src/spec_baseline.test.ts +1 -1
  147. package/src/spec_completion.test.ts +74 -0
  148. package/src/spec_obligations.ts +64 -0
  149. package/src/spec_rehearsal.test.ts +182 -0
  150. package/src/spec_template_io.test.ts +11 -9
  151. package/src/surfaces.test.ts +2 -0
  152. package/src/surfaces.ts +1 -1
  153. package/src/validation.ts +7 -4
  154. package/src/verify.test.ts +18 -2
  155. package/src/verify.ts +7 -3
@@ -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 NOT INSTALLED — secret scan skipped (mise use -g gitleaks)" >&2
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** (the machine-local half of the rule above): TypeScript → `oss/supabase/apps/studio` + `oss/supabase/packages/{ui,ui-patterns}` + `oss/cli`; Zig → `oss/ghostty/src/`; Rust → `oss/bun/src/` + `oss/exonum` + `oss/core_api-develop`. Missing checkout → ask, then clone into `~/Projects/oss/`.
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 `.oracle/orly.json`?** Complete it first — `verify.*`, `surfaces`, opt-in packs: `dispatch/lifecycle.md` §Bootstrap.
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 new legacy framing pre-`0.30.0`), **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.
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 both linux targets · `ZIG GATE` / `PUB GATE` / `LIFECYCLE GATE: SKIPPED per user override (reason: ...)`. |
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 `schema/*.sql` | `write_sql` | `dispatch/write_sql.md` — schema / migration rules + Schema Table Removal Guard (`DROP`/`ALTER` / `schema/embed.zig` / migration-array edits), STS/NSQ/SGR/ITF rules · `SCHEMA GUARD: SKIPPED per user override (reason: ...)`. |
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 (user-only push: `SKIP_INVARIANCE_PUSH=1`). |
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 main. |
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 `.oracle/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.
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. Asking what I could have looked up spends his attention on my
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. Nobody fails a build over this, so the prose is mine to get right.
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) at 40,960 bytes; adding a rule
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; behaviour → a row in `SOUL_LOG.md` at the moment it
330
- happens; architecture → repo docs; state → HANDOFF. "I'll remember"
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? Row in `SOUL_LOG.md` — now, not later.
346
+ 8. Corrected this session? Update the rule where the correction applies.
357
347
 
358
348
  ---
359
349
 
360
- *Keep every line actionable — a fact that fires nowhere moves to
361
- `SOUL_LOG.md` or dies. Edit here, then `orly update`.*
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,39 +42,55 @@ Works with Claude Code, Codex, OpenCode, and Amp.
42
42
 
43
43
  ---
44
44
 
45
- ## Prerequisites
45
+ ## 0.11.0 experiment: explicit Jev advice
46
+
47
+ The Bun command line adds `orly judge` for selected planning, test, review and
48
+ documentation questions.
49
+
50
+ - **Judgments** — selected evidence produces a fixed next action; existing checks retain control of gate results.
51
+ - **Installation** — `bunx` runs the source package through Bun, continuing the `0.10.x` setup on macOS and Linux.
52
+
53
+ Use `orly judge --help` and the [judgment reference](docs/JUDGMENTS.md) for the
54
+ manifest, atomic criteria and explicit source upload. This page describes the
55
+ 0.11.0 source package, which is not yet published. The commands below fetch the
56
+ published package; use them for this behavior after 0.11.0 is published.
57
+
58
+ ---
59
+
60
+ ## Prerequisites for 0.11.0
46
61
 
47
62
  | You need | Why | Version |
48
63
  |---|---|---|
49
64
  | [bun](https://bun.sh) | runs orly; `bunx` fetches it | ≥ 1.4.0 |
50
65
  | git | orly writes the hooks; `orly gate` reads the branch | any |
51
66
  | a coding agent | something has to read the rules | Claude Code, Codex, OpenCode, or Amp |
52
- | your own check commands | `orly gate` runs whatever `.oracle/orly.json` names | whatever your repository already runs |
67
+ | your own check commands | `orly gate` runs whatever `.orly/orly.json` names | whatever your repository already runs |
53
68
 
54
69
  > [!IMPORTANT]
55
70
  > git never clones hooks. Every teammate runs `orly init` once in their own checkout, even after the rules are committed.
56
71
 
57
72
  ---
58
73
 
59
- ## Install
74
+ ## Install 0.11.0 after publication
60
75
 
61
76
  Run this inside the repository you want governed.
62
77
 
63
78
  ```bash
64
- bun add -g @agentsfleet/orly
65
- orly init
79
+ bunx --bun @agentsfleet/orly init
66
80
  ```
67
81
 
68
82
  orly scans your source, detects your languages, and installs only the rules that apply.
69
83
 
70
84
  > [!TIP]
71
- > Try `orly init --dry-run` first. It previews the generated rules and changes nothing.
85
+ > Try `bunx --bun @agentsfleet/orly init --dry-run` first. It previews the generated rules and changes nothing.
86
+
87
+ Complete any setup items printed by `init`, then run `bunx --bun @agentsfleet/orly doctor` and commit the generated files.
88
+ Use `bunx --bun @agentsfleet/orly <COMMAND>` for the commands below; `<COMMAND>` names the command and its options.
89
+ 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
90
 
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
91
  Teammates get the rules on clone and run `orly init` to install their hooks.
76
92
 
77
- Declare `conform` and at least one `verify.*` command in `.oracle/orly.json`.
93
+ Declare `conform` and at least one `verify.*` command in `.orly/orly.json`.
78
94
  Orly runs your repository's commands; the verification name does not require a particular language or test runner.
79
95
  For a documentation repository whose Makefile provides `test` and `lint`:
80
96
 
@@ -89,6 +105,19 @@ Here `test` checks documentation during work, and `lint` validates the site and
89
105
  Markdown and Markdown JSX (MDX) repositories do not need application unit or integration suites.
90
106
  `orly doctor` checks configuration and installed files; run the gates to verify the commands themselves.
91
107
 
108
+ Each invocation has a 30-minute deadline and a 64-mebibyte combined output budget.
109
+ Exceeding either limit fails the check, stops its child processes and prints a private output receipt path.
110
+ Set per-command overrides in `.orly/orly.json`, for example:
111
+
112
+ ```json
113
+ "limits": {
114
+ "verify.unit": { "timeout_ms": 1800000, "output_bytes": 67108864 }
115
+ }
116
+ ```
117
+
118
+ The receipt retains all captured output until you remove its printed directory.
119
+ Unknown settings and malformed values are refused; `schemas/profile.schema.json` describes the repository configuration.
120
+
92
121
  ---
93
122
 
94
123
  ## What lands in your repository
@@ -97,24 +126,25 @@ Markdown and Markdown JSX (MDX) repositories do not need application unit or int
97
126
  your-repo/
98
127
  │
99
128
  ├── AGENTS.md ─────────────── yours. untouched, except one delimited pointer block
100
- ├── AGENTS.orly.md ────────── the generated rules: safety, dispatch router, lifecycle
129
+ ├── .orly/AGENTS.md ────────── the generated rules: safety, dispatch router, lifecycle
101
130
  │
102
131
  ├── CLAUDE.md ─────────────── one import line; the only file Claude Code loads itself
103
132
  ├── opencode.json ─────────── names both rule files; opencode loads nothing by default
104
133
  │
105
- ├── dispatch/*.md ─────────── one rule page per kind of work
106
- ├── audits/*.sh ───────────── the deterministic gates
107
- ├── docs/*.md ─────────────── the standards those rules cite
134
+ ├── .orly/dispatch/*.md ───── one rule page per kind of work
135
+ ├── .orly/audits/ ─────────── the deterministic gates
136
+ ├── .orly/docs/*.md ───────── the standards those rules cite
137
+ ├── .orly/skills/ ─────────── full skill instructions
108
138
  │
109
- ├── .claude/skills/ ───────── the same skills, materialised per agent host
139
+ ├── .claude/skills/ ───────── thin discovery entries per agent host
110
140
  ├── .agents/skills/
111
141
  ├── .opencode/skills/
112
142
  │
113
- ├── .githooks/ ────────────── pre-commit and pre-push, wired to `orly gate`
114
- └── .oracle/orly.json ─────── which packs, which commands, what orly installed
143
+ ├── .orly/hooks/ ──────────── pinned bunx pre-commit and pre-push calls
144
+ └── .orly/orly.json ─────── which packs, which commands, what orly installed
115
145
  ```
116
146
 
117
- `orly init` also seeds `.oracle/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.
147
+ `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
148
 
119
149
  ---
120
150
 
@@ -153,7 +183,7 @@ The spec is a file on disk, and **its directory is the status**. Only the stages
153
183
  flowchart TB
154
184
  you["🤠 you<br/>add webhook retries"]
155
185
  agent["🦉 agent<br/>writes the spec"]
156
- pending["📄 docs/v1/pending/<br/><small>spec committed on main</small>"]
186
+ pending["📄 docs/v1/pending/<br/><small>spec committed on default branch</small>"]
157
187
 
158
188
  you --> agent
159
189
  agent --> pending
@@ -188,7 +218,7 @@ flowchart TB
188
218
 
189
219
  | Directory | Meaning |
190
220
  |---|---|
191
- | `docs/v1/pending/` | the spec is written and committed on `main` |
221
+ | `docs/v1/pending/` | the spec is written and committed on the detected default branch |
192
222
  | `docs/v1/active/` | branch cut, comparison revision recorded, measurement pending; no code until it commits |
193
223
  | `docs/v1/done/` | gates green, Pull Request opens |
194
224
 
@@ -211,16 +241,22 @@ Each edit activates the rule page for that file kind. A gate proves whether the
211
241
  | File | Owner | On `orly update` |
212
242
  |---|---|---|
213
243
  | `AGENTS.md` | **you** | untouched, except one delimited pointer block |
214
- | `AGENTS.orly.md` | orly | rewritten |
215
- | `CLAUDE.md` | **you** | written only when missing; never edited after |
244
+ | `.orly/AGENTS.md` | orly | rewritten |
245
+ | `CLAUDE.md` | **you** | creates a missing loader; refreshes owned imports; preserves unrelated content |
216
246
  | `opencode.json` | **you** | gains the two rule files in `instructions`; nothing else touched |
217
247
 
218
- `AGENTS.md` stays yours — orly writes its rules beside it and points at them from one delimited block.
248
+ `AGENTS.md` stays yours. orly writes its rules beside it and points at them from one delimited block.
249
+
250
+ The last two files deliver rules through each runtime's loader. Codex and Amp auto-load `AGENTS.md`, which carries the pointer block onward.
251
+
252
+ Claude Code loads `CLAUDE.md` and nothing else. opencode loads only what its `instructions` name.
219
253
 
220
- The last two files exist because installing a rules file is not the same as delivering it, and no runtime loads `AGENTS.orly.md` on its own. Codex and Amp auto-load `AGENTS.md`, which carries the pointer block onward. Claude Code loads `CLAUDE.md` and nothing else. opencode loads only what its `instructions` name. So orly writes the one import line each of those needs, and leaves any file you already wrote alone — a `CLAUDE.md` of your own is your answer to the question and orly does not touch it — including a symlink, whether it points at your rules file, somewhere else in the repository, or at nothing yet. Only a link out of the repository is refused, because a write through it would land outside the repository you ran orly in.
254
+ orly writes the required import when the loader is missing and refreshes its own delimited block or recognized generated loader.
255
+ Unrelated owner content stays unchanged. Resolved links inside the repository are preserved; unresolved or escaping links refuse the update.
221
256
 
222
257
  > [!WARNING]
223
- > orly refuses to replace a hook or rule page it did not write. `--force` and `--no-hooks` are the ways through. A refused run changes nothing.
258
+ > orly refuses unowned conflicting content and executable owner hooks. Review explicit `--force` or `--no-hooks` choices before proceeding.
259
+ > Preflight conflicts preserve owner bytes. An interruption during writes may leave completed steps and a journal; rerun to recover after resolving conflicts.
224
260
 
225
261
  ---
226
262
 
@@ -268,12 +304,12 @@ orly scans four directories deep. It skips `node_modules`, `target`, `.venv`, an
268
304
  | `workflow.specifications` | the spec template and the gate that checks its shape |
269
305
  | `workflow.skills` | four skills, written once for all four agents |
270
306
 
271
- ### Opt-in, only when `.oracle/orly.json` names them
307
+ ### Opt-in, only when `.orly/orly.json` names them
272
308
 
273
309
  | Pack | What it adds | Why it is opt-in |
274
310
  |---|---|---|
275
311
  | 🦉 `workflow.governance` | the rules for editing rules, their questionnaire, and orly's architecture | only useful if you edit orly itself |
276
- | `product.agentsfleet` | three audit scripts, the verify dispatch page, four `agentsfleet` docs | a product surface that means nothing in another checkout |
312
+ | `product.agentsfleet` | two audit scripts, the verify dispatch page, three `agentsfleet` docs | a product surface that means nothing in another checkout |
277
313
  | 🤠 `persona.indy` | no files; it rewrites the address handles and tone in the generated rules | one maintainer's name and voice |
278
314
 
279
315
  ---
@@ -326,8 +362,8 @@ make audit
326
362
  `make audit` is the bar. If it passes, the change is reviewable. Its steps run in parallel, around half a minute:
327
363
 
328
364
  - **typecheck and unit tests**
329
- - **render determinism** — the same sources always produce the same rules
330
- - **gate fixtures** — every gate proved against one passing and one failing case
365
+ - **render determinism:** the same sources always produce the same rules
366
+ - **gate fixtures:** every gate proved against one passing and one failing case
331
367
 
332
368
  Coverage is gated at a 90% line floor. The workflow fails below it.
333
369
 
@@ -370,7 +406,7 @@ It prints the rules it would install, already rendered for the languages it foun
370
406
  Then hand your agent the prompt orly was built for:
371
407
 
372
408
  ```text
373
- Read AGENTS.orly.md. Tell me which of my last ten commits would have tripped a
409
+ Read .orly/AGENTS.md. Tell me which of my last ten commits would have tripped a
374
410
  gate, and name the rule that caught each one.
375
411
  ```
376
412
 
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. Asking what I could have looked up spends his attention on my
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. Nobody fails a build over this, so the prose is mine to get right.
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) at 40,960 bytes; adding a rule
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; behaviour → a row in `SOUL_LOG.md` at the moment it
78
- happens; architecture → repo docs; state → HANDOFF. "I'll remember"
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? Row in `SOUL_LOG.md` — now, not later.
94
+ 8. Corrected this session? Update the rule where the correction applies.
105
95
 
106
96
  ---
107
97
 
108
- *Keep every line actionable — a fact that fires nowhere moves to
109
- `SOUL_LOG.md` or dies. Edit here, then `orly update`.*
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 -->