@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.
- package/.githooks/pre-push +2 -1
- package/AGENTS.md +21 -31
- package/README.md +65 -29
- 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_VOICE.md +11 -2
- package/docs/EXECUTE_DOC_READS.md +10 -10
- package/docs/HARNESS_VERIFY_OUTPUT.md +6 -3
- package/docs/JUDGMENTS.md +153 -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 +37 -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,39 +42,55 @@ Works with Claude Code, Codex, OpenCode, and Amp.
|
|
|
42
42
|
|
|
43
43
|
---
|
|
44
44
|
|
|
45
|
-
##
|
|
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 `.
|
|
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
|
|
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 `.
|
|
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
|
-
├──
|
|
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
|
|
106
|
-
├── audits
|
|
107
|
-
├── docs/*.md
|
|
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/ ─────────
|
|
139
|
+
├── .claude/skills/ ───────── thin discovery entries per agent host
|
|
110
140
|
├── .agents/skills/
|
|
111
141
|
├── .opencode/skills/
|
|
112
142
|
│
|
|
113
|
-
├── .
|
|
114
|
-
└── .
|
|
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 `.
|
|
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
|
|
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
|
|
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
|
-
|
|
|
215
|
-
| `CLAUDE.md` | **you** |
|
|
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
|
|
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
|
-
|
|
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
|
|
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 `.
|
|
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` |
|
|
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
|
|
330
|
-
- **gate fixtures
|
|
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
|
|
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.
|
|
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 -->
|