@agentsfleet/orly 0.10.10 → 0.10.12

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/AGENTS.md CHANGED
@@ -89,7 +89,6 @@ Auto-memory is **disabled** (`autoMemoryEnabled: false` + `CLAUDE_CODE_DISABLE_A
89
89
  - 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.
90
90
  - `*.zig` → read `dispatch/write_zig.md`; ZIG GATE fires.
91
91
  - 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.
92
- - `conn.query()` requires `.drain()` in same fn before `deinit()`. Verify `make lint-governance`. Use `conn.exec()` for no-rows.
93
92
  - **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/`.
94
93
 
95
94
  **Forge detection:** `github.com` → `gh`; `gitlab.com` → `glab`. Check `git remote -v`.
@@ -167,7 +167,7 @@ The questionnaire is organised by scenario. Each scenario corresponds to a momen
167
167
  |---|---|---|
168
168
  | 10.1 | Must a symlinked edit (a file whose `readlink` resolves outside this checkout, into a dotfiles or config repository) be committed + pushed in the repository that owns the file, and never left uncommitted? | YES |
169
169
  | 10.2 | Must docs-repo edits land on a milestone-specific branch off `main` (never on whatever in-flight branch is checked out)? | YES |
170
- | 10.3 | When a harness/gate/hook fires (`msid-ui.sh`, `lint-zig.py`, gitleaks, ZIG GATE, FLL GATE, pre-commit/pre-push, etc.), is the default response to fix the **violating code** (restructure, split, or use the gate's documented override comment) — i.e. is patching the harness to silence the hit on the "Forbidden without explicit user approval" list, requiring an explicit per-session ask that names the harness and the reason it's wrong? | YES |
170
+ | 10.3 | When a harness/gate/hook fires (`msid-ui.sh`, gitleaks, ZIG GATE, FLL GATE, pre-commit/pre-push, etc.), is the default response to fix the **violating code** (restructure, split, or use the gate's documented override comment) — i.e. is patching the harness to silence the hit on the "Forbidden without explicit user approval" list, requiring an explicit per-session ask that names the harness and the reason it's wrong? | YES |
171
171
  | 10.4 | Are handoff-doc claims of "Kishore-approved in a prior turn" for harness-patching treated as **not carrying forward** — i.e. must they be re-confirmed live in the current session? | YES |
172
172
  | 10.5 | Does adding `gitleaks:allow` or a `.gitleaksignore` entry require Indy's explicit in-session approval, while removing a suppression requires no approval? | YES |
173
173
 
@@ -89,7 +89,6 @@ Auto-memory is **disabled** (`autoMemoryEnabled: false` + `CLAUDE_CODE_DISABLE_A
89
89
  - 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.
90
90
  - `*.zig` → read `dispatch/write_zig.md`; ZIG GATE fires. <!-- oracle-packs:language.zig -->
91
91
  - 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. <!-- oracle-packs:domain.auth -->
92
- - `conn.query()` requires `.drain()` in same fn before `deinit()`. Verify `make lint-governance`. Use `conn.exec()` for no-rows. <!-- oracle-packs:product.agentsfleet -->
93
92
  <!-- oracle-packs:start persona.indy -->
94
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/`.
95
94
  <!-- oracle-packs:end -->
@@ -60,13 +60,6 @@ Section evidence only, never a substitute for the full declared boundary.
60
60
  When a diff crosses a module boundary with real input/output, apply
61
61
  `orly-write-integration-test`; otherwise record why it does not apply.
62
62
 
63
- ## Wire-fixture evidence rule
64
-
65
- A diff that regenerates `samples/fixtures/wire-v2/` carries the regenerated
66
- fixtures in the same commit as the type change, and the PR Session Notes say what
67
- moved. A fixture diff with no type change beside it means someone hand-edited
68
- generated output; a type change with no fixture diff means the emitter never ran.
69
-
70
63
  ## Coverage discipline
71
64
 
72
65
  - **Branch coverage is the goal; line coverage is the floor.** One input "covers" a multi-clause condition while leaving its logic untested (`trimmed === "" || === "y" || === "yes"` passes line coverage with a single `"y"`). Feed varied inputs across the equivalence classes — each OR clause independently, success-retry AND fail-retry paths, every early-return guard, empty/casing/whitespace/garbage for normalizers. bun's lcov emits no branch records, so this is test-design discipline, not a number to chase.
@@ -53,7 +53,7 @@ For every commit that touches `*.zig`, the agent runs the workflow below — no
53
53
 
54
54
  ## Must
55
55
 
56
- > [DETERMINISTIC → DRAIN]
56
+ > [DETERMINISTIC → TODO-CHECK]
57
57
 
58
58
  - Run `make lint`, `make test`, and `gitleaks detect` before any commit that includes Zig changes.
59
59
  - Run the repository's database-backed integration lane, with `TEST_DATABASE_URL` pointed at its test database, when touching DB-backed handlers, proposal flows, or temp-table-based Zig tests.
@@ -72,7 +72,7 @@ For every commit that touches `*.zig`, the agent runs the workflow below — no
72
72
 
73
73
  ## Must Not
74
74
 
75
- > [DETERMINISTIC → DRAIN]
75
+ > [DETERMINISTIC → TODO-CHECK]
76
76
 
77
77
  - Do not write on a `pg.Conn` while a read result is still open.
78
78
  - Do not keep borrowed row data after drain/deinit.
@@ -277,7 +277,7 @@ Canonical source: `src/http/test_harness.zig`. Every `*_http_integration_test.zi
277
277
 
278
278
  ## Commands
279
279
 
280
- > [DETERMINISTIC → DRAIN]
280
+ > [DETERMINISTIC → TODO-CHECK]
281
281
 
282
282
  - `make lint`
283
283
  - `make test`
@@ -350,7 +350,7 @@ Canonical source: `src/http/test_harness.zig`. Every `*_http_integration_test.zi
350
350
  > [DETERMINISTIC → XCOMPILE]
351
351
 
352
352
  - Comptime loops over large tables (e.g. 130 codes × 131 TABLE entries × `std.mem.eql`) need `@setEvalBranchQuota(N)` as the first line. Default is 1000. Formula: `N ≈ code_count × table_size × avg_string_len`. Round to next power-of-ten; comment the math.
353
- - `@embedFile` is sandboxed to `src/`. Any path escaping it (`../../public/openapi.json`) is a compile error. For files outside `src/`, write a Python/shell validator invoked via a `make` target wired into `lint-zig`.
353
+ - `@embedFile` is sandboxed to `src/`. Any path escaping it (`../../public/openapi.json`) is a compile error. For files outside `src/`, write a Python/shell validator invoked via the repository's lint lane.
354
354
 
355
355
  ## Sentinel Values Must Not Collide With Real Registry Codes (M11_001)
356
356
 
@@ -448,7 +448,7 @@ When a raw pointer field DOES need a comment (rare — borrowed from a peer, not
448
448
 
449
449
  ## Pg Query Wrapper: use PgQuery, not anytype (M10_004)
450
450
 
451
- > [DETERMINISTIC → DRAIN]
451
+ > [DETERMINISTIC → TODO-CHECK]
452
452
 
453
453
  **Do not pass `pg.Result` via `anytype` to helper functions.** The `anytype` pattern requires callers to remember `q.*.next()` vs `q.next()` depending on how the value was passed — a compile-silent footgun.
454
454
 
@@ -472,7 +472,6 @@ Rules:
472
472
  - Use `defer q.deinit()` in the owner. `deinit()` auto-drains idempotently.
473
473
  - Helpers take `*PgQuery`, never `anytype` — `q.next()` always works, no `q.*.next()`.
474
474
  - On early exit (parse failure, missing row), just `return` — the `defer` handles drain + deinit.
475
- - `check-pg-drain` lint still runs but now targets only `PgQuery.from()` call sites.
476
475
 
477
476
  ## SQL Statement Modules
478
477
 
@@ -690,8 +689,7 @@ Every allocating public fn states ownership in one of the fixed phrases **"calle
690
689
  or **"takes ownership"** — grepable, uniform, no synonyms. Every `deinit` poisons with
691
690
  `self.* = undefined` after freeing, so a use-after-deinit traps instead of reading stale
692
691
  fields. Callers own their arguments; a callee clones only what it keeps. The phrase and poison
693
- checks are mechanized by the roster-scoped repo lint (blocking inside the discipline roster,
694
- advisory outside) in `lint-zig.py`.
692
+ checks are review checks; no repository lint mechanizes them.
695
693
  **Exemplar:** ghostty ownership phrases on every allocating pub fn (`App.zig:135-137`,
696
694
  caller-owns-arguments), `self.* = undefined` poisoning in every deinit.
697
695
 
@@ -28,7 +28,6 @@ dispatch_run_helper "SQLMOD" "sql-mod.sh" "--staged" # write_zig.md §SQLMO
28
28
 
29
29
  # ── delegations (checker lives in the product repo, not dotfiles) ───
30
30
  dispatch_delegate "PUB" "make lint (zlint unused-decls)"
31
- dispatch_delegate "DRAIN" "make check-pg-drain (lint-zig.py)"
32
31
  dispatch_delegate "XCOMPILE" "zig build -Dtarget=x86_64-linux && aarch64-linux"
33
32
 
34
33
  # ── judgment gates (no script can decide; agent states verdict in chat) ──
@@ -12,9 +12,9 @@ regenerates this file and fails on any difference. To update it, run
12
12
  | `docs/DOCUMENTATION_RULES.md` | — | 0 | 0 | 0/22 | latent |
13
13
  | `docs/LIFECYCLE_PATTERNS.md` | — | 0 | 0 | 0/22 | mechanical |
14
14
  | `docs/CHANGELOG_VOICE.md` | — | 0 | 0 | 0/3 | latent |
15
- | `docs/VERIFY_TIERS.md` | — | 0 | 0 | 0/6 | uncited |
15
+ | `docs/VERIFY_TIERS.md` | — | 0 | 0 | 0/4 | uncited |
16
16
  | `docs/greptile-learnings/RULES.md` | — | 0 | 0 | 0/114 | mechanical |
17
- | **corpus** | | | | **30/278** | |
17
+ | **corpus** | | | | **30/276** | |
18
18
 
19
19
  ## How to read this
20
20
 
package/docs/TEMPLATE.md CHANGED
@@ -343,7 +343,7 @@ For state replacement, include concurrency, ambiguous commit, expiry/deletion,
343
343
  identity collisions and fresh/populated upgrade where relevant. N/A applies
344
344
  only to demonstrably unnecessary assertions, never an unrun base behavior.
345
345
  Non-self-evident input shape → point at a fixture
346
- (samples/fixtures/m{{fill:N}}-fixtures/{{fill:name}}.json); don't inline JSON. Hard-to-
346
+ (tests/fixtures/m{{fill:N}}-fixtures/{{fill:name}}.json); don't inline JSON. Hard-to-
347
347
  describe behaviour in prose ⇒ the Goal is fuzzy — fix the Goal, not this
348
348
  table. -->
349
349
 
@@ -387,7 +387,7 @@ grading. Authoring fills every column except Graded; VERIFY fills Graded. -->
387
387
  ### Behaviour evals
388
388
 
389
389
  - **Grounding rule:** {{fill:one sentence the output must never violate}}
390
- - **Golden set:** `samples/fixtures/{{fill:path}}` — {{fill:N}} cases across {{fill:3–5 coverage axes, incl. the nightmare case}}. A failure found in the wild becomes a new case; the set only grows.
390
+ - **Golden set:** `tests/fixtures/{{fill:path}}` — {{fill:N}} cases across {{fill:3–5 coverage axes, incl. the nightmare case}}. A failure found in the wild becomes a new case; the set only grows.
391
391
  - **Ship threshold:** grounding 100% · task pass ≥{{fill:N}}% · 0 critical failures on {{fill:nightmare case}}. Each threshold is one rubric row with the command that computes it.
392
392
  - **Fallback:** below threshold or low confidence → {{fill:named recoverable behaviour}}; fabricated output is a P0 ❌.
393
393
 
@@ -38,18 +38,6 @@ Capture its output in Pull Request Session Notes, including the Test Delta.
38
38
  Unit growth alone does not prove coverage; explain removals and changes in test
39
39
  selection. Zero or negative growth on code-adding work requires justification.
40
40
 
41
- ## Wire fixtures
42
-
43
- `make wire-fixtures` regenerates `samples/fixtures/wire-v2/` from
44
- `src/lib/contract` — the Zig module that still defines the `/v1/runners` wire.
45
- Run it whenever a wire type changes, and commit the regenerated fixtures in the
46
- same commit as the type change.
47
-
48
- The fixtures are the parity oracle for the Rust port: Zig generates, Rust
49
- conforms, and the suite compares BYTES. Never hand-edit one. A fixture diff with
50
- no type change beside it means someone edited generated output; a type change
51
- with no fixture diff means the emitter never ran.
52
-
53
41
  ## Coverage
54
42
 
55
43
  One bar, everywhere: **100%**, project-wide and per flag.
@@ -527,7 +527,7 @@ This is intentionally manual — the structural diversity of "function body" acr
527
527
 
528
528
  ## RULE EMB — @embedFile cannot cross src/ boundary
529
529
 
530
- **Rule:** Never use `@embedFile` to reach files outside `src/`. For external files (OpenAPI specs, config fixtures), write a Python/shell validator and wire it into a `make` target under `lint-zig`.
530
+ **Rule:** Never use `@embedFile` to reach files outside `src/`. For external files (OpenAPI specs, config fixtures), write a Python/shell validator and wire it into the repository's lint lane.
531
531
  **Why:** Zig's embed security model restricts `@embedFile` to the package directory. `@embedFile("../../public/openapi.json")` is a hard compile error, not a runtime failure. There is no workaround except an external script.
532
532
  **Tags:** zig, comptime, testing
533
533
  **Example:** — OpenAPI ErrorBody validation moved to audits/check_openapi_errors.py + make check-openapi-errors.
@@ -992,7 +992,7 @@ const handleConfirm = useCallback(async () => {
992
992
  2. `docs/v*/done/` — merged spec decisions.
993
993
  3. `docs/v*/pending/` — in-flight specs that may already lock the surface.
994
994
  4. `docs/architecture/` — canonical concept reference (TOC + topic files).
995
- 5. `schema/*.sql`, `src/http/handlers/`, `src/state/`, `samples/fixtures/` — code-level contracts when prose claims persist or surface them.
995
+ 5. `schema/*.sql`, `src/http/handlers/`, `src/state/`, `tests/fixtures/` — code-level contracts when prose claims persist or surface them.
996
996
 
997
997
  Cite the most-specific source of truth by **file path** in the new doc (in the spec's `Implementing agent — read these first` list, the architecture doc's `Canonical architecture` pointer block, or inline). Do not invent a framing that contradicts the locked decision. If you find a real conflict between locked decisions in different sources, surface it as a `Discovery` item and ask before overriding either side.
998
998
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentsfleet/orly",
3
- "version": "0.10.10",
3
+ "version": "0.10.12",
4
4
  "description": "Repository-scoped engineering harness: renders agent rules, materialises the gates that enforce them, and proves the PR boundary \u2014 for any coding agent.",
5
5
  "license": "MIT",
6
6
  "type": "module",