@agentsfleet/orly 0.5.1 β†’ 0.5.2

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.
@@ -7,7 +7,7 @@ Every triggered document requires one `πŸ“– DOC READ: <path>` proof-line **per t
7
7
  | Trigger | Read |
8
8
  |---|---|
9
9
  | Always (universal) | `docs/greptile-learnings/RULES.md` β€” at EXECUTE start read the Rule-code gloss legend + the sections named by the spec's "Applicable Rules" list (canonical); the full file belongs to `/review`, not EXECUTE. On sub-task shape change, section-scan (`grep -n "^## "`) and read only newly-touched sections, cited in the proof-line β€” never the full file again. |
10
- | `core/**`, `packs/**`, `schemas/**`, `src/**`, `registry.json`, agent-home instruction links, repository rules synchronization, or governance hooks | `dispatch/edit_rules.md` + `docs/ORLY_ARCHITECTURE.md` β€” canonical sources, profiles, snapshots, refusal boundaries, and evidence. |
10
+ | `core/**`, `packs/**`, `schemas/**`, `src/**`, `registry.json`, agent-home instruction links, repository rules synchronization, or governance hooks | `dispatch/edit_rules.md` + `docs/ORLY_ARCHITECTURE.md` β€” canonical sources, profiles, snapshots, refusal boundaries, and evidence. | <!-- oracle-packs:workflow.governance -->
11
11
  | Lifecycle stage transition (CHORE(open)/PLAN/CHORE(close)/LAND, worktree setup, milestone bootstrap) | `dispatch/lifecycle.md` β€” the entered stage's runbook section only (section-scan; fires on the transition itself, not on an Edit/Write). |
12
12
  | Any source file (cross-cutting authoring) | `dispatch/write_any.md` β€” length, logging, milestone-id, error-registry, UFS, greptile read, legacy-workaround family. |
13
13
  | Spec's "Applicable Rules" | Each rule (canonical). Missing β†’ the cross-cutting codes of `dispatch/write_any.md` are the floor; surface omission. |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentsfleet/orly",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
4
4
  "description": "Repository-scoped engineering harness: renders agent rules, materialises the gates that enforce them, and proves the PR boundary β€” for any coding agent.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -0,0 +1,35 @@
1
+ import { afterEach, describe, expect, test } from "bun:test";
2
+ import { existsSync } from "node:fs";
3
+ import { join } from "node:path";
4
+
5
+ import { cleanupTemporaryDirectories, newRepository, ROOT } from "./gates_test_support";
6
+ import { install } from "./install";
7
+ import { RulesModel } from "./model";
8
+
9
+ const SOURCE_EXTENSIONS = ["rs", "ts", "tsx", "js", "jsx", "py", "sh", "sql", "zig", "mdx"];
10
+ const ENGINE_VERSION = "0.5.2";
11
+
12
+ afterEach(cleanupTemporaryDirectories);
13
+
14
+ describe("opt-in pack selection", () => {
15
+ // An opt-in pack may cite a file another opt-in pack owns, and every such
16
+ // citation has to be gated by the pack that provides it. Ungated, the install
17
+ // is refused for skipping rules the repository was never meant to take:
18
+ // `product.agentsfleet` ships the doc-read table, `workflow.governance` ships
19
+ // the governance faΓ§ade that table once named unconditionally.
20
+ test("one opt-in pack installs without dragging in the others", async () => {
21
+ const model = await RulesModel.load(ROOT);
22
+ const repo = newRepository();
23
+ for (const extension of SOURCE_EXTENSIONS) await Bun.write(join(repo, `src/source.${extension}`), "\n");
24
+ await Bun.write(join(repo, ".oracle/orly.json"), JSON.stringify({ schema_version: 1, orly_version: "", packs: ["product.agentsfleet"], commands: {}, managed: [] }));
25
+
26
+ const result = await install(model, { targetRoot: repo, force: false, installHooks: true, orlyVersion: ENGINE_VERSION });
27
+
28
+ expect(result.errors).toEqual([]);
29
+ expect(result.ok).toBe(true);
30
+ expect(result.packs).toContain("product.agentsfleet");
31
+ expect(result.packs).not.toContain("workflow.governance");
32
+ expect(existsSync(join(repo, "docs/EXECUTE_DOC_READS.md"))).toBe(true);
33
+ expect(existsSync(join(repo, "dispatch/edit_rules.md"))).toBe(false);
34
+ });
35
+ });