@event4u/agent-config 8.6.0 → 8.8.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.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +81 -0
- package/CONTRIBUTING.md +25 -0
- package/README.md +7 -4
- package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +1 -1
- package/dist/agent-src/contexts/execution/orchestration-benchmark-gate.md +28 -16
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +15 -0
- package/dist/agent-src/rules/active-remediation.md +92 -0
- package/dist/agent-src/rules/broken-access-control.md +106 -0
- package/dist/agent-src/rules/communication-through-line.md +42 -0
- package/dist/agent-src/rules/decision-revisit-gate.md +8 -0
- package/dist/agent-src/rules/minimal-safe-diff.md +18 -1
- package/dist/agent-src/rules/prefer-enums-over-literals.md +65 -0
- package/dist/agent-src/rules/senior-engineering-discipline.md +82 -0
- package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +105 -0
- package/dist/agent-src/skills/ai-code-blindspots/evals/triggers.json +52 -0
- package/dist/agent-src/skills/authz-review/SKILL.md +21 -4
- package/dist/agent-src/skills/dependency-upgrade/SKILL.md +20 -0
- package/dist/agent-src/skills/frontend-render-security/SKILL.md +104 -0
- package/dist/agent-src/skills/frontend-render-security/evals/triggers.json +52 -0
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +7 -0
- package/dist/agent-src/skills/skill-writing/SKILL.md +4 -0
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +100 -0
- package/dist/agent-src/skills/supply-chain-intake/evals/triggers.json +52 -0
- package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +43 -2
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/roadmaps.md +24 -0
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +196 -16
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +3 -3
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +13 -5
- package/dist/discovery/trust-report.md +11 -11
- package/dist/discovery/workspaces.json +12 -4
- package/dist/install/emit_host_rules_cli.js +185 -0
- package/dist/install/emit_host_rules_cli.js.map +1 -0
- package/dist/install/install.mjs +11 -2
- package/dist/install/plan.js +4 -1
- package/dist/install/plan.js.map +1 -1
- package/dist/install/rule_scope.js +109 -0
- package/dist/install/rule_scope.js.map +1 -0
- package/dist/install/rule_scope_cli.js +77 -0
- package/dist/install/rule_scope_cli.js.map +1 -0
- package/dist/install/wizard-plan.js +14 -1
- package/dist/install/wizard-plan.js.map +1 -1
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
- package/dist/mcp/registry-manifest.json +4 -4
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +963 -0
- package/dist/scripts/_lib/agent_settings.js.map +1 -0
- package/dist/scripts/_lib/agent_src.js +607 -0
- package/dist/scripts/_lib/agent_src.js.map +1 -0
- package/dist/scripts/_lib/claude_settings_hooks.js +209 -0
- package/dist/scripts/_lib/claude_settings_hooks.js.map +1 -0
- package/dist/scripts/_lib/model_tier.js +64 -0
- package/dist/scripts/_lib/model_tier.js.map +1 -0
- package/dist/scripts/_lib/script_output.js +140 -0
- package/dist/scripts/_lib/script_output.js.map +1 -0
- package/dist/scripts/_lib/user_global_paths.js +297 -0
- package/dist/scripts/_lib/user_global_paths.js.map +1 -0
- package/dist/scripts/condense.js +2181 -0
- package/dist/scripts/condense.js.map +1 -0
- package/dist/server/routes/install.js +18 -2
- package/dist/server/routes/install.js.map +1 -1
- package/dist/server/schemas/settings.js +4 -1
- package/dist/server/schemas/settings.js.map +1 -1
- package/docs/CLAIMS.md +30 -2
- package/docs/architecture.md +2 -2
- package/docs/catalog.md +14 -0
- package/docs/contracts/mcp-tool-inventory.md +31 -30
- package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +6 -0
- package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +2 -2
- package/docs/decisions/ADR-117-subagents-auto-default-on.md +88 -0
- package/docs/decisions/INDEX.md +1 -0
- package/docs/experiences/content_creator.md +2 -0
- package/docs/experiences/finance.md +2 -0
- package/docs/experiences/founder.md +2 -0
- package/docs/experiences/ops.md +2 -0
- package/docs/featured-skills.md +2 -2
- package/docs/getting-started-by-role.md +1 -1
- package/docs/getting-started.md +1 -1
- package/docs/governance-advantage.md +1 -1
- package/docs/guidelines/agent-infra/memory-access.md +12 -0
- package/docs/proof.md +45 -3
- package/docs/release-runbook.md +138 -0
- package/docs/second-brain-scope.md +73 -0
- package/docs/succession.md +80 -0
- package/package.json +2 -2
- package/src/config/agent-settings.template.yml +29 -8
- package/src/install/emit_host_rules_cli.ts +190 -0
- package/src/install/plan.ts +11 -1
- package/src/install/rule_scope.ts +120 -0
- package/src/install/rule_scope_cli.ts +79 -0
- package/src/install/wizard-plan.ts +22 -1
- package/src/scripts/_lib/orchestration_gate.ts +12 -8
- package/src/scripts/_lib/orchestration_savings.ts +127 -0
- package/src/scripts/build_proof.ts +38 -0
- package/src/scripts/chat_history.ts +79 -7
- package/src/scripts/check_trigger_eval_presence.ts +171 -0
- package/src/scripts/domain_soundness_status.ts +236 -0
- package/src/scripts/generate_index.ts +14 -0
- package/src/scripts/hot_context_hook.ts +47 -2
- package/src/scripts/install.sh +118 -4
- package/src/scripts/lint_behavioural_eval_freshness.ts +140 -0
- package/src/scripts/mcp_server/consumer_tool_catalog.json +22 -3
- package/src/scripts/mcp_server/tools.ts +159 -1
- package/src/scripts/memory_lookup.ts +184 -6
- package/src/scripts/memory_replay.ts +285 -0
- package/src/scripts/orchestration_savings_report.ts +100 -0
- package/src/scripts/schemas/domain-truth.schema.json +94 -0
- package/src/scripts/schemas/evals.schema.json +113 -0
- package/src/scripts/second_brain_score.ts +186 -0
- package/src/scripts/session_memory_index.ts +94 -0
- package/src/scripts/skill_eval_coverage.ts +318 -0
- package/src/scripts/trigger_eval_grandfather.json +226 -0
- package/src/server/schemas/settings.ts +11 -2
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
adr: 117
|
|
3
|
+
status: accepted
|
|
4
|
+
date: 2026-07-09
|
|
5
|
+
decision: subagents-auto-default-on
|
|
6
|
+
supersedes: 105
|
|
7
|
+
superseded_by: —
|
|
8
|
+
phase: auto-subagent-orchestration
|
|
9
|
+
type: structural
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# ADR-117 — Flip `subagents.auto` shipped default to `on` (host-gated) on bounded-downside re-evaluation
|
|
13
|
+
|
|
14
|
+
## Status
|
|
15
|
+
|
|
16
|
+
**Accepted** · 2026-07-09. Amends ADR-105 Decision 2 ("conservative-until-proven
|
|
17
|
+
shipped default `ask`"). Resolved by a re-evaluation under `decision-revisit-gate`
|
|
18
|
+
plus a deep AI-council round (claude-sonnet-4-5 + gpt-4o, 2026-07-08, 4 rounds).
|
|
19
|
+
|
|
20
|
+
## Context
|
|
21
|
+
|
|
22
|
+
ADR-105 shipped `subagents.auto: ask` as the conservative default and gated the
|
|
23
|
+
flip to `on` behind a Phase-6 benchmark. That benchmark was found
|
|
24
|
+
**non-producible** in this package's harness (no runtime executes model
|
|
25
|
+
`Task`/`Agent` tool calls), so the 2026-06-26 verdict
|
|
26
|
+
(`orchestration-default-flip-verdict.md`) took the honest-null branch: keep
|
|
27
|
+
`ask`, re-gate on realized telemetry.
|
|
28
|
+
|
|
29
|
+
That re-gate was **self-locking**: realized telemetry only accrues when the
|
|
30
|
+
layer is `on`, but `on` was withheld pending telemetry. Meanwhile the package
|
|
31
|
+
evolved:
|
|
32
|
+
|
|
33
|
+
- **Cost-routing shipped.** `road-to-cost-aware-model-routing` (2026-07-08) landed
|
|
34
|
+
`inferSliceTier` — delegable slices already run on the cheapest capable tier.
|
|
35
|
+
The system is not cost-blind; only the default was conservative.
|
|
36
|
+
- **The harness now executes subagents.** Host harnesses (Claude Code) execute
|
|
37
|
+
`Agent`/`Task` calls, so a directional probe is finally possible.
|
|
38
|
+
|
|
39
|
+
## Decision
|
|
40
|
+
|
|
41
|
+
The shipped default for `subagents.auto` is **`on`** on hosts whose capability
|
|
42
|
+
manifest reports `subagent_spawn: true`, and `off` on hosts without a subagent
|
|
43
|
+
primitive. `resolveShippedDefault()` is retained as the telemetry-driven
|
|
44
|
+
**demotion** gate.
|
|
45
|
+
|
|
46
|
+
This is a **bounded-downside** decision, explicitly **not** a passed rigorous
|
|
47
|
+
benchmark. The basis:
|
|
48
|
+
|
|
49
|
+
1. **Bounded downside.** `on` auto-dispatches only structurally-signalled,
|
|
50
|
+
cost-routed, verified slices (per `auto-dispatch-classification`). It cannot
|
|
51
|
+
delegate unstructured, tiny, or frontier-priced work.
|
|
52
|
+
2. **Directional probe (N=2, real, honest limits).** Two live read-only-fan-out
|
|
53
|
+
delegations this session (~70k, ~86k Sonnet tokens on real work) → ~80%
|
|
54
|
+
per-task saving vs the inline-Opus counterfactual, outputs verified usable.
|
|
55
|
+
Small N, single task-type, arithmetic counterfactual — directional only.
|
|
56
|
+
3. **Reversible + monitored.** A measured telemetry regression demotes back to
|
|
57
|
+
`ask` via `gateVerdict`/`resolveShippedDefault`.
|
|
58
|
+
|
|
59
|
+
## Consequences
|
|
60
|
+
|
|
61
|
+
- On subagent-capable hosts, delegable tasks auto-dispatch without a per-task
|
|
62
|
+
ask; the choice is surfaced in one line.
|
|
63
|
+
- Realized orchestration telemetry now accrues, breaking the deadlock and
|
|
64
|
+
feeding the demotion gate.
|
|
65
|
+
- Hosts without `subagent_spawn` are unaffected (`off`, no-op).
|
|
66
|
+
- The delegability floor (`SIZE_FLOOR = 1` in `auto_dispatch.ts`) is unchanged
|
|
67
|
+
and noted as a follow-up refinement — the structural-signal gate already keeps
|
|
68
|
+
unstructured/tiny work in-session, so it is not load-bearing for this flip.
|
|
69
|
+
|
|
70
|
+
## Alternatives
|
|
71
|
+
|
|
72
|
+
- **Keep `ask`, wait for a rigorous benchmark** — rejected: the benchmark is
|
|
73
|
+
non-producible here and the telemetry re-gate is deadlocked; this is
|
|
74
|
+
indefinite inertia, not caution.
|
|
75
|
+
- **Flip `on` universally with no cost-routing / floor argument** — rejected:
|
|
76
|
+
that is the money-losing "flip on unmeasured claim" the deep council warned
|
|
77
|
+
against; the bounded-downside basis is what makes this flip responsible.
|
|
78
|
+
- **Per-profile default (`on` only for developer)** — rejected for now: no
|
|
79
|
+
per-profile-default plumbing exists (would be new code); host-gating already
|
|
80
|
+
scopes the risk.
|
|
81
|
+
|
|
82
|
+
## References
|
|
83
|
+
|
|
84
|
+
- ADR-105 — automatic subagent orchestration (Decision 2 amended here).
|
|
85
|
+
- ADR-109 — subagent-v1 contract; ADR-110 — discipline profile.
|
|
86
|
+
- `agents/settings/contexts/orchestration-default-flip-verdict.md` § 2026-07-09.
|
|
87
|
+
- `src/agent-src/contexts/execution/orchestration-benchmark-gate.md` — demotion gate.
|
|
88
|
+
- `src/agent-src/contexts/execution/auto-dispatch-classification.md` — delegability + cost-routing.
|
package/docs/decisions/INDEX.md
CHANGED
|
@@ -120,6 +120,7 @@ _Auto-generated by `scripts/adr/regenerate_index.py`. Do not edit._
|
|
|
120
120
|
| [ADR-114](ADR-114-commit-policy-iron-law-override.md) | Commit Policy Iron Law Override | — | — | — |
|
|
121
121
|
| [ADR-115](ADR-115-command-cluster-consolidation-phase-4.md) | Command Cluster Consolidation Phase 4 | accepted | 2026-07-08 | — |
|
|
122
122
|
| [ADR-116](ADR-116-memory-tripwire-activation-path.md) | Memory Tripwire Activation Path | accepted | 2026-07-08 | — |
|
|
123
|
+
| [ADR-117](ADR-117-subagents-auto-default-on.md) | Subagents Auto Default On | accepted | 2026-07-09 | 105 |
|
|
123
124
|
| [ADR-200](ADR-200-python-to-typescript-migration.md) | Python To Typescript Migration | accepted | 2026-06-11 | — |
|
|
124
125
|
|
|
125
126
|
## Unnumbered (legacy)
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
Writers, ghostwriters, marketers — draft in someone else's voice, plan a quarter
|
|
9
9
|
of content, ship a launch, render a cinematic AI video.
|
|
10
10
|
|
|
11
|
+
> **Domain-soundness status (honest).** These skills are forged on TS/PHP; their embedded domain heuristics are **not independently validated**. Until a skill passes a sourced `evals/domain-truth.json` fixture (`./scripts-run src/scripts/domain_soundness_status`), treat its domain correctness as a general-purpose scaffold, not proven practice. The safety floor bounds *liability*, not *correctness*.
|
|
12
|
+
|
|
11
13
|
## First three tasks
|
|
12
14
|
|
|
13
15
|
1. **Write in a voice** — `/ghostwriter` against a public-figure voice profile, or `/post-as` for your own (`.agent-user.md`).
|
|
@@ -9,6 +9,8 @@ The CFO / fractional finance / FP&A lead — build a DCF, stress-test the plan,
|
|
|
9
9
|
frame the runway call. Every output carries the finance safety floor (no final
|
|
10
10
|
invest/raise verdict; assumptions + sensitivity + confidence band).
|
|
11
11
|
|
|
12
|
+
> **Domain-soundness status (honest).** These skills are forged on TS/PHP; their embedded domain heuristics are **not independently validated**. Until a skill passes a sourced `evals/domain-truth.json` fixture (`./scripts-run src/scripts/domain_soundness_status`), treat its domain correctness as a general-purpose scaffold, not proven practice. The safety floor bounds *liability*, not *correctness*.
|
|
13
|
+
|
|
12
14
|
## First three tasks
|
|
13
15
|
|
|
14
16
|
1. **Value it** — `dcf-modeling` walks WACC / terminal-value / 5-year-hold reasoning.
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
The solo / early-stage founder — sharpen a fuzzy idea, rank what to build, write
|
|
9
9
|
the why-now slide, get a neutral second opinion.
|
|
10
10
|
|
|
11
|
+
> **Domain-soundness status (honest).** These skills are forged on TS/PHP; their embedded domain heuristics are **not independently validated**. Until a skill passes a sourced `evals/domain-truth.json` fixture (`./scripts-run src/scripts/domain_soundness_status`), treat its domain correctness as a general-purpose scaffold, not proven practice. The safety floor bounds *liability*, not *correctness*.
|
|
12
|
+
|
|
11
13
|
## First three tasks
|
|
12
14
|
|
|
13
15
|
1. **Sharpen the idea** — `/challenge-me` runs a grill-style interview that turns a vague plan into a copyable pitch.
|
package/docs/experiences/ops.md
CHANGED
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
RevOps, support, SRE-adjacent — threat-model a change before it ships, command
|
|
9
9
|
the incident when it breaks, build the dashboard that catches it next time.
|
|
10
10
|
|
|
11
|
+
> **Domain-soundness status (honest).** These skills are forged on TS/PHP; their embedded domain heuristics are **not independently validated**. Until a skill passes a sourced `evals/domain-truth.json` fixture (`./scripts-run src/scripts/domain_soundness_status`), treat its domain correctness as a general-purpose scaffold, not proven practice. The safety floor bounds *liability*, not *correctness*.
|
|
12
|
+
|
|
11
13
|
## First three tasks
|
|
12
14
|
|
|
13
15
|
1. **Threat-model first** — `/threat-model` enumerates abuse cases and trust boundaries before the first line of code.
|
package/docs/featured-skills.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Featured Skills
|
|
2
2
|
|
|
3
|
-
A curated subset of the
|
|
3
|
+
A curated subset of the 267 skills. Three tiers, one per primary audience. Full catalog lives in [`dist/agent-src/skills/`](../dist/agent-src/skills/); see also [`docs/catalog.md`](catalog.md) for the complete index and [`docs/featured-commands.md`](featured-commands.md) for command-level highlights.
|
|
4
4
|
|
|
5
5
|
> **Eval-gated messaging note.** Until `task bench --corpus non-dev` reports `selection_accuracy >= 0.60` (see `road-to-product-adoption.md` Phase 1), this page is documentation, not marketing. The entries below are the candidates the corpus tests against; their description quality is what the eval validates.
|
|
6
6
|
|
|
@@ -92,4 +92,4 @@ task lint-featured-skills
|
|
|
92
92
|
|
|
93
93
|
CI runs this in `taskfiles/ci-fast.yml`. Stale entries (renamed / removed skill or command) fail the build. See [`scripts/lint_featured_skills.py`](../src/scripts/lint_featured_skills.py) for the matcher.
|
|
94
94
|
|
|
95
|
-
→ Browse all
|
|
95
|
+
→ Browse all 267 skills: [`dist/agent-src/skills/`](../dist/agent-src/skills/) · all 172 commands: [`dist/agent-src/commands/`](../dist/agent-src/commands/)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> Pick the entry that matches what you do day-to-day. Each section names the three skills you will reach for first and shows whether MCP (no terminal) or CLI (terminal) is the simpler install path for that role.
|
|
4
4
|
|
|
5
|
-
`agent-config` ships
|
|
5
|
+
`agent-config` ships 267 skills, 100 governed rules, and 172 commands. You do not need all of them. Each role below filters to the slice that pays back in week one; the rest stays available and shows up on demand when a task references it.
|
|
6
6
|
|
|
7
7
|
> **Taglines at a glance →** [`docs/role-experiences.md`](role-experiences.md) — the one-line pitch per role experience, in one table.
|
|
8
8
|
|
package/docs/getting-started.md
CHANGED
|
@@ -134,7 +134,7 @@ Your agent is now:
|
|
|
134
134
|
- **Respecting your codebase** — no conflicting patterns
|
|
135
135
|
- **Following standards** — consistent code quality
|
|
136
136
|
|
|
137
|
-
This is enforced automatically by
|
|
137
|
+
This is enforced automatically by 100 rules. No configuration needed.
|
|
138
138
|
|
|
139
139
|
---
|
|
140
140
|
|
|
@@ -33,7 +33,7 @@ the host lacks (a static host gives it no runtime attention guarantee, but a
|
|
|
33
33
|
runtime-only system gives it nothing at all here). A runtime-only system contributes *nothing* on these hosts.
|
|
34
34
|
|
|
35
35
|
### 2. Intent routing, not a 500-artefact dump
|
|
36
|
-
A prompt does not load all
|
|
36
|
+
A prompt does not load all 267 skills. `dist/router.json` (96 routed rules, intent →
|
|
37
37
|
skill, keyword/phrase/path triggers) carries the right skill on intent. The
|
|
38
38
|
governance value is *selection discipline* — the host gets the relevant rule
|
|
39
39
|
set, not the whole catalogue as context ballast.
|
|
@@ -22,6 +22,18 @@ agent-config memory:lookup \
|
|
|
22
22
|
# --envelope v1 for the retrieval-contract envelope.
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
+
**Index-first discipline** (road-to-memory-retrieval-economy — the mirror
|
|
26
|
+
of the MCP tool descriptions, for hosts without MCP): when you expect more
|
|
27
|
+
hits than you need, look up with `--envelope v1 --detail index` first —
|
|
28
|
+
each row carries `id`, `title` and `tokens_estimate` (the cost of fetching
|
|
29
|
+
it) — then fetch ONLY the ids you will actually use via the `memory_get`
|
|
30
|
+
MCP tool (or a full `--detail full` lookup narrowed to the right keys),
|
|
31
|
+
batching multiple ids into one call. For precise single-hit lookups the
|
|
32
|
+
full envelope is already minimal — the paired measurement showed index-
|
|
33
|
+
first COSTS tokens there (honest null pinned in
|
|
34
|
+
`internal/bench/reports/memory-retrieval-run.json`), so reach for index
|
|
35
|
+
mode on broad or exploratory queries, not reflexively.
|
|
36
|
+
|
|
25
37
|
Every backend MUST return a list of `Hit` with:
|
|
26
38
|
|
|
27
39
|
| Field | Meaning |
|
package/docs/proof.md
CHANGED
|
@@ -26,16 +26,20 @@ evidence pointer, or `task check-claims` fails the build.
|
|
|
26
26
|
|
|
27
27
|
| Claim | Kind | Evidence | Resolves |
|
|
28
28
|
|---|---|---|---|
|
|
29
|
+
| The release process is documented as an inheritable runbook + succession doc, and the project's bus-factor (trailing-90-day distinct human reviewers) is tracked and reported truthfully — currently 1, not implied to be more. | qual | `docs/succession.md#trailing 90 days` | ✅ |
|
|
29
30
|
| 172 commands. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
|
|
30
31
|
| On a weak host (claude-haiku-4-5) the package produces a significant, placebo-controlled discipline lift on scope/downstream traps; on a strong host the same measurement is a published null — the package transplants discipline a weak model lacks, not model intelligence. | quant | `docs/benchmark.md#weak-host-specific` | ✅ |
|
|
32
|
+
| The non-coding domain skills (finance/founder/ops/content) are forged on TS/PHP and labeled unvalidated until they pass a sourced domain-truth fixture; no public prose implies proven domain correctness, and the validated count is CI-ratcheted. | qual | `src/scripts/domain_soundness_status.ts#checkRatchet` | ✅ |
|
|
31
33
|
| On the READ-ONLY FAN-OUT slice family, tier-downshifted subagent dispatch (lite/haiku vs session-tier-proxy sonnet) nets a ≥30% USD-weighted token-cost reduction at held quality — measured 2026-07-08 (n=10 paired live dispatches, 20 telemetry lines): 10/10 exact-match on BOTH arms, 29.4% fewer raw tokens, 76.5% USD-weighted cost reduction at the 3x haiku↔sonnet price ratio. FAMILY-SCOPED — the mechanical-edit family is unmeasured and its downshift (incl. the deferred tier downgrades of existing units) stays gated. Negative control held: an open-ended synthesis/unknown slice never resolves below the session tier (inferSliceTier → medium/inherit, never lite). | quant | `internal/bench/routing-downshift/results-2026-07-08.md#FAMILY-SCOPED PROVE` | ✅ |
|
|
32
34
|
| The lift-carrying essential cut (kernel + downstream-changes) keeps a significant weak-host discipline lift at a fraction of the full load's tokens, and the lift is FAMILY- and HOST-SCOPED — measured on three hosts: claude-haiku-4-5 (weak) shows the family-scoped lift (trapE 0.533→1.000, 7/7 discordant, corpus cost 1.71x); claude-sonnet-4-6 (strong) is a ceiling null; gpt-5-mini (non-Claude weak, codex prompt-prepend surface) FAILED replication with headroom (corpus Δ=+0.024 p=0.70, capability trend n.s. — no harm claimed, injection-surface confound documented). Therefore discipline_profile: auto enables the lift only where measured (vendor-granular unknown_defaults). Non-claims — the balanced router profile was removed after a NULL measurement (p=0.81, n=24); no full-tier recommendation exists; no cross-vendor lift is claimed. | quant | `docs/benchmark.md#REPLICATION FAILED` | ✅ |
|
|
35
|
+
| Behavioural-eval coverage is measured per tier and CI-ratcheted so it can only rise; the current coverage and its gap are published, never implied as "264 evaluated skills". | qual | `src/scripts/skill_eval_coverage.ts#checkRatchet` | ✅ |
|
|
33
36
|
| The whole layer is compiled into host agents with zero runtime daemon. | qual | `docs/contracts/no-runtime-boundary.md#file-first, no-runtime suite` | ✅ |
|
|
34
|
-
|
|
|
35
|
-
|
|
|
37
|
+
| 100 governed rules. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
|
|
38
|
+
| The second-brain substrate ships as continuity convenience; its cross-session task lift is unmeasured. A deterministic recall scorer + corpus exist (the rig), but no paired run has measured a lift, so no "second brain" capability claim is made until a backed lift entry exists. | qual | `docs/second-brain-scope.md#no measured task-lift` | ✅ |
|
|
39
|
+
| 267 skills (README hero + feature list). | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
|
|
36
40
|
| Removes only its own keys from a shared host config (matched by JSON-pointer + SHA-256), never a neighbour tool's entries. | qual | `docs/contracts/install-layout.md#JSON-pointer` | ✅ |
|
|
37
41
|
|
|
38
|
-
**
|
|
42
|
+
**12 backed claim(s)** — all evidence pointers resolve in CI.
|
|
39
43
|
|
|
40
44
|
Artefact counts in public prose (skills, commands, governed rules,
|
|
41
45
|
guidelines, personas) are **generated from source and CI-drift-checked**:
|
|
@@ -54,6 +58,42 @@ Benchmark results — **including the runs where the package changed nothing**
|
|
|
54
58
|
live in [`docs/benchmark.md`](benchmark.md). We do not delete a measured null to
|
|
55
59
|
make a number look better; the null is the evidence of honesty.
|
|
56
60
|
|
|
61
|
+
**Behavioural-eval coverage — the honest baseline.** Skill *quality* is only
|
|
62
|
+
as good as its measurement. Today **2 of 264** skills carry a behavioural
|
|
63
|
+
`evals.json`, and the highest-traffic / highest-cost tiers (default-surface +
|
|
64
|
+
`rich` + routers, **0 of 35**) are not yet covered. We publish that gap rather
|
|
65
|
+
than imply "264 evaluated skills": coverage is measured per tier
|
|
66
|
+
(`./scripts-run src/scripts/skill_eval_coverage`) and **CI-ratcheted so it can
|
|
67
|
+
only rise** — a merged change can never lower it. Authoring the priority-tier
|
|
68
|
+
evals is gated on per-case human ratification (a generated assertion that
|
|
69
|
+
checks the wrong property is worse than none), so the number grows
|
|
70
|
+
deliberately, not overnight.
|
|
71
|
+
|
|
72
|
+
**Non-coding domain soundness — scoped, not proven.** The `finance` /
|
|
73
|
+
`founder` / `ops` / `content` profiles sell concrete domain value (DCF,
|
|
74
|
+
runway, RICE, incident command, messaging), but the skills are forged on
|
|
75
|
+
TS/PHP — "promising, not proven" off those stacks. A disclaimer floor
|
|
76
|
+
bounds *liability*, not *correctness*: a skill can be format-correct,
|
|
77
|
+
disclaimered, and still embed a wrong domain assumption. Today **0 of 20**
|
|
78
|
+
default-surface domain skills carry a sourced `domain-truth` fixture
|
|
79
|
+
(`./scripts-run src/scripts/domain_soundness_status`); all are labeled
|
|
80
|
+
`unvalidated` and the validated count is CI-ratcheted. Authoring the
|
|
81
|
+
answer keys needs domain competence (a cited method, not the skill's own
|
|
82
|
+
output), so validation lands deliberately — the gap is published, never
|
|
83
|
+
implied away.
|
|
84
|
+
|
|
85
|
+
**Second-brain substrate — continuity convenience, task-lift unmeasured.**
|
|
86
|
+
The memory substrate is built (working-memory continuity across
|
|
87
|
+
compaction, promotable knowledge cards, contradiction surfacing), but
|
|
88
|
+
whether it beats a no-memory baseline on a reproducible task is **not yet
|
|
89
|
+
measured**. The measurement rig exists — a deterministic multi-session
|
|
90
|
+
recall corpus + scorer (`./scripts-run src/scripts/second_brain_score
|
|
91
|
+
--dry-run`, no model-in-the-loop grading) — but the paired
|
|
92
|
+
`memory-on`/`off`/`placebo` run is spend-bearing and pending. So no
|
|
93
|
+
"second brain" capability claim is made anywhere; the substrate ships as
|
|
94
|
+
continuity convenience until a paired run backs a lift. Boundary vs a
|
|
95
|
+
human PKM is stated in [`docs/second-brain-scope.md`](second-brain-scope.md).
|
|
96
|
+
|
|
57
97
|
## 3. Known limits (published, witness-tested)
|
|
58
98
|
|
|
59
99
|
Each limitation below is stated by the skill itself and carries a witness
|
|
@@ -89,6 +129,8 @@ task check-claims # every markered public claim binds to resolvable evidence
|
|
|
89
129
|
task check-refs # no broken internal references
|
|
90
130
|
task check-skill-gaps # every logged known-limit cites a real witness test
|
|
91
131
|
task check-comparison # every comparison-table "our evidence" pointer resolves
|
|
132
|
+
./scripts-run src/scripts/skill_eval_coverage # behavioural-eval coverage, per tier
|
|
133
|
+
./scripts-run src/scripts/skill_eval_coverage --check # the ratchet: coverage may not drop
|
|
92
134
|
task build-proof-check # this page is in sync with its sources
|
|
93
135
|
```
|
|
94
136
|
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Release runbook — cut a correct release from written steps alone
|
|
2
|
+
|
|
3
|
+
> **Bus-factor doc (road-to-maintainer-bus-factor Phase 3).** The goal: a second
|
|
4
|
+
> maintainer — or the current one after a long gap — can cut a correct release by
|
|
5
|
+
> following THIS document, with no tribal knowledge. Every step maps to a real
|
|
6
|
+
> gate or command in the repo; nothing here is aspirational. Companion:
|
|
7
|
+
> [`succession.md`](succession.md) (secrets, operator-gated steps, "healthy main").
|
|
8
|
+
>
|
|
9
|
+
> **Source of truth for the mechanism:** [`src/scripts/release.ts`](../src/scripts/release.ts)
|
|
10
|
+
> (the shared pipeline) + [`.github/workflows/release.yml`](../.github/workflows/release.yml)
|
|
11
|
+
> (the CI entry) + [`ADR-113`](decisions/ADR-113-ci-native-release-label-trigger.md).
|
|
12
|
+
> If this runbook and those disagree, THEY win and this doc is stale — fix it.
|
|
13
|
+
|
|
14
|
+
## 0. Mental model
|
|
15
|
+
|
|
16
|
+
There is **one** release pipeline (`src/scripts/release.ts`) reached by **two**
|
|
17
|
+
entry points that produce the identical result:
|
|
18
|
+
|
|
19
|
+
| Entry point | How | When to use |
|
|
20
|
+
|---|---|---|
|
|
21
|
+
| **Local** | `task release` (interactive) | You want to watch it, or CI dispatch is unavailable. |
|
|
22
|
+
| **CI-native** | merge a PR labeled `release` / `release:major` / `release:minor` / `release:patch` | The normal path — the merge triggers [`release.yml`](../.github/workflows/release.yml), which runs `release.ts --ci`. |
|
|
23
|
+
|
|
24
|
+
`release` auto-detects the semver bump from Conventional Commits since the last
|
|
25
|
+
tag; `release:major|minor|patch` forces it. A manual/recovery entry exists via
|
|
26
|
+
the **workflow_dispatch** on `release.yml` (inputs: `bump`, `version`,
|
|
27
|
+
`dry_run`, `resume`).
|
|
28
|
+
|
|
29
|
+
## 1. Pre-flight (before you start)
|
|
30
|
+
|
|
31
|
+
- [ ] `main` is green on the latest commit (all required checks — see
|
|
32
|
+
[`branch-protection-policy.md`](contracts/branch-protection-policy.md)).
|
|
33
|
+
- [ ] Working tree clean, on `main`, `origin/main` in sync
|
|
34
|
+
(`release.ts` step 1 enforces this and aborts otherwise).
|
|
35
|
+
- [ ] `gh` authenticated (`gh auth status`).
|
|
36
|
+
- [ ] The target tag does **not** already exist (step 1 checks; use `--resume`
|
|
37
|
+
to recover a partial run — see § 5).
|
|
38
|
+
- [ ] You have read [`succession.md`](succession.md) if any secret-gated
|
|
39
|
+
downstream (npm publish, cloud deploy) must succeed this release.
|
|
40
|
+
|
|
41
|
+
## 2. The pipeline — what `release.ts` does (9 steps)
|
|
42
|
+
|
|
43
|
+
Both entry points run these in order. Each step prints what it will do before
|
|
44
|
+
doing it, so a crash localises to a step.
|
|
45
|
+
|
|
46
|
+
1. **Preflight** — on `main`, clean tree, `origin` in sync, `gh` present, target
|
|
47
|
+
tag absent.
|
|
48
|
+
2. **Plan** — compute the new version, parse Conventional Commits since the last
|
|
49
|
+
tag, render the CHANGELOG section.
|
|
50
|
+
3. **Confirm** — show the preview and ask once. `--yes` skips; `--ci` always
|
|
51
|
+
requires `--yes` (no terminal in CI).
|
|
52
|
+
4. **Branch + bump** — create `release/X.Y.Z`; update `package.json`,
|
|
53
|
+
`.claude-plugin/marketplace.json`, `CHANGELOG.md`; then run
|
|
54
|
+
`task release-prepare` so pack manifests + tool projections pick up the new
|
|
55
|
+
version (skip this and the PR's own consistency check fails — PR #226
|
|
56
|
+
post-mortem).
|
|
57
|
+
5. **Commit + push** — commit `release: X.Y.Z`, push the branch, open the PR.
|
|
58
|
+
6. **Wait for CI** — `gh pr checks --watch` (skippable with `--no-wait`).
|
|
59
|
+
7. **Merge** — `gh pr merge --merge --delete-branch`.
|
|
60
|
+
8. **Tag main** — fast-forward `main`, tag the merge commit, push the tag.
|
|
61
|
+
9. **GitHub Release** — `gh release create X.Y.Z --notes <changelog>`. Under
|
|
62
|
+
`--ci`, also dispatches `release-guard.yml` + `publish-npm.yml` +
|
|
63
|
+
`cloud-release.yml` (a bot-pushed tag does not trigger them on its own —
|
|
64
|
+
GitHub's `GITHUB_TOKEN` recursion guard).
|
|
65
|
+
|
|
66
|
+
## 3. The two ways to run it
|
|
67
|
+
|
|
68
|
+
### A. CI-native (normal)
|
|
69
|
+
|
|
70
|
+
1. Open your change PR as usual; get it green + merged into `main`.
|
|
71
|
+
2. To release, add a **`release`** label (or `release:minor` etc.) to a PR and
|
|
72
|
+
merge it. `release.yml` fires on `pull_request: closed` (merged) and runs
|
|
73
|
+
`release.ts --ci`.
|
|
74
|
+
3. **Manual checkpoint (only without `RELEASE_PR_TOKEN`):** GitHub's
|
|
75
|
+
bot-created-PR safeguard queues the release PR's required checks in an
|
|
76
|
+
approval-required state. Go to the release PR → **"Approve workflows to
|
|
77
|
+
run"** once. The job's `gh pr checks --watch` then proceeds. This is a
|
|
78
|
+
deliberate production-release checkpoint, not a bug (see
|
|
79
|
+
[`branch-protection-policy.md`](contracts/branch-protection-policy.md)).
|
|
80
|
+
Configuring `RELEASE_PR_TOKEN` removes it (see [`succession.md`](succession.md)).
|
|
81
|
+
4. Watch the `release.yml` run to green. It merges the release PR, tags, cuts
|
|
82
|
+
the GitHub Release, and dispatches the downstream workflows.
|
|
83
|
+
|
|
84
|
+
### B. Local (`task release`)
|
|
85
|
+
|
|
86
|
+
1. `task release` — interactive; it runs the same 9 steps and asks once at
|
|
87
|
+
step 3. Use `--as minor` / `--version X.Y.Z` to override the bump; `--dry-run`
|
|
88
|
+
to preview with zero git/gh mutations.
|
|
89
|
+
2. Watch it merge + tag. The tag push triggers `publish-npm.yml` directly (local
|
|
90
|
+
runs use your user token, so no recursion guard applies).
|
|
91
|
+
|
|
92
|
+
## 4. Post-release verification
|
|
93
|
+
|
|
94
|
+
- [ ] `git log --first-parent origin/main -1` shows the `release: X.Y.Z` merge.
|
|
95
|
+
- [ ] `gh release view X.Y.Z` exists with the CHANGELOG notes.
|
|
96
|
+
- [ ] `publish-npm.yml` succeeded (npm has the new version) — see
|
|
97
|
+
[`succession.md`](succession.md) for the token dependency.
|
|
98
|
+
- [ ] Downstream deploys (`cloud-release.yml`, site) green if this release
|
|
99
|
+
touched them.
|
|
100
|
+
- [ ] `main` is green post-merge (no drift gate red: `release-drift.yml`,
|
|
101
|
+
`release-guard.yml`).
|
|
102
|
+
|
|
103
|
+
## 5. Recovery — a partial or failed release
|
|
104
|
+
|
|
105
|
+
`release.ts` is **idempotent under `--resume`**: it probes existing state
|
|
106
|
+
(branch, commit, PR, tag, GitHub Release) and skips completed steps.
|
|
107
|
+
|
|
108
|
+
- Re-run `release.yml` via **workflow_dispatch** with `resume: true`, or locally
|
|
109
|
+
`task release -- --resume`.
|
|
110
|
+
- Firing the `release` label path twice is a clean no-op (the `--ci`
|
|
111
|
+
nothing-to-release short-circuit).
|
|
112
|
+
- If a downstream dispatch (npm/cloud) failed but the tag + Release exist, re-run
|
|
113
|
+
that specific workflow from the Actions tab — do **not** re-cut the release.
|
|
114
|
+
|
|
115
|
+
## 6. What can go wrong (known checkpoints)
|
|
116
|
+
|
|
117
|
+
- **Release PR checks stuck "expected"** → the approve-workflows checkpoint in
|
|
118
|
+
§ 3.A step 3. Not a failure; click approve.
|
|
119
|
+
- **Consistency check red on the release PR** → step 4's `task release-prepare`
|
|
120
|
+
did not run or pack manifests drifted; re-run it on the release branch.
|
|
121
|
+
- **Tag exists but no npm version** → `publish-npm.yml` did not fire or failed;
|
|
122
|
+
re-run it (§ 5). Never delete + re-push the tag to "retry".
|
|
123
|
+
- **`main`/`origin` diverged mid-release** → stop; resolve the divergence with
|
|
124
|
+
the `git-workflow` skill's Divergent-State Recovery procedure first, then
|
|
125
|
+
`--resume`.
|
|
126
|
+
|
|
127
|
+
## 7. Verify this runbook is not stale
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
# every command / gate this runbook names still exists:
|
|
131
|
+
test -f src/scripts/release.ts && test -f .github/workflows/release.yml
|
|
132
|
+
grep -q "release-prepare" Taskfile.yml
|
|
133
|
+
./scripts-run src/scripts/check_release_pr_shape --help >/dev/null 2>&1 || true
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
A written-steps-only **dry run** (cut a no-op release following ONLY this doc,
|
|
137
|
+
no tribal knowledge) is the real freshness test — see the roadmap's Phase 3
|
|
138
|
+
dry-run step (maintainer-run; every gap found is a fix to this file).
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Second-brain scope — what it is, what it is not, what is measured
|
|
2
|
+
|
|
3
|
+
> The agent-config "second-brain" substrate is **agent-facing memory**, not a
|
|
4
|
+
> human personal-knowledge-management (PKM) tool. This page states the boundary
|
|
5
|
+
> honestly and binds every capability word to evidence. It follows the
|
|
6
|
+
> `docs/proof.md` § 4 discipline: the category column describes human-PKM only
|
|
7
|
+
> by what is publicly observable, never as a counter-claim to a named project.
|
|
8
|
+
>
|
|
9
|
+
> Roadmap: `road-to-second-brain-delta-proof`. Verdict of record:
|
|
10
|
+
> `agents/settings/contexts/second-brain-delta-verdict.md` (council 2026-07-07).
|
|
11
|
+
|
|
12
|
+
## The honest status (2026-07-08)
|
|
13
|
+
|
|
14
|
+
The substrate is **built** (typed knowledge dirs, INDEX generator, retrieval
|
|
15
|
+
protocol, `hot_context_hook` working-memory continuity across compaction,
|
|
16
|
+
`fold_intake`, contradiction surfacing). What is **not yet measured** is the
|
|
17
|
+
*delta*: whether agent-facing memory beats a no-memory baseline on a
|
|
18
|
+
reproducible multi-session task.
|
|
19
|
+
|
|
20
|
+
- **The measurement rig exists** — a deterministic multi-session recall corpus
|
|
21
|
+
(`internal/bench/second-brain/corpus/`) + a scorer
|
|
22
|
+
(`src/scripts/second_brain_score.ts`) with no model-in-the-loop grading. It
|
|
23
|
+
dry-runs correctly and discriminatingly on hand-written transcripts.
|
|
24
|
+
- **The paired run does not** — the 3-arm `memory-on` / `memory-off` /
|
|
25
|
+
`placebo` measurement (Phase 2) is spend-bearing and has not been run. So
|
|
26
|
+
there is **no measured task-lift**, and therefore **no "second brain"
|
|
27
|
+
capability claim** is made anywhere in public prose. This is the
|
|
28
|
+
falsifiability lock: the marker never outruns the evidence.
|
|
29
|
+
|
|
30
|
+
Until the paired run backs a lift, the substrate is documented as **continuity
|
|
31
|
+
convenience** — it carries working memory across sessions and compaction — not
|
|
32
|
+
a proven task-accuracy multiplier.
|
|
33
|
+
|
|
34
|
+
## What it IS (by design; task-lift unmeasured)
|
|
35
|
+
|
|
36
|
+
| Capability | What it does | Evidence status |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| Working-memory continuity | `hot_context_hook` re-injects a bounded, deterministic cache across session boundaries and Claude Code compaction | mechanism shipped; task-lift **unmeasured** |
|
|
39
|
+
| Promotable knowledge cards/pages | typed dirs + INDEX + retrieval protocol, with redaction + team-share gate | mechanism shipped; task-lift **unmeasured** |
|
|
40
|
+
| Contradiction surfacing | a session that contradicts a prior decision is flagged on promote | mechanism shipped; catch-rate **unmeasured** |
|
|
41
|
+
|
|
42
|
+
## What it is NOT
|
|
43
|
+
|
|
44
|
+
- **Not a human-browsable knowledge graph.** There is no `.obsidian/` config,
|
|
45
|
+
no enforced `[[wikilink]]` convention, no link-density value thesis. An
|
|
46
|
+
editable vault view was evaluated and **rejected** (the dual-write hazard:
|
|
47
|
+
an external edit that never commits silently diverges the INDEX and
|
|
48
|
+
recurrence counters). Browsability, if demanded, is a read-only static
|
|
49
|
+
render — not an editable vault.
|
|
50
|
+
- **Not an Obsidian (or any named PKM) replacement.** The category — a
|
|
51
|
+
human Markdown graph browsed in an editor, value proportional to
|
|
52
|
+
link-density, hybrid human-facing retrieval — is a *different product* for a
|
|
53
|
+
*different consumer* (a person, not an agent). This package writes
|
|
54
|
+
agent-facing memory; it does not serve a human graph browser.
|
|
55
|
+
- **Not a measured accuracy multiplier** — see the honest status above.
|
|
56
|
+
|
|
57
|
+
## Interop, not competition (gated on a measured lift)
|
|
58
|
+
|
|
59
|
+
If — and only if — the Phase-2 paired run shows a real lift, the sanctioned
|
|
60
|
+
next step is a **one-way export** (promoted cards → plain Obsidian-compatible
|
|
61
|
+
Markdown + wikilinks), positioning agent-config as the *writer* and a human PKM
|
|
62
|
+
as the *reader*: complementary, never a replacement. Absent a measured lift,
|
|
63
|
+
the exporter is not built.
|
|
64
|
+
|
|
65
|
+
## Verify
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
./scripts-run src/scripts/second_brain_score # corpus summary
|
|
69
|
+
./scripts-run src/scripts/second_brain_score --dry-run # scorer correct + discriminating, no spend
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
The paired-run delta, when authorized, pins to
|
|
73
|
+
`internal/bench/reports/` and updates `docs/CLAIMS.md` + `docs/benchmark.md`.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Succession — the minimal knowledge to take over
|
|
2
|
+
|
|
3
|
+
> **Bus-factor doc (road-to-maintainer-bus-factor Phase 3).** If the maintainer
|
|
4
|
+
> is unavailable, this is what a successor needs to keep `main` healthy and cut
|
|
5
|
+
> releases. **No secret values live here — pointers only.** Companion:
|
|
6
|
+
> [`release-runbook.md`](release-runbook.md) (the how-to-release steps).
|
|
7
|
+
|
|
8
|
+
## Honest bus-factor (tracked, not inflated)
|
|
9
|
+
|
|
10
|
+
- **Distinct humans who have reviewed/merged in the trailing 90 days: 1** (the
|
|
11
|
+
maintainer, `@matze4u`). The project is a single-maintainer repo; an AI
|
|
12
|
+
self-review gate (deferred — see the roadmap Phase 1) raises the floor but is
|
|
13
|
+
**not** independent human review.
|
|
14
|
+
- Recompute this number honestly at any time:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# merged PRs in the last 90 days + who reviewed them
|
|
18
|
+
gh pr list --state merged --search "merged:>=$(date -v-90d +%Y-%m-%d 2>/dev/null || date -d '90 days ago' +%Y-%m-%d)" \
|
|
19
|
+
--json number,author,reviews \
|
|
20
|
+
--jq '[.[] | .reviews[]?.author.login] | unique'
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Report the count as-is. A bus-factor of 1 stated plainly beats a bus-factor of
|
|
24
|
+
1 implied to be more.
|
|
25
|
+
|
|
26
|
+
## Secrets / tokens — where they live, what they gate
|
|
27
|
+
|
|
28
|
+
Configured in **GitHub → Settings → Secrets and variables → Actions** (repo
|
|
29
|
+
secrets), never in the tree. None is required for the *core* release (version
|
|
30
|
+
bump + tag + GitHub Release); they gate the **downstream** publish/deploy legs.
|
|
31
|
+
|
|
32
|
+
| Secret | Gates | Missing → |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| `RELEASE_PR_TOKEN` (optional PAT / App token, `contents:write` + `pull-requests:write`) | Unattended release PR checks in [`release.yml`](../.github/workflows/release.yml) | One manual **"Approve workflows to run"** click per release (deliberate checkpoint, not a failure). |
|
|
35
|
+
| — (none: **npm OIDC Trusted Publishing**) | `publish-npm.yml` — uses `id-token: write`, no stored npm token | If OIDC trust is misconfigured on npmjs, npm publish fails; fix the trusted-publisher config on the npm package, not a secret. |
|
|
36
|
+
| `CLOUDFLARE_ACCOUNT_ID`, `CLOUDFLARE_API_TOKEN`, `CLOUDFLARE_WORKER_SUBDOMAIN`, `MCP_SMOKE_TOKEN` | `deploy-mcp-worker.yml` (MCP worker deploy + smoke) | MCP worker deploy skips/fails; core release unaffected. |
|
|
37
|
+
| `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GEMINI_API_KEY` | `cross-model-canary.yml` + any AI-council / self-review automation | Canary + council automation skip; core release unaffected. |
|
|
38
|
+
| `GITHUB_TOKEN` (auto-provided) | all workflows' default auth | n/a — GitHub injects it. |
|
|
39
|
+
|
|
40
|
+
The live source of truth for which workflow needs which secret is the
|
|
41
|
+
`secrets.*` references in [`.github/workflows/`](../.github/workflows/) — grep
|
|
42
|
+
there if this table drifts:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
grep -rhoE "secrets\.[A-Z_]+" .github/workflows/ | sort -u
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Operator-gated steps (need a human with credentials)
|
|
49
|
+
|
|
50
|
+
- **Release-PR workflow approval** — the "Approve workflows to run" click when
|
|
51
|
+
`RELEASE_PR_TOKEN` is absent (see the runbook § 3.A).
|
|
52
|
+
- **Branch-protection ruleset** — applied in GitHub → Settings → Rules UI;
|
|
53
|
+
source of truth mirrored in [`branch-protection-policy.md`](contracts/branch-protection-policy.md).
|
|
54
|
+
Not in code; a successor edits it in the UI.
|
|
55
|
+
- **Repo administration** (visibility / rename / delete) — the
|
|
56
|
+
`production-visibility` environment gates manual approval; see
|
|
57
|
+
[`CONTRIBUTING.md`](../CONTRIBUTING.md).
|
|
58
|
+
- **npm trusted-publisher config** — set on npmjs.org for the package, not in
|
|
59
|
+
this repo.
|
|
60
|
+
|
|
61
|
+
## "Healthy main" — what good looks like
|
|
62
|
+
|
|
63
|
+
- Latest `main` commit is green on all required checks for its PR shape
|
|
64
|
+
(see [`branch-protection-policy.md`](contracts/branch-protection-policy.md),
|
|
65
|
+
[`ci-green-floor.md`](contracts/ci-green-floor.md)).
|
|
66
|
+
- No drift gate red: `release-drift.yml`, `release-guard.yml`,
|
|
67
|
+
`check-visibility-drift.yml`, the consistency + claims + proof gates.
|
|
68
|
+
- `docs/CLAIMS.md` resolves (`task check-claims`); `docs/proof.md` is in sync
|
|
69
|
+
(`task build-proof-check`).
|
|
70
|
+
- No completed roadmap left unarchived in `agents/roadmaps/` (the
|
|
71
|
+
`roadmap:progress-check` backstop).
|
|
72
|
+
|
|
73
|
+
## Minimal takeover checklist
|
|
74
|
+
|
|
75
|
+
1. Get `gh` authenticated as a repo admin; confirm `gh auth status`.
|
|
76
|
+
2. Read [`release-runbook.md`](release-runbook.md) end-to-end.
|
|
77
|
+
3. Confirm the secrets above are present for whichever downstream legs matter.
|
|
78
|
+
4. Cut a `--dry-run` release (`task release -- --dry-run`) to see the pipeline
|
|
79
|
+
with zero mutations.
|
|
80
|
+
5. When ready, follow the runbook for a real release.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@event4u/agent-config",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.8.0",
|
|
4
4
|
"description": "Universal AI Agent OS — audited skills, governance rules, commands, and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"private": false,
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"bugs": {
|
|
13
13
|
"url": "https://github.com/event4u-app/agent-config/issues"
|
|
14
14
|
},
|
|
15
|
-
"homepage": "https://
|
|
15
|
+
"homepage": "https://event4u-app.github.io/agent-config",
|
|
16
16
|
"keywords": [
|
|
17
17
|
"ai-agent",
|
|
18
18
|
"mcp",
|