@agentsfleet/orly 0.5.0 β 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.
- package/README.md +13 -3
- package/docs/EXECUTE_DOC_READS.md +1 -1
- package/package.json +1 -1
- package/src/install_packs.test.ts +35 -0
package/README.md
CHANGED
|
@@ -39,9 +39,19 @@ Works with Claude Code, Codex, OpenCode, and Amp.
|
|
|
39
39
|
| a coding agent | something has to read the rules | Claude Code, Codex, OpenCode, or Amp |
|
|
40
40
|
| your own check commands | `orly gate` runs what `.oracle/orly.json` names | whatever your repository already runs |
|
|
41
41
|
|
|
42
|
-
gstack
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
### gstack
|
|
43
|
+
|
|
44
|
+
[gstack](https://github.com/garrytan/gstack) is **optional**. orly does not
|
|
45
|
+
require it to install or run.
|
|
46
|
+
|
|
47
|
+
orly's rules route the review stage through `gstack /review` when gstack is
|
|
48
|
+
available. If it is installed, `/review` is detected and runs automatically.
|
|
49
|
+
If not, orly records the skipped review in the Pull Request notes so it can be
|
|
50
|
+
rerun before merge.
|
|
51
|
+
|
|
52
|
+
**Bottom line:** orly works without gstack. Installing
|
|
53
|
+
[gstack](https://github.com/garrytan/gstack) gives you the automated `/review`
|
|
54
|
+
step.
|
|
45
55
|
|
|
46
56
|
```bash
|
|
47
57
|
bunx @agentsfleet/orly init
|
|
@@ -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.
|
|
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
|
+
});
|