enola-guides 0.8.0 → 0.9.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +58 -0
- data/README.md +138 -100
- data/bundle/bundle.json +135 -75
- data/examples/knowledge-base/README.md +6 -2
- data/examples/knowledge-base/enola-cluster.yaml +6 -6
- data/examples/knowledge-base/wiki/_state/enola/findings.json +2 -2
- data/examples/knowledge-base/wiki/_state/enola/receipts.json +11 -8
- data/examples/knowledge-base/wiki/shop/permanent/architecture.md +1 -1
- data/examples/knowledge-base/wiki/shop/permanent/public-surface.md +3 -3
- data/examples/laws/clean-rings/README.md +3 -1
- data/examples/laws/cluster-laws/README.md +3 -1
- data/examples/laws/cqrs-queries-never-write/README.md +3 -1
- data/examples/laws/foreign-keys/README.md +3 -1
- data/examples/laws/governed-code/README.md +3 -1
- data/examples/laws/instantiation/README.md +3 -1
- data/examples/laws/maintenance-tasks/README.md +3 -1
- data/examples/laws/mixins-stay-independent/README.md +3 -1
- data/examples/laws/naming-conventions/README.md +3 -1
- data/examples/laws/one-door/README.md +3 -1
- data/examples/laws/one-owner-per-table/README.md +3 -1
- data/examples/laws/paired-names/README.md +3 -1
- data/examples/laws/parts-never-cycle/README.md +3 -1
- data/examples/laws/protocol-any-of/README.md +3 -1
- data/examples/laws/public-surface/README.md +3 -1
- data/examples/laws/public-tool-prefix/README.md +3 -1
- data/examples/laws/rails-forbidden-names/README.md +3 -1
- data/examples/laws/rails-mutations-are-authorized/README.md +3 -1
- data/examples/laws/rails-request-boundaries/README.md +3 -1
- data/examples/laws/rails-strict-arrangement/README.md +3 -1
- data/examples/laws/readers-read-the-store-only/README.md +3 -1
- data/examples/laws/receiverless-request-api/README.md +3 -1
- data/examples/laws/resolved-ancestry/README.md +3 -1
- data/examples/laws/routes-have-consumers/README.md +3 -1
- data/examples/laws/storage-stays-home/README.md +3 -1
- data/examples/laws/vanilla-rails-stays-empty/README.md +3 -1
- data/examples/rust-service/EXPECTED +1 -1
- data/examples/rust-service/README.md +1 -1
- data/guides/00-concepts.md +97 -0
- data/guides/01-start-here.md +241 -83
- data/guides/02-rails.md +28 -8
- data/guides/03-ember.md +15 -4
- data/guides/04-writing-laws.md +163 -17
- data/guides/05-constraints-in-ci.md +125 -52
- data/guides/06-hooks-and-agents.md +159 -58
- data/guides/07-providers.md +21 -10
- data/guides/08-beyond-one-repo.md +26 -5
- data/guides/09-a-knowledge-base-with-enola.md +21 -13
- data/guides/10-hooks.md +50 -28
- data/guides/11-the-skills-as-they-run.md +16 -9
- data/guides/12-the-wrapper.md +37 -7
- data/guides/13-tabula.md +22 -12
- data/guides/14-taha.md +10 -0
- data/guides/15-python.md +22 -7
- data/guides/16-typescript.md +19 -5
- data/guides/17-go.md +13 -1
- data/guides/18-rust.md +17 -5
- data/guides/19-rolling-out.md +131 -0
- data/guides/20-reading-a-verdict.md +183 -0
- data/lib/enola-guides.rb +1 -1
- data/recipes/README.md +10 -10
- data/templates/constraints-starter/background-jobs-never-invoke-controller-code.rb +6 -0
- data/templates/constraints-starter/models-do-not-reach-controllers.rb +6 -0
- data/templates/constraints-starter/policies-only-answer.rb +6 -0
- data/templates/constraints-starter/the-request-api-stays-in-controllers.rb +6 -0
- data/templates/enola-check.sh +84 -20
- data/templates/enola-findings.rb +30 -10
- data/templates/hooks/intent-first-gate.sh +13 -2
- data/templates/hooks/record.sh +15 -4
- data/templates/hooks/stop-debt.sh +4 -2
- data/templates/kb/kb +367 -0
- data/templates/skills/enola/SKILL.md +15 -3
- data/templates/skills/enola-citation-hygiene/SKILL.md +7 -1
- data/templates/skills/enola-deepdive/SKILL.md +7 -1
- data/templates/skills/enola-drift/SKILL.md +7 -1
- data/templates/skills/enola-grade-before-push/SKILL.md +16 -7
- data/templates/skills/enola-ingest-check/SKILL.md +7 -1
- data/templates/skills/enola-laws/SKILL.md +19 -4
- data/templates/skills/enola-zoom-out/SKILL.md +7 -1
- metadata +5 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8d1b81f179855dbd64a4feb84618651f3b3805d7410dd82f09238fb9a3896f00
|
|
4
|
+
data.tar.gz: 46ec48df52057f409f66e0a60ee1c32224cdfc84f06da9474c85561923a677b5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d6c33d263d7d51ad7b16dc436ddf1412f441309dbbb05f8534fd4efda42c97b8ba2489d02ef9fc04f887ab226261db0f0edab3168dad1c4bf5b2426e899415b8
|
|
7
|
+
data.tar.gz: 99318280749a1987d2a1197f29ca3fe8850a78df1a5fdd13cc3d743d2e24ce14918b79b8b6ccabd1cb492174db69cec19f5f456a2e57283a31d1f13b8ea43c01
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,63 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.9.0 (2026-10-26)
|
|
4
|
+
|
|
5
|
+
Checked against enola v0.4.35, and read again as someone who has never
|
|
6
|
+
heard of enola: a developer landing on the README, one following guide 01
|
|
7
|
+
literally on a Python service, and a tech lead deciding whether to adopt
|
|
8
|
+
it. What they tripped on is fixed, and every command it changed was run
|
|
9
|
+
against v0.4.35.
|
|
10
|
+
|
|
11
|
+
- The README says what enola is and how to install it before anything
|
|
12
|
+
else, and groups the guides into tracks: new to enola, your stack, laws
|
|
13
|
+
and CI, agents, deeper, and an optional knowledge-base track.
|
|
14
|
+
- Three new guides. [00, what enola is](guides/00-concepts.md): the
|
|
15
|
+
pieces, a glossary, who makes what, and enola beside linters and
|
|
16
|
+
dependency-rule tools. [19, rolling out](guides/19-rolling-out.md):
|
|
17
|
+
measured costs (Mastodon and a 20,000-file Rails monolith), one recipe
|
|
18
|
+
instead of five, report then enforce, owners, what to commit, turning
|
|
19
|
+
it off. [20, reading a verdict](guides/20-reading-a-verdict.md): every
|
|
20
|
+
section and exit code, partial and declined, the surprises.
|
|
21
|
+
- Guide 01: install pinned through `pipx`, the npm `enola` warning, the
|
|
22
|
+
MCP server registered with `alwaysLoad`, `doctor` before a restart, a
|
|
23
|
+
first law in YAML that fires on any layout with the output it gives,
|
|
24
|
+
and why a first `.rb` law in a repository with no Ruby makes the verdict
|
|
25
|
+
partial and grades an old breach as new.
|
|
26
|
+
- Guide 04: modes as a table with the confidence each reports at; fix,
|
|
27
|
+
exempt, suppress or leave in the baseline, with the syntax in Ruby and
|
|
28
|
+
YAML; a recipes section; `check` needs a pinned baseline.
|
|
29
|
+
- Guide 05: the action pinned with `version:`, Rubydex installed pinned;
|
|
30
|
+
the template's variables, requirements, exit codes and comment.
|
|
31
|
+
- Guide 06: registering the MCP server per agent, what the agent does
|
|
32
|
+
differently, v0.4.35's narrower search refusal and folder-of-repositories
|
|
33
|
+
install, what to commit (the hooks carry an absolute path) and how to
|
|
34
|
+
turn each piece off.
|
|
35
|
+
- `templates/enola-check.sh`: a regression under enforcement is a verdict
|
|
36
|
+
with a comment, not "did not run"; the confidence floor stays at 1.00 so
|
|
37
|
+
advisory laws never fail; a shallow clone fails on CI instead of passing
|
|
38
|
+
quietly; the comment is edited by its numeric id; without Ruby the
|
|
39
|
+
comment is enola's own summary; `.enola-version` pins the release.
|
|
40
|
+
`script/test-check-template` covers each.
|
|
41
|
+
- The knowledge-base hooks leave a repository with no decision records
|
|
42
|
+
alone (`ENOLA_DECISION_DIRS`) and are wired from `.claude/hooks/`, where
|
|
43
|
+
`enola-guides copy` writes them. The five knowledge-base skills call a
|
|
44
|
+
wrapper that now ships, `templates/kb/kb`, tested by `script/test-kb`.
|
|
45
|
+
`examples/knowledge-base`'s cluster config parses on v0.4.35.
|
|
46
|
+
- Fixed: the `enola --generate . && enola check .` line in guide 02, the
|
|
47
|
+
skills and the twenty-six law READMEs fails with no pinned baseline;
|
|
48
|
+
`constraints init` binds a recipe only when every role has a directory;
|
|
49
|
+
a Ruby `via:` keyword on a sentence is dropped (write `via :imports` in
|
|
50
|
+
the law); `enola gc` trims the local history; the Ember recipe is copied
|
|
51
|
+
with `enola-guides copy`, not `gem contents`; undefined names (munola,
|
|
52
|
+
the brain) are gone; `list recipes` no longer lists the recipes README.
|
|
53
|
+
- What v0.4.35 still reads less than the code, each re-checked: an
|
|
54
|
+
Express `router.post("/")` under a mount, an inline Axum `.nest`, a
|
|
55
|
+
bare Cargo version read as pinned, an inline TypeScript handler,
|
|
56
|
+
`layered`'s `depends_on` rules on Python, TypeScript, Go and Rust, and a
|
|
57
|
+
Ruby `where:` value that is not a string.
|
|
58
|
+
- tabula and taha are marked as a preview: neither is public yet.
|
|
59
|
+
- `script/check-links` checks `#anchors` too.
|
|
60
|
+
|
|
3
61
|
## 0.8.0 (2026-10-25)
|
|
4
62
|
|
|
5
63
|
One command, `enola-guides`, in every ecosystem: RubyGems, npm, PyPI,
|
data/README.md
CHANGED
|
@@ -1,19 +1,137 @@
|
|
|
1
1
|
# enola-guides
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
Go and Rust, worked examples that CI snapshots and grades on every change,
|
|
11
|
-
skills and templates, packaged so a team can pin the guidance it adopted.
|
|
3
|
+
[enola](https://github.com/enola-labs/enola) snapshots a codebase's
|
|
4
|
+
architecture (modules, calls, routes, tables, dependencies) and grades
|
|
5
|
+
each change against a pinned baseline. It catches what file-by-file
|
|
6
|
+
linters cannot: a new cycle across four files, a job that starts calling
|
|
7
|
+
a controller, a second part writing a table that was one part's own. And
|
|
8
|
+
it reports only what the change added, not the hundreds of findings the
|
|
9
|
+
repository already had.
|
|
12
10
|
|
|
13
|
-
|
|
11
|
+
These are guides to using it: a first graded change in ten minutes, laws
|
|
12
|
+
your team states as sentences, the check on every pull request, and the
|
|
13
|
+
hooks and tools a coding agent uses during a session, for Rails, Ember,
|
|
14
|
+
Python, TypeScript, Go and Rust. Every command, flag and output in them
|
|
15
|
+
was run against **enola v0.4.35**, and CI snapshots and grades the worked
|
|
16
|
+
examples on every change. The guides are by Muhamed Isabegovic and are
|
|
17
|
+
not part of enola-labs.
|
|
14
18
|
|
|
15
|
-
|
|
16
|
-
|
|
19
|
+
## Install enola
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
curl -fsSL https://raw.githubusercontent.com/enola-labs/enola/main/install.sh | sh
|
|
23
|
+
enola --version
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
or `pipx install enola-cli` (the PyPI name; the command is `enola`).
|
|
27
|
+
[Start here](guides/01-start-here.md) has the rest, including how to pin
|
|
28
|
+
a version. enola is not on npm: the npm package `enola` is something
|
|
29
|
+
else.
|
|
30
|
+
|
|
31
|
+
## Read in this order
|
|
32
|
+
|
|
33
|
+
**New to enola**
|
|
34
|
+
|
|
35
|
+
- [What enola is, and the words these guides use](guides/00-concepts.md):
|
|
36
|
+
the pieces, a glossary, and how it sits beside the tools you already
|
|
37
|
+
run. Five minutes.
|
|
38
|
+
- [Start here](guides/01-start-here.md): install, snapshot, baseline, a
|
|
39
|
+
graded change, the agent hooks, a first law. Ten minutes.
|
|
40
|
+
|
|
41
|
+
**Your stack**: what enola measures in each, the recipe that names its
|
|
42
|
+
parts, and where it reads less than the code says.
|
|
43
|
+
|
|
44
|
+
- [Rails](guides/02-rails.md) · [Ember](guides/03-ember.md) ·
|
|
45
|
+
[Python](guides/15-python.md) · [TypeScript and JavaScript](guides/16-typescript.md) ·
|
|
46
|
+
[Go](guides/17-go.md) · [Rust](guides/18-rust.md)
|
|
47
|
+
|
|
48
|
+
**Laws and CI**
|
|
49
|
+
|
|
50
|
+
- [Writing laws](guides/04-writing-laws.md): parts, the sentences, modes,
|
|
51
|
+
dates, exemptions and suppressions, what a refusal means.
|
|
52
|
+
- [Constraints in CI](guides/05-constraints-in-ci.md): the check on every
|
|
53
|
+
pull request, on GitHub or any other CI.
|
|
54
|
+
- [Rolling out](guides/19-rolling-out.md): adopting it on a repository
|
|
55
|
+
with years of history, what to commit, what it costs, how to turn each
|
|
56
|
+
piece off.
|
|
57
|
+
- [Reading a verdict](guides/20-reading-a-verdict.md): every section of
|
|
58
|
+
`enola check`'s output, every exit code, and the surprises.
|
|
59
|
+
|
|
60
|
+
**Agents**
|
|
61
|
+
|
|
62
|
+
- [Hooks and agents](guides/06-hooks-and-agents.md): registering the MCP
|
|
63
|
+
server, the session hooks, what the agent does differently, the tools
|
|
64
|
+
it reaches for.
|
|
65
|
+
|
|
66
|
+
**Deeper**
|
|
67
|
+
|
|
68
|
+
- [Providers](guides/07-providers.md): the Ruby pair, the census, the
|
|
69
|
+
runtime capture, writing one.
|
|
70
|
+
- [Beyond one repository](guides/08-beyond-one-repo.md): the cluster, the
|
|
71
|
+
seams between repositories, the laws across them, the history.
|
|
72
|
+
|
|
73
|
+
**Optional: a knowledge base of decisions.** For teams that keep
|
|
74
|
+
decision records beside their code and want each page anchored to the
|
|
75
|
+
code it governs. Nothing above needs it.
|
|
76
|
+
|
|
77
|
+
- [A knowledge base with enola](guides/09-a-knowledge-base-with-enola.md):
|
|
78
|
+
pages that compile into the graph, receipts, a finding ledger.
|
|
79
|
+
- [Knowledge-base hooks](guides/10-hooks.md): the intent-first gate, the
|
|
80
|
+
turn record, the stop-time debt, the session refresh.
|
|
81
|
+
- [The knowledge-base skills, as they run](guides/11-the-skills-as-they-run.md):
|
|
82
|
+
deepdive, claim check, drift, citation hygiene, zoom-out.
|
|
83
|
+
- [The wrapper](guides/12-the-wrapper.md): the command those skills call,
|
|
84
|
+
shipped as a template.
|
|
85
|
+
- *Preview:* [tabula](guides/13-tabula.md) and [taha](guides/14-taha.md),
|
|
86
|
+
the same practice as one program and agents run on it. Neither is
|
|
87
|
+
public yet.
|
|
88
|
+
|
|
89
|
+
## Worked examples
|
|
90
|
+
|
|
91
|
+
- [`examples/python-service`](examples/python-service),
|
|
92
|
+
[`typescript-service`](examples/typescript-service),
|
|
93
|
+
[`go-service`](examples/go-service) and
|
|
94
|
+
[`rust-service`](examples/rust-service): the same four-layer service in
|
|
95
|
+
each language, with its source, breaking the laws it states on purpose
|
|
96
|
+
so you can watch each one fire.
|
|
97
|
+
- [`examples/rails-shop`](examples/rails-shop): thirteen laws in the Ruby
|
|
98
|
+
DSL, one file each, from "jobs never invoke controller code" to
|
|
99
|
+
"billing keeps to its own tables", with the Prism and Rubydex
|
|
100
|
+
providers configured.
|
|
101
|
+
- [`examples/ember-app`](examples/ember-app): an Ember application bound
|
|
102
|
+
to the conventions recipe in one block.
|
|
103
|
+
- [`examples/laws`](examples/laws/README.md): twenty-six laws, one
|
|
104
|
+
directory each, from foreign keys on a tenant column to parts that may
|
|
105
|
+
not cycle, each a complete declaration you copy and run.
|
|
106
|
+
- [`examples/knowledge-base`](examples/knowledge-base/README.md): two
|
|
107
|
+
pages anchored to code, a cluster config, receipts and a finding
|
|
108
|
+
ledger, for the optional track.
|
|
109
|
+
|
|
110
|
+
## Skills, hooks, templates and recipes
|
|
111
|
+
|
|
112
|
+
- [`templates/skills/`](templates/skills): skills for a coding agent.
|
|
113
|
+
Four for any repository: `enola` (ask the graph before searching, grade
|
|
114
|
+
after changing), `enola-laws` (write a law with a reason, lint it, read
|
|
115
|
+
its verdict), `enola-grade-before-push` (a declined grade is not a
|
|
116
|
+
pass) and `enola-intent-first` (read the governing decision before the
|
|
117
|
+
file moves). Five more belong to the knowledge-base track and call its
|
|
118
|
+
[wrapper](guides/12-the-wrapper.md) (`enola-guides copy templates/kb`):
|
|
119
|
+
`enola-deepdive`, `enola-ingest-check`, `enola-drift`,
|
|
120
|
+
`enola-citation-hygiene`, `enola-zoom-out`.
|
|
121
|
+
- [`templates/hooks/`](templates/hooks): the knowledge-base hooks of
|
|
122
|
+
[guide 10](guides/10-hooks.md).
|
|
123
|
+
- [`templates/`](templates): the CI check script and its comment
|
|
124
|
+
renderer, a cluster configuration, and a starter of four Rails laws.
|
|
125
|
+
- [`recipes/`](recipes/README.md): recipes to copy into your own
|
|
126
|
+
`enola/recipes/` and bind in one block, each with the count its laws
|
|
127
|
+
held at on a real repository; starting points a team reviews, never
|
|
128
|
+
defaults the tool applies.
|
|
129
|
+
|
|
130
|
+
## These guides as a command
|
|
131
|
+
|
|
132
|
+
Everything above is also one command, `enola-guides`, with the same items
|
|
133
|
+
and the same output from every package. Take it from the ecosystem you
|
|
134
|
+
already use:
|
|
17
135
|
|
|
18
136
|
```bash
|
|
19
137
|
gem install enola-guides # RubyGems
|
|
@@ -32,94 +150,14 @@ enola-guides list # every item; list guides, list laws, list
|
|
|
32
150
|
enola-guides show guides/01-start-here
|
|
33
151
|
enola-guides copy laws/foreign-keys # writes enola/constraints/foreign-keys.yaml
|
|
34
152
|
enola-guides copy skills/enola # writes .claude/skills/enola/SKILL.md
|
|
153
|
+
enola-guides copy hooks/stop-debt # writes .claude/hooks/stop-debt.sh
|
|
154
|
+
enola-guides copy examples/python-service # a project to try the guides on
|
|
35
155
|
```
|
|
36
156
|
|
|
37
157
|
`copy` writes an item's files under a directory each kind has a default
|
|
38
|
-
for (`enola/constraints` for a law,
|
|
39
|
-
`
|
|
40
|
-
it names the first file that exists and
|
|
41
|
-
carries the tree itself, so
|
|
42
|
-
and a team can pin the
|
|
43
|
-
|
|
44
|
-
## Start with an example
|
|
45
|
-
|
|
46
|
-
[`examples/rails-shop`](examples/rails-shop): a Rails application declaring
|
|
47
|
-
thirteen laws in the Ruby DSL, one file each, from "jobs never invoke controller code" to
|
|
48
|
-
"billing keeps to its own tables" and "a mutating action is authorized",
|
|
49
|
-
with Prism and Rubydex configured as providers beside the extractors.
|
|
50
|
-
[`examples/ember-app`](examples/ember-app): an Ember application bound to
|
|
51
|
-
the conventions recipe in one block. [`examples/knowledge-base`](examples/knowledge-base/README.md):
|
|
52
|
-
two pages anchored to code, a cluster config, receipts and a finding ledger,
|
|
53
|
-
the smallest knowledge base the skills and hooks run against. [`examples/python-service`](examples/python-service),
|
|
54
|
-
[`examples/typescript-service`](examples/typescript-service),
|
|
55
|
-
[`examples/go-service`](examples/go-service) and
|
|
56
|
-
[`examples/rust-service`](examples/rust-service): the same four-layer
|
|
57
|
-
service in each language, with its source, breaking the laws it states on
|
|
58
|
-
purpose so you can watch each one fire. [`examples/laws`](examples/laws/README.md):
|
|
59
|
-
twenty-six laws, one directory each, from foreign keys on a tenant column
|
|
60
|
-
to parts that may not cycle, each a complete declaration you copy and run.
|
|
61
|
-
|
|
62
|
-
## Guides
|
|
63
|
-
|
|
64
|
-
1. [Start here](guides/01-start-here.md): install, snapshot, baseline, a
|
|
65
|
-
graded change, the hooks, a first law. Ten minutes.
|
|
66
|
-
2. [A Rails application](guides/02-rails.md): what enola measures, the
|
|
67
|
-
Prism and Rubydex providers, the recipe, the laws a Rails team writes.
|
|
68
|
-
3. [An Ember application](guides/03-ember.md): the Ember facts, the
|
|
69
|
-
conventions as a recipe, an app inside a larger repository.
|
|
70
|
-
4. [Writing laws](guides/04-writing-laws.md): parts, the twenty-one
|
|
71
|
-
sentences, modes, dates, exemptions, what a refusal means.
|
|
72
|
-
5. [Constraints in CI](guides/05-constraints-in-ci.md): the check step.
|
|
73
|
-
6. [Hooks and agents](guides/06-hooks-and-agents.md): the session hooks,
|
|
74
|
-
the MCP tools, the skills.
|
|
75
|
-
7. [Providers](guides/07-providers.md): the seam, the Ruby pair, the
|
|
76
|
-
census, the runtime capture.
|
|
77
|
-
8. [Beyond one repository](guides/08-beyond-one-repo.md): the cluster, the
|
|
78
|
-
seams, the laws across them, the history.
|
|
79
|
-
9. [A knowledge base with enola](guides/09-a-knowledge-base-with-enola.md):
|
|
80
|
-
what a wiki of decisions gets when its pages anchor to code and every
|
|
81
|
-
number it states was read from a receipt.
|
|
82
|
-
10. [Hooks](guides/10-hooks.md): the four agent hooks a knowledge base runs
|
|
83
|
-
(intent-first gate, turn record, stop-time debt, session refresh).
|
|
84
|
-
11. [The skills, as they run](guides/11-the-skills-as-they-run.md): deepdive
|
|
85
|
-
before shaping, claim check while ingesting, drift on a schedule,
|
|
86
|
-
citation hygiene, the blast radius.
|
|
87
|
-
12. [The wrapper](guides/12-the-wrapper.md): the thin command the skills
|
|
88
|
-
call, the named skip, the receipts and the ledger.
|
|
89
|
-
13. [tabula](guides/13-tabula.md): the knowledge base kept by a tool that
|
|
90
|
-
carries cardo, its laws compiled into `enola/constraints/`, PRDs
|
|
91
|
-
graded with `enola check`, and which hand-built piece each verb
|
|
92
|
-
replaces.
|
|
93
|
-
14. [taha](guides/14-taha.md): agents run on a tabula project under a
|
|
94
|
-
mandate, gated by tabula's verdicts, asking before anything is
|
|
95
|
-
published.
|
|
96
|
-
15. [A Python service](guides/15-python.md),
|
|
97
|
-
16. [a TypeScript or JavaScript service](guides/16-typescript.md),
|
|
98
|
-
17. [a Go service](guides/17-go.md), and
|
|
99
|
-
18. [a Rust service](guides/18-rust.md): what enola measures in each
|
|
100
|
-
language, the `layered` recipe bound to a service, the law over
|
|
101
|
-
`imports` its domain rules need, dependencies, and where v0.4.34 reads
|
|
102
|
-
less than the code says.
|
|
103
|
-
|
|
104
|
-
## Skills
|
|
105
|
-
|
|
106
|
-
The skills under [`templates/skills/`](templates/skills) are the ones used
|
|
107
|
-
day to day with enola's MCP in an agent session: `enola` (ask the graph
|
|
108
|
-
before grepping, grade after changing), `enola-laws` (write a law as a
|
|
109
|
-
sentence with a reason, lint it, read what it verdicts),
|
|
110
|
-
`enola-grade-before-push` (the delta is the deliverable, a declined grade
|
|
111
|
-
is not a pass), `enola-intent-first` (read the governing decision before
|
|
112
|
-
the file moves), and the five a knowledge base runs: `enola-deepdive`,
|
|
113
|
-
`enola-ingest-check`, `enola-drift`, `enola-citation-hygiene`,
|
|
114
|
-
`enola-zoom-out`, each described as it runs in
|
|
115
|
-
[guide 11](guides/11-the-skills-as-they-run.md). Copy a directory into
|
|
116
|
-
your agent's skills folder; the hooks they pair with are under
|
|
117
|
-
[`templates/hooks/`](templates/hooks).
|
|
118
|
-
|
|
119
|
-
## Templates and recipes
|
|
120
|
-
|
|
121
|
-
[`templates/`](templates): the CI check script and its comment renderer,
|
|
122
|
-
a cluster configuration, a constraints starter. [`recipes/`](recipes/README.md) (the catalogue munola binds, each recipe with the number its laws held at):
|
|
123
|
-
recipes a repository copies into its own `enola/recipes/` and binds in one
|
|
124
|
-
line, starting with the Ember conventions and a house-recipe template;
|
|
125
|
-
starting points the team reviews, never defaults the tool applies.
|
|
158
|
+
for (`enola/constraints` for a law, `enola/recipes` for a recipe,
|
|
159
|
+
`.claude/skills` for a skill, `.claude/hooks` for a hook) or the one you
|
|
160
|
+
name, and never overwrites: it names the first file that exists and
|
|
161
|
+
writes nothing. The gem also carries the tree itself, so
|
|
162
|
+
`gem contents enola-guides` lists every file and a team can pin the
|
|
163
|
+
guidance it adopted in its `Gemfile`.
|