aval-adr 1.3.1 → 1.4.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.
Files changed (2) hide show
  1. package/README.md +47 -1
  2. package/package.json +7 -7
package/README.md CHANGED
@@ -79,6 +79,25 @@ Repo-specific caveats go in `.claude/aval-hook.local.md`. The hook appends that
79
79
  file; installing again never touches it. `--check` is the drift detector for
80
80
  CI: exit 0 wired, exit 1 stale.
81
81
 
82
+ Where the repository vendors packs, the hook also asks whether they are still
83
+ what their sources publish — at most once an hour per repository, under a
84
+ five-second budget that kills the remote call rather than waiting on it, and
85
+ speaking only when a pack is behind or edited:
86
+
87
+ ```
88
+ VENDORED DECISIONS ARE BEHIND THEIR SOURCE. The fleet has decided something
89
+ this repository has not adopted yet, so the heads below may be superseded:
90
+ behind fleet has 1bb600e, main now names e73638d
91
+
92
+ 1 pack(s) behind. Run `aval add <source>` for each, read the diff, then `aval heads --write`.
93
+ ```
94
+
95
+ Offline, a slow remote, lost access: silence, on purpose. A notice that fired
96
+ on every flaky network would be the one nobody read on the day a decision
97
+ changed. The stamp that rates the hour lives under `$XDG_CACHE_HOME/aval`
98
+ (default `~/.cache/aval`), never in the repository. `aval add --check` by hand
99
+ always answers in full.
100
+
82
101
  The hook pushes; **`aval mcp` lets an agent pull** — the same answers as native
83
102
  tools, asked at the moment the question comes up rather than only at the top of
84
103
  a session:
@@ -155,7 +174,7 @@ different edges:
155
174
  | `aval hook install [--check]` | put the heads in front of an agent at session start |
156
175
  | `aval pack [--write\|--check]` | publish this corpus's declarations for others to read |
157
176
  | `aval add <source>… [--dry-run]` | vendor another repository's declarations |
158
- | `aval add --check` | are the vendored packs still what their revisions name |
177
+ | `aval add --check [--quiet] [--budget S]` | are the vendored packs still what their revisions name; `--quiet` speaks only when one is not, `--budget` kills a remote call that has not answered in S seconds |
159
178
 
160
179
  ## Rules: what a decision does not settle
161
180
 
@@ -233,6 +252,33 @@ a disagreement with the fleet's answer at the fleet's scope.
233
252
  Nothing in a pack is ever executed, so there is no trust prompt to match
234
253
  `amont trust`. The review gate is the pull request that adds the file.
235
254
 
255
+ A pack goes stale silently otherwise, so there are two ways to be told. The
256
+ session hook asks (see [In front of an agent](#in-front-of-an-agent)). And a
257
+ consumer's CI can ask, as an advisory job, where its runner holds a credential
258
+ that can read the source — a private corpus is reachable from a private
259
+ consumer's runner with a deploy key, not from a public one's without:
260
+
261
+ ```yaml
262
+ packs:
263
+ name: vendored decisions are current (advisory, non-blocking)
264
+ runs-on: ubuntu-latest
265
+ continue-on-error: true
266
+ steps:
267
+ - uses: actions/checkout@v4
268
+ - uses: webfactory/ssh-agent@v0.9.0 # or however the runner reaches the source
269
+ with:
270
+ ssh-private-key: ${{ secrets.DECISIONS_READ_KEY }}
271
+ - run: |
272
+ if ! aval add --check --quiet --budget 30 > packs.txt; then
273
+ cat packs.txt
274
+ echo "::warning::vendored decisions are behind or edited — run aval add"
275
+ fi
276
+ ```
277
+
278
+ Non-blocking for the same reason a dependency advisory is: a decision that
279
+ changed upstream is information about the fleet, not a defect in the change
280
+ under review.
281
+
236
282
  That "inert" scopes to execution. A pack's text does reach an agent's context,
237
283
  so the hook and the MCP tools both say that a record's wording is data rather
238
284
  than instruction, and a value carrying a control character or a bidi override
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aval-adr",
3
- "version": "1.3.1",
3
+ "version": "1.4.0",
4
4
  "description": "Ask what the current architecture decision is, and get a typed answer",
5
5
  "keywords": [
6
6
  "adr",
@@ -32,11 +32,11 @@
32
32
  "node": ">=18"
33
33
  },
34
34
  "optionalDependencies": {
35
- "@aval-adr/darwin-arm64": "1.3.1",
36
- "@aval-adr/darwin-x64": "1.3.1",
37
- "@aval-adr/linux-arm64-gnu": "1.3.1",
38
- "@aval-adr/linux-x64-gnu": "1.3.1",
39
- "@aval-adr/linux-x64-musl": "1.3.1",
40
- "@aval-adr/win32-x64": "1.3.1"
35
+ "@aval-adr/darwin-arm64": "1.4.0",
36
+ "@aval-adr/darwin-x64": "1.4.0",
37
+ "@aval-adr/linux-arm64-gnu": "1.4.0",
38
+ "@aval-adr/linux-x64-gnu": "1.4.0",
39
+ "@aval-adr/linux-x64-musl": "1.4.0",
40
+ "@aval-adr/win32-x64": "1.4.0"
41
41
  }
42
42
  }