@event4u/agent-config 14.21.0 → 14.22.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/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +198 -0
- package/CREDITS.md +37 -0
- package/dist/agent-src/commands/analyze/inbox.md +380 -5
- package/dist/agent-src/commands/analyze/repo.md +4 -2
- package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +69 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +5 -5
- package/dist/agent-src/rules/external-code-graph-interop.md +19 -14
- package/dist/agent-src/rules/token-efficiency.md +26 -3
- package/dist/agent-src/scripts/_cli_entry.ts +51 -0
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +14 -23
- package/dist/agent-src/scripts/roadmap_gates.ts +4 -20
- package/dist/agent-src/scripts/roadmap_set_step.ts +5 -2
- package/dist/agent-src/scripts/stubs_due.ts +4 -18
- package/dist/agent-src/scripts/update_roadmap_progress.ts +7 -24
- package/dist/agent-src/skills/code-intelligence/SKILL.md +25 -0
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +17 -0
- package/dist/agent-src/templates/agent-settings.md +0 -1
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/cli-delegate/_cli_entry.js +8 -0
- package/dist/cli-delegate/_lib/pin_resolver.js +170 -0
- package/dist/cli-delegate/archival_sweep.js +8 -0
- package/dist/cli-delegate/archive_completed_roadmaps.js +494 -0
- package/dist/cli-delegate/check_update_banner.js +923 -0
- package/dist/cli-delegate/chunk-5EK5WQN6.js +28 -0
- package/dist/cli-delegate/chunk-7XGD2OEU.js +96 -0
- package/dist/cli-delegate/{chunk-643Z7FIC.js → chunk-BIXEDQPZ.js} +6 -0
- package/dist/cli-delegate/chunk-DBH4AHDK.js +155 -0
- package/dist/cli-delegate/chunk-JO25G5H7.js +20 -0
- package/dist/cli-delegate/chunk-LTYVIY76.js +7961 -0
- package/dist/cli-delegate/chunk-QAJS5YWY.js +999 -0
- package/dist/cli-delegate/{chunk-ZVBOHSVF.js → chunk-TGIPZBCW.js} +1 -1
- package/dist/cli-delegate/{chunk-YS6XTLEK.js → chunk-TYSY33MD.js} +56 -6
- package/dist/cli-delegate/chunk-ULET4BYS.js +328 -0
- package/dist/cli-delegate/chunk-YDQSHTD7.js +187 -0
- package/dist/cli-delegate/chunk-YWVXLR44.js +48 -0
- package/dist/cli-delegate/chunk-ZZQBUHFK.js +273 -0
- package/dist/cli-delegate/cmd_conformance.js +2 -2
- package/dist/cli-delegate/cmd_export.js +1 -1
- package/dist/cli-delegate/cmd_handoff.js +26 -2
- package/dist/cli-delegate/cmd_prune.js +1 -1
- package/dist/cli-delegate/cmd_session_recycle.js +2 -2
- package/dist/cli-delegate/cmd_settings_migrate.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +1 -1
- package/dist/cli-delegate/cmd_uninstall.js +1 -1
- package/dist/cli-delegate/cmd_validate.js +1 -1
- package/dist/cli-delegate/dashboard_mode.js +16 -0
- package/dist/cli-delegate/gate_budget.js +24 -0
- package/dist/cli-delegate/gate_execute.js +25 -0
- package/dist/cli-delegate/guarded_baseline.js +18 -0
- package/dist/cli-delegate/resume_probe.js +22 -0
- package/dist/cli-delegate/roadmap_gates.js +638 -0
- package/dist/cli-delegate/roadmap_set_step.js +173 -0
- package/dist/cli-delegate/stub_queue.js +47 -0
- package/dist/cli-delegate/stubs_due.js +38 -0
- package/dist/cli-delegate/ticket_bundles.js +59 -0
- package/dist/cli-delegate/update_roadmap_progress.js +60 -0
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +8 -8
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +1 -1
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +2 -2
- package/dist/discovery/trust-report.md +1 -1
- package/dist/discovery/workspaces.json +2 -2
- package/dist/hooks/dispatch.js +1193 -917
- package/dist/install/claudeLayerCarriage.js +237 -0
- package/dist/install/claudePathsPlan.js +79 -0
- package/dist/install/hostLayerFingerprint.js +1 -1
- package/dist/install/install.mjs +6 -0
- package/dist/install/partitionEligibility.js +231 -117
- package/dist/install/ruleLayerPartition.js +10 -7
- package/dist/mcp/registry-manifest.json +2 -2
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +39219 -38995
- package/dist/scripts/condense.js +32 -25
- package/docs/MIGRATION.md +49 -1
- package/docs/contracts/settings-classes.md +1 -1
- package/docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md +73 -0
- package/package.json +7 -4
- package/src/agent-src/scripts/_cli_entry.ts +51 -0
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +14 -23
- package/src/agent-src/scripts/roadmap_gates.ts +4 -20
- package/src/agent-src/scripts/roadmap_set_step.ts +5 -2
- package/src/agent-src/scripts/stubs_due.ts +4 -18
- package/src/agent-src/scripts/update_roadmap_progress.ts +7 -24
- package/src/config/continuity-surface.json +509 -0
- package/src/config/estate-count-budget.json +1 -1
- package/src/config/gate-coverage.yml +29 -8
- package/src/config/gate-violation-baselines.json +8 -8
- package/src/config/gitignore-block.txt +19 -0
- package/src/config/host-injection-effect.json +73 -0
- package/src/config/packed-binary-manifest.json +33 -0
- package/src/config/preamble-payload-budget.json +112 -105
- package/src/config/publish-surface.json +4 -2
- package/src/install/claudeLayerCarriage.ts +273 -0
- package/src/install/claudePathsPlan.ts +76 -0
- package/src/install/hostLayerFingerprint.ts +1 -1
- package/src/install/partitionEligibility.ts +261 -127
- package/src/install/ruleLayerPartition.ts +19 -23
- package/src/scripts/_dispatch.bash +77 -27
- package/src/scripts/_lib/auto_dispatch.ts +2 -2
- package/src/scripts/_lib/catalogue_layer_parity.ts +146 -0
- package/src/scripts/_lib/continuity_surface.ts +296 -0
- package/src/scripts/_lib/corpus_manifest.ts +26 -9
- package/src/scripts/_lib/hook_settings.ts +1 -1
- package/src/scripts/_lib/injection_effect.ts +151 -0
- package/src/scripts/_lib/layer_overlap_notice.ts +50 -6
- package/src/scripts/_lib/packed_binary_predicate.ts +225 -0
- package/src/scripts/_lib/pin_resolver.ts +13 -0
- package/src/scripts/_lib/regression_neighbourhood.ts +1 -1
- package/src/scripts/_lib/retired_status.ts +74 -0
- package/src/scripts/_lib/skill_catalogue.ts +156 -21
- package/src/scripts/_lib/subagent_capsule.ts +117 -8
- package/src/scripts/ai_council/api_transport.ts +5 -0
- package/src/scripts/ai_council/deliberation_metrics.ts +353 -0
- package/src/scripts/ai_council/prompts.ts +9 -0
- package/src/scripts/ai_council/synthesis_disagreement.ts +206 -0
- package/src/scripts/capture_skill_catalogue.ts +24 -11
- package/src/scripts/check_candidate_lines.ts +499 -0
- package/src/scripts/check_continuity_surface.ts +475 -0
- package/src/scripts/check_dependency_floors.ts +13 -6
- package/src/scripts/check_estate_count.ts +40 -79
- package/src/scripts/check_pack_size.ts +262 -23
- package/src/scripts/check_roadmap_trackable.ts +19 -16
- package/src/scripts/check_rule_layer_partition.ts +54 -34
- package/src/scripts/check_single_delivery.ts +97 -31
- package/src/scripts/check_update_banner.ts +13 -0
- package/src/scripts/code_graph/build.ts +138 -15
- package/src/scripts/code_graph/cli.ts +76 -8
- package/src/scripts/code_graph/extract.ts +11 -0
- package/src/scripts/code_graph/grammar_probe.ts +43 -0
- package/src/scripts/code_graph/loader.ts +88 -14
- package/src/scripts/code_graph/query.ts +121 -11
- package/src/scripts/code_graph/resolution_tiers.ts +238 -0
- package/src/scripts/code_graph/sqlite_store.ts +247 -6
- package/src/scripts/code_graph/types.ts +66 -1
- package/src/scripts/code_graph/validate.ts +23 -0
- package/src/scripts/condense.ts +34 -22
- package/src/scripts/corpus_manifest.ts +5 -5
- package/src/scripts/council_cli.ts +11 -12
- package/src/scripts/count_intent_disagreement.ts +426 -0
- package/src/scripts/handoff_context_hook.ts +79 -0
- package/src/scripts/hook_effect_doctor.ts +82 -1
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +64 -12
- package/src/scripts/hooks/chain_nudge_hook.ts +282 -0
- package/src/scripts/hooks/code_graph_context_hook.ts +212 -0
- package/src/scripts/hooks/concern_registry.ts +4 -2
- package/src/scripts/hooks/host_semantics.ts +1 -1
- package/src/scripts/hooks/orchestration_record_hook.ts +2 -2
- package/src/scripts/hooks/rule_inject_hook.ts +1 -1
- package/src/scripts/hooks/skill_route_hook.ts +11 -4
- package/src/scripts/inbox_source_census.ts +322 -0
- package/src/scripts/install-hooks.sh +82 -0
- package/src/scripts/{lint_carrier_integrity.ts → lint_deferral_integrity.ts} +60 -214
- package/src/scripts/lint_plan_risk_register.ts +13 -17
- package/src/scripts/mcp_server/suggest_skill.ts +72 -0
- package/src/scripts/mcp_server/tools.ts +2 -56
- package/src/scripts/media/lib/adapter-contract.md +7 -2
- package/src/scripts/media/lib/fixtures/flux/asset-0001.png +0 -0
- package/src/scripts/media/lib/fixtures/gemini-image/asset-0001.png +0 -0
- package/src/scripts/media/lib/fixtures/ideogram/asset-0001.png +0 -0
- package/src/scripts/rdp_candidates_delta.ts +276 -0
- package/src/scripts/rdp_quality_eval.ts +217 -19
- package/src/scripts/release_mix_taxonomy.json +3 -2
- package/src/scripts/report_host_injection_effect.ts +189 -0
- package/src/scripts/report_layer_overlap.ts +41 -0
- package/src/scripts/report_skill_menu_census.ts +341 -0
- package/src/scripts/skill_tools/score_skill_relevance.ts +70 -6
- package/src/scripts/skill_tools/suggest_skill_for_task.ts +37 -3
- package/src/vendor/grammars/README.md +61 -0
- package/src/vendor/grammars/tree-sitter-javascript.wasm +0 -0
- package/src/vendor/grammars/tree-sitter-php.wasm +0 -0
- package/src/vendor/grammars/tree-sitter-typescript.wasm +0 -0
- package/src/scripts/_lib/carrier_status.ts +0 -118
- package/src/scripts/_lib/estate_carrier_cases.ts +0 -72
- package/src/scripts/hooks/code_graph_nudge_hook.ts +0 -191
|
@@ -62,7 +62,7 @@ import { createRequire } from 'node:module';
|
|
|
62
62
|
import { spawnSync } from 'node:child_process';
|
|
63
63
|
import * as fs from 'node:fs';
|
|
64
64
|
import * as path from 'node:path';
|
|
65
|
-
import { fileURLToPath
|
|
65
|
+
import { fileURLToPath } from 'node:url';
|
|
66
66
|
import { run_archival_sweep } from './archival_sweep.js';
|
|
67
67
|
import {
|
|
68
68
|
evaluateDashboardOnDisk,
|
|
@@ -72,6 +72,8 @@ import {
|
|
|
72
72
|
} from './dashboard_mode.js';
|
|
73
73
|
import type * as YamlModule from 'yaml';
|
|
74
74
|
import { headerFragment as stubHeaderFragment } from './stubs_due.js';
|
|
75
|
+
|
|
76
|
+
import { isCliEntry } from './_cli_entry.js';
|
|
75
77
|
import { reportGuardedBaselines } from './guarded_baseline.js'; // third step state; contract lives there
|
|
76
78
|
|
|
77
79
|
const _HERE = fileURLToPath(import.meta.url);
|
|
@@ -96,7 +98,9 @@ const EXCLUDE_DIRS: ReadonlySet<string> = new Set(['archive', 'skipped', 'stubs'
|
|
|
96
98
|
|
|
97
99
|
// FRONTMATTER_RE = re.compile(r"\A---\n(.*?)\n---\s*\n", re.DOTALL)
|
|
98
100
|
const FRONTMATTER_RE = /^---\n([\s\S]*?)\n---[ \t\n\r\f\v]*\n/;
|
|
99
|
-
|
|
101
|
+
// A set of one since ADR-262 deleted `status: carrier`; the shape stays so a
|
|
102
|
+
// future unscheduled value is one entry rather than a control-flow change.
|
|
103
|
+
const UNSCHEDULED_VALUES: ReadonlySet<string> = new Set(['draft']);
|
|
100
104
|
|
|
101
105
|
const MERGE_GATED_RE = /merge-gated/i;
|
|
102
106
|
// PR_NUM_RE = re.compile(r"pr\s*[=#:]?\s*#?\s*(\d+)", re.IGNORECASE)
|
|
@@ -1438,28 +1442,7 @@ function main(argv?: readonly string[]): number {
|
|
|
1438
1442
|
return guarded.problems > 0 ? 1 : 0;
|
|
1439
1443
|
}
|
|
1440
1444
|
|
|
1441
|
-
|
|
1442
|
-
if (process.argv[1] === undefined) {
|
|
1443
|
-
return false;
|
|
1444
|
-
}
|
|
1445
|
-
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
1446
|
-
if (import.meta.url === argvUrl) {
|
|
1447
|
-
return true;
|
|
1448
|
-
}
|
|
1449
|
-
// A symlinked invocation (e.g. via `.augment/scripts` → `dist/agent-src/scripts`,
|
|
1450
|
-
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
1451
|
-
// import.meta.url is the resolved real path while argv[1] keeps the symlink
|
|
1452
|
-
// path. Compare realpaths so the entry guard still fires (without this the
|
|
1453
|
-
// dashboard regen silently no-ops when run through the symlink).
|
|
1454
|
-
try {
|
|
1455
|
-
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
1456
|
-
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
1457
|
-
return here === argv;
|
|
1458
|
-
} catch {
|
|
1459
|
-
return false;
|
|
1460
|
-
}
|
|
1461
|
-
}
|
|
1462
|
-
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
1445
|
+
if (isCliEntry(import.meta.url, 'update_roadmap_progress')) {
|
|
1463
1446
|
try {
|
|
1464
1447
|
process.exitCode = main();
|
|
1465
1448
|
} catch (exc) {
|
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "Behavioural continuity-surface inventory. See src/scripts/_lib/continuity_surface.ts for the contract and src/scripts/check_continuity_surface.ts for the gate. Rows are validated against the tree on every run: every `locus` must resolve, and every persisted-state leaf under agents/runtime/state/ that any source file names must appear here with a disposition. Retiring a surface means DELETING its row \u2014 that is what makes a retirement measured rather than claimed.",
|
|
3
|
+
"axis_contract": {
|
|
4
|
+
"public_continuity_commands": "A public CLI verb or slash command that a normal user must invoke for continuity to happen. An optional affordance is excluded WITH its reason, never silently.",
|
|
5
|
+
"session_resume_pickers": "An interactive surface that asks a human to choose which prior session to resume.",
|
|
6
|
+
"persistent_continuity_artefacts": "Persisted state written for later session recovery, verification, or context restoration \u2014 whether or not it is labelled continuity. Corpus discovered behaviourally from agents/runtime/state/, never from the word.",
|
|
7
|
+
"continuity_schemas": "A distinct schema definition for a record a successor session reads to restore state.",
|
|
8
|
+
"normal_path_manual_actions": "A manual step a normal user must take on the normal path for continuity to work."
|
|
9
|
+
},
|
|
10
|
+
"targets": {
|
|
11
|
+
"public_continuity_commands": 0,
|
|
12
|
+
"session_resume_pickers": 0,
|
|
13
|
+
"persistent_continuity_artefacts": 1,
|
|
14
|
+
"continuity_schemas": 1,
|
|
15
|
+
"normal_path_manual_actions": 0
|
|
16
|
+
},
|
|
17
|
+
"rows": [
|
|
18
|
+
{
|
|
19
|
+
"id": "schema:capsule",
|
|
20
|
+
"axis": "continuity_schemas",
|
|
21
|
+
"disposition": "counted",
|
|
22
|
+
"locus": "src/scripts/_lib/subagent_capsule.ts:112",
|
|
23
|
+
"reason": "The one continuity-record schema: version 4, variant-discriminated, accepting v3 and v4. A recorded lock governs it \u2014 one schema, variant-discriminated, no new format, adding fields or variants but never repurposing or removing one. This is the surviving `1`."
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"id": "schema:context-observation",
|
|
27
|
+
"axis": "continuity_schemas",
|
|
28
|
+
"disposition": "excluded",
|
|
29
|
+
"locus": "src/scripts/_lib/context_observation.ts:55",
|
|
30
|
+
"reason": "A recorded probe of external context (the fingerprint a checkpoint may carry). An input to a record, never a record."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "schema:run-checkpoint",
|
|
34
|
+
"axis": "continuity_schemas",
|
|
35
|
+
"disposition": "excluded",
|
|
36
|
+
"locus": "src/scripts/_lib/run_checkpoint.ts:45",
|
|
37
|
+
"reason": "Run-integrity evidence, excluded on the same recorded D2 ruling that excludes the `checkpoints/` artefact: different key (run id), different consumer (`run:supervise`), different failure semantics (an integrity alarm, not a degraded resume)."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "schema:session-eol-state",
|
|
41
|
+
"axis": "continuity_schemas",
|
|
42
|
+
"disposition": "excluded",
|
|
43
|
+
"locus": "src/scripts/_lib/session_eol.ts:55",
|
|
44
|
+
"reason": "The writer`s own bookkeeping, not a record a successor reads. It holds counters and advisory stamps used across Stops within one session; nothing restores a session from it."
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": "manual:run-session-recycle-before-clear",
|
|
48
|
+
"axis": "normal_path_manual_actions",
|
|
49
|
+
"disposition": "counted",
|
|
50
|
+
"locus": "src/scripts/hooks/session_eol_hook.ts:258",
|
|
51
|
+
"reason": "The advisory the stop slot injects past the recycle threshold instructs a human to run `agent-config session:recycle`, wait for the absolute path it prints, and only then `/clear`. That is a manual action on the normal path, and it exists precisely because no automatic writer does. It is what step 3.1 removes the need for."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": ".dispatcher",
|
|
55
|
+
"axis": "persistent_continuity_artefacts",
|
|
56
|
+
"disposition": "excluded",
|
|
57
|
+
"locus": "src/scripts/hooks/cline-dispatcher.sh:77",
|
|
58
|
+
"reason": "The cline dispatcher marker file. Host wiring, not session state."
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"id": ".dispatcher.lock",
|
|
62
|
+
"axis": "persistent_continuity_artefacts",
|
|
63
|
+
"disposition": "excluded",
|
|
64
|
+
"locus": "src/scripts/context_hygiene_hook.ts:36",
|
|
65
|
+
"reason": "A concurrency lock for the dispatcher. Held within one invocation."
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"id": "ai-video-telemetry.jsonl",
|
|
69
|
+
"axis": "persistent_continuity_artefacts",
|
|
70
|
+
"disposition": "excluded",
|
|
71
|
+
"locus": "src/scripts/media/lib/telemetry.sh:7",
|
|
72
|
+
"reason": "Media-pipeline telemetry. A different subsystem entirely."
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"id": "audit",
|
|
76
|
+
"axis": "persistent_continuity_artefacts",
|
|
77
|
+
"disposition": "excluded",
|
|
78
|
+
"locus": "src/scripts/_lib/activation_receipt_producer.ts:322",
|
|
79
|
+
"reason": "The append-only orchestration audit log. Telemetry and cost reporting; no restore path reads it."
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "chain-nudge.json",
|
|
83
|
+
"axis": "persistent_continuity_artefacts",
|
|
84
|
+
"disposition": "excluded",
|
|
85
|
+
"locus": "src/scripts/hooks/chain_nudge_hook.ts:190",
|
|
86
|
+
"reason": "Once-per-session nudge latch."
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"id": "checkpoints",
|
|
90
|
+
"axis": "persistent_continuity_artefacts",
|
|
91
|
+
"disposition": "excluded",
|
|
92
|
+
"locus": "src/scripts/_lib/headless_invocation.ts:48",
|
|
93
|
+
"reason": "Run-integrity evidence, not conversational state. THE KEEP/RETIRE QUESTION IS ANSWERED HERE, IN WRITING, and the answer is KEEP \u2014 which is what roadmap step 4.1's third verify clause asks for, recorded at the point where the count is computed rather than in a document nobody opens. The AI council of 2026-09-07 (D2) ruled it: a run checkpoint is keyed by RUN id, consumed by `run:supervise` and `latestCheckpointFor`, and a disagreement there is an integrity alarm; a continuity record is keyed by SESSION, consumed by resume, and a gap there is a degraded resume. Different lifecycle, consumer, key and failure semantics, so one concern owning both would be \"a lifecycle subsystem wearing a continuity name\". Excluded from the continuity axis on that ruling \u2014 and this is the exclusion the same council named as the gaming vector for position 3, which is exactly why it is printed on every run instead of living inside a predicate."
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"id": "code-graph-context.json",
|
|
97
|
+
"axis": "persistent_continuity_artefacts",
|
|
98
|
+
"disposition": "excluded",
|
|
99
|
+
"locus": "src/scripts/hooks/code_graph_context_hook.ts:90",
|
|
100
|
+
"reason": "Code-intelligence context state for the code-graph hook. A derived cache over the source tree, rebuildable from it, and read within the session that wrote it \u2014 it restores no conversation and no run."
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"id": "code-graph-refresh.lock",
|
|
104
|
+
"axis": "persistent_continuity_artefacts",
|
|
105
|
+
"disposition": "excluded",
|
|
106
|
+
"reason": "A concurrency lock guarding the code-graph refresh so two checkouts do not rebuild the index at once. Held for the duration of one refresh; it carries no state anyone reads afterwards.",
|
|
107
|
+
"locus": "src/scripts/install-hooks.sh:634"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"id": "code-graph-v1.json",
|
|
111
|
+
"axis": "persistent_continuity_artefacts",
|
|
112
|
+
"disposition": "excluded",
|
|
113
|
+
"locus": "src/scripts/code_graph/cli.ts:28",
|
|
114
|
+
"reason": "A derived code-intelligence index. A cache of the source tree, rebuildable from it, and never session state."
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"id": "config-weakening.json",
|
|
118
|
+
"axis": "persistent_continuity_artefacts",
|
|
119
|
+
"disposition": "excluded",
|
|
120
|
+
"locus": "src/scripts/hooks/block_config_weakening.ts:211",
|
|
121
|
+
"reason": "Per-session allowlist-growth counters for the config-weakening guard."
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"id": "context-fill.json",
|
|
125
|
+
"axis": "persistent_continuity_artefacts",
|
|
126
|
+
"disposition": "counted",
|
|
127
|
+
"locus": "src/scripts/hooks/session_eol_hook.ts:31",
|
|
128
|
+
"reason": "Machine-readable fill level plus threshold state, overwritten every Stop. Written for later verification of whether the session crossed the recycle threshold. AUTHORISED FOR RETIREMENT and NOT RETIRED \u2014 the authorisation (AI council 2026-09-08 D1, resting on producer/no-consumer evidence) was obtained on incomplete facts. There is no consumer in code, but `agents/roadmaps/later/road-to-cost-parity-2-state-aware-dispatch.md` is a live parked roadmap whose open steps 1.1 and 1.4c read this file as a planned input, and 1.4c is specifically about bounding its staleness. The same council's own qualification anticipated this: \"no consumer in the tree\" proves no in-repository consumer, and a planned consumer inside the tree is a stronger objection than an external one because it is checkable. Retiring it is a decision for that roadmap's owner, not a side effect of this one. Blocker: `context-fill-retirement-has-a-parked-consumer`."
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"id": "context-hygiene.json",
|
|
132
|
+
"axis": "persistent_continuity_artefacts",
|
|
133
|
+
"disposition": "excluded",
|
|
134
|
+
"locus": "src/scripts/_cli/cmd_analyze_session.ts:15",
|
|
135
|
+
"reason": "Turn and loop counters for the context-hygiene carrier. Read within a session to decide whether to warn; never read by a successor."
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"id": "council-probes.json",
|
|
139
|
+
"axis": "persistent_continuity_artefacts",
|
|
140
|
+
"disposition": "excluded",
|
|
141
|
+
"locus": "src/scripts/ai_council/probe_store.ts:52",
|
|
142
|
+
"reason": "Council seat availability probe cache. Provider state."
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"id": "decisions",
|
|
146
|
+
"axis": "persistent_continuity_artefacts",
|
|
147
|
+
"disposition": "excluded",
|
|
148
|
+
"locus": "src/scripts/_dispatch.bash:1302",
|
|
149
|
+
"reason": "Decision memos written during a run and rendered by `run:supervise`. A record of what was decided, not state a successor resumes from."
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"id": "design-pass-hook.json",
|
|
153
|
+
"axis": "persistent_continuity_artefacts",
|
|
154
|
+
"disposition": "excluded",
|
|
155
|
+
"locus": "src/scripts/hooks/design_pass_hook.ts:66",
|
|
156
|
+
"reason": "Design-pass hook latch."
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"id": "design-slop-hook.json",
|
|
160
|
+
"axis": "persistent_continuity_artefacts",
|
|
161
|
+
"disposition": "excluded",
|
|
162
|
+
"locus": "src/scripts/hooks/design_slop_hook.ts:18",
|
|
163
|
+
"reason": "Design-slop hook latch."
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"id": "discovery-graph-v1.json",
|
|
167
|
+
"axis": "persistent_continuity_artefacts",
|
|
168
|
+
"disposition": "excluded",
|
|
169
|
+
"locus": "src/scripts/complexity_report.ts:223",
|
|
170
|
+
"reason": "A derived artefact-relation cache. Rebuildable from the tree."
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"id": "dispatch-issues.jsonl",
|
|
174
|
+
"axis": "persistent_continuity_artefacts",
|
|
175
|
+
"disposition": "excluded",
|
|
176
|
+
"locus": "src/scripts/hooks/dispatch_issues.ts:12",
|
|
177
|
+
"reason": "Dispatcher self-diagnostics. Read by `hooks_doctor`."
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"id": "edit-shape",
|
|
181
|
+
"axis": "persistent_continuity_artefacts",
|
|
182
|
+
"disposition": "excluded",
|
|
183
|
+
"locus": "src/scripts/hooks/edit_shape_hook.ts:46",
|
|
184
|
+
"reason": "Edit-shape hook per-file state, scoped to one session."
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"id": "end-review-nudge",
|
|
188
|
+
"axis": "persistent_continuity_artefacts",
|
|
189
|
+
"disposition": "excluded",
|
|
190
|
+
"locus": "src/scripts/hooks/end_review_nudge_hook.ts:138",
|
|
191
|
+
"reason": "Once-per-session nudge latch."
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"id": "gate-budget-ledger.jsonl",
|
|
195
|
+
"axis": "persistent_continuity_artefacts",
|
|
196
|
+
"disposition": "excluded",
|
|
197
|
+
"locus": "src/server/schemas/settings.ts:208",
|
|
198
|
+
"reason": "Gate-budget accounting. CI cost bookkeeping."
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"id": "handoff-context.md",
|
|
202
|
+
"axis": "persistent_continuity_artefacts",
|
|
203
|
+
"disposition": "counted",
|
|
204
|
+
"locus": "src/scripts/_cli/cmd_handoff.ts:9",
|
|
205
|
+
"reason": "A second, prose-shaped session handoff written by `agent-config handoff` and injected once at the next `session_start`. Same job as the record, different format and different lifecycle \u2014 a competing mental model, which is what the count exists to expose."
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"id": "hot-context.md",
|
|
209
|
+
"axis": "persistent_continuity_artefacts",
|
|
210
|
+
"disposition": "counted",
|
|
211
|
+
"locus": "src/scripts/hot_context_hook.ts:11",
|
|
212
|
+
"reason": "A working-memory cache rebuilt on stop/session_end/pre_compact and restored at session_start. Persisted state written for context restoration, so the behavioural rule counts it whatever it is called."
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"id": "injection-census.jsonl",
|
|
216
|
+
"axis": "persistent_continuity_artefacts",
|
|
217
|
+
"disposition": "excluded",
|
|
218
|
+
"locus": "src/scripts/bench_hook_injection.ts:42",
|
|
219
|
+
"reason": "Hook-injection benchmark output. Measurement, not state."
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"id": "injection-turn",
|
|
223
|
+
"axis": "persistent_continuity_artefacts",
|
|
224
|
+
"disposition": "excluded",
|
|
225
|
+
"locus": "src/scripts/hooks/injection_budget.ts:349",
|
|
226
|
+
"reason": "Per-turn injection budget accounting. Lives and dies inside one turn."
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"id": "interruptions.jsonl",
|
|
230
|
+
"axis": "persistent_continuity_artefacts",
|
|
231
|
+
"disposition": "excluded",
|
|
232
|
+
"locus": "src/scripts/hooks/interruption_ledger_hook.ts:6",
|
|
233
|
+
"reason": "An interruption ledger for reporting. Analysis input, never a restore source."
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"id": "memory-index-v1.sqlite3",
|
|
237
|
+
"axis": "persistent_continuity_artefacts",
|
|
238
|
+
"disposition": "excluded",
|
|
239
|
+
"locus": "src/scripts/_lib/memory_fts_index.ts:36",
|
|
240
|
+
"reason": "The memory full-text index. A derived cache over `agents/memory/`, rebuildable, and not session state."
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"id": "onboarding-gate.json",
|
|
244
|
+
"axis": "persistent_continuity_artefacts",
|
|
245
|
+
"disposition": "excluded",
|
|
246
|
+
"locus": "src/scripts/onboarding_gate_hook.ts:13",
|
|
247
|
+
"reason": "Onboarding latch. Same class as the disclosure latch."
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"id": "probe-throttle",
|
|
251
|
+
"axis": "persistent_continuity_artefacts",
|
|
252
|
+
"disposition": "excluded",
|
|
253
|
+
"locus": "src/scripts/hooks/probe_throttle.ts:9",
|
|
254
|
+
"reason": "Generic probe throttling stamps."
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"id": "quota-parked",
|
|
258
|
+
"axis": "persistent_continuity_artefacts",
|
|
259
|
+
"disposition": "excluded",
|
|
260
|
+
"locus": "src/scripts/_lib/quota_parked.ts:38",
|
|
261
|
+
"reason": "Council seat quota parking. Provider state, unrelated to session recovery."
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
"id": "recycle-envelope.json",
|
|
265
|
+
"axis": "persistent_continuity_artefacts",
|
|
266
|
+
"disposition": "counted",
|
|
267
|
+
"locus": "src/scripts/_cli/cmd_session_recycle.ts:9",
|
|
268
|
+
"reason": "The continuity record itself: written by `session:recycle`, resolved per session by `resolveContinuityRecord`, consumed once at `session_start` by the handoff-context concern. This is the artefact the whole roadmap is collapsing the others INTO \u2014 the surviving `1`."
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"id": "render",
|
|
272
|
+
"axis": "persistent_continuity_artefacts",
|
|
273
|
+
"disposition": "excluded",
|
|
274
|
+
"locus": "src/scripts/_dispatch.bash:77",
|
|
275
|
+
"reason": "Scratch render output for the UI surfaces."
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"id": "reread-guard",
|
|
279
|
+
"axis": "persistent_continuity_artefacts",
|
|
280
|
+
"disposition": "excluded",
|
|
281
|
+
"locus": "src/scripts/hooks/reread_guard_hook.ts:21",
|
|
282
|
+
"reason": "Per-file re-read guard stamps, scoped to one session and never restored into another."
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
"id": "review-axis",
|
|
286
|
+
"axis": "persistent_continuity_artefacts",
|
|
287
|
+
"disposition": "excluded",
|
|
288
|
+
"locus": "src/scripts/review_axis_report.ts:209",
|
|
289
|
+
"reason": "Review-axis report state. Analysis output."
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
"id": "routing-telemetry.jsonl",
|
|
293
|
+
"axis": "persistent_continuity_artefacts",
|
|
294
|
+
"disposition": "excluded",
|
|
295
|
+
"locus": "src/scripts/_cli/cmd_route_audit.ts:48",
|
|
296
|
+
"reason": "Router match telemetry for `route:audit`. Opt-in measurement."
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
"id": "rule-inject",
|
|
300
|
+
"axis": "persistent_continuity_artefacts",
|
|
301
|
+
"disposition": "excluded",
|
|
302
|
+
"locus": "src/scripts/hooks/rule_inject_hook.ts:124",
|
|
303
|
+
"reason": "Rule-injection dedupe state, scoped to one session."
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
"id": "rule-trips.json",
|
|
307
|
+
"axis": "persistent_continuity_artefacts",
|
|
308
|
+
"disposition": "excluded",
|
|
309
|
+
"locus": "src/scripts/_cli/cmd_route_audit.ts:17",
|
|
310
|
+
"reason": "Rule-trip counters for `route:audit`. Measurement."
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"id": "run-continuation.jsonl",
|
|
314
|
+
"axis": "persistent_continuity_artefacts",
|
|
315
|
+
"disposition": "excluded",
|
|
316
|
+
"locus": "src/scripts/hooks/run_continuation_hook.ts:41",
|
|
317
|
+
"reason": "An append-only event ledger for the stop-slot continuation gate. It records what the gate decided, and nothing reads it to restore a session."
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
"id": "session-eol",
|
|
321
|
+
"axis": "persistent_continuity_artefacts",
|
|
322
|
+
"disposition": "counted",
|
|
323
|
+
"locus": "src/scripts/_cli/handoff_sessions.ts:102",
|
|
324
|
+
"reason": "Per-session end-of-life counters plus the advisory stamps. Persisted for VERIFICATION across Stops (the \"advised, but no envelope exists\" counter-check) and read by `handoff_sessions.ts` to populate the resume picker, so it is in scope under the behavioural rule even though it restores nothing itself."
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
"id": "skill-tiers.json",
|
|
328
|
+
"axis": "persistent_continuity_artefacts",
|
|
329
|
+
"disposition": "excluded",
|
|
330
|
+
"locus": "src/scripts/_lib/mcp_bridge.ts:319",
|
|
331
|
+
"reason": "Computed skill tiers. A derived cache over `src/skills/`."
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
"id": "source-first-gate.json",
|
|
335
|
+
"axis": "persistent_continuity_artefacts",
|
|
336
|
+
"disposition": "excluded",
|
|
337
|
+
"locus": "src/scripts/hooks/source_first_gate_hook.ts:95",
|
|
338
|
+
"reason": "Source-first gate latch state."
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
"id": "source-first-gate.jsonl",
|
|
342
|
+
"axis": "persistent_continuity_artefacts",
|
|
343
|
+
"disposition": "excluded",
|
|
344
|
+
"locus": "src/scripts/hooks/source_first_gate_hook.ts:93",
|
|
345
|
+
"reason": "Source-first gate event ledger."
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
"id": "subagent-ledger",
|
|
349
|
+
"axis": "persistent_continuity_artefacts",
|
|
350
|
+
"disposition": "excluded",
|
|
351
|
+
"locus": "src/scripts/_lib/host_capability.ts:219",
|
|
352
|
+
"reason": "Subagent return envelopes. Worker-generation lifecycle, explicitly a different subject from main-session continuity \u2014 the parent roadmap named the two-envelope vocabulary collision and kept them distinct."
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
"id": "suggestion-latch.json",
|
|
356
|
+
"axis": "persistent_continuity_artefacts",
|
|
357
|
+
"disposition": "excluded",
|
|
358
|
+
"locus": "src/scripts/hooks/suggestion_capture_hook.ts:58",
|
|
359
|
+
"reason": "Once-per-session suggestion latch."
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
"id": "supervise-relaunches.json",
|
|
363
|
+
"axis": "persistent_continuity_artefacts",
|
|
364
|
+
"disposition": "excluded",
|
|
365
|
+
"locus": "src/scripts/interruption_report.ts:264",
|
|
366
|
+
"reason": "Relaunch counters for the supervisor. Run-lifecycle bookkeeping under the run-integrity exclusion above."
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
"id": "surface-probe.json",
|
|
370
|
+
"axis": "persistent_continuity_artefacts",
|
|
371
|
+
"disposition": "excluded",
|
|
372
|
+
"locus": "src/scripts/surface_probe_hook.ts:15",
|
|
373
|
+
"reason": "Surface-probe throttle state."
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
"id": "team-review-gate.json",
|
|
377
|
+
"axis": "persistent_continuity_artefacts",
|
|
378
|
+
"disposition": "excluded",
|
|
379
|
+
"locus": "src/scripts/ai_team/review_gate.ts:102",
|
|
380
|
+
"reason": "Team review-gate latch, consumed within the session that set it."
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
"id": "telemetry-disclosure.json",
|
|
384
|
+
"axis": "persistent_continuity_artefacts",
|
|
385
|
+
"disposition": "excluded",
|
|
386
|
+
"locus": "src/scripts/telemetry_disclosure_hook.ts:26",
|
|
387
|
+
"reason": "A once-per-project disclosure latch. It records that a notice was shown, which is consent bookkeeping rather than context."
|
|
388
|
+
},
|
|
389
|
+
{
|
|
390
|
+
"id": "test-results.json",
|
|
391
|
+
"axis": "persistent_continuity_artefacts",
|
|
392
|
+
"disposition": "excluded",
|
|
393
|
+
"locus": "src/scripts/_lib/test_red_state.ts:2",
|
|
394
|
+
"reason": "Last test-run red state, read by the verification gates within a run."
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
"id": "tool-result-census.jsonl",
|
|
398
|
+
"axis": "persistent_continuity_artefacts",
|
|
399
|
+
"disposition": "excluded",
|
|
400
|
+
"locus": "src/scripts/hooks/tool_result_bytes_hook.ts:92",
|
|
401
|
+
"reason": "Tool-result byte census. Measurement output."
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
"id": "turn-end-gate",
|
|
405
|
+
"axis": "persistent_continuity_artefacts",
|
|
406
|
+
"disposition": "excluded",
|
|
407
|
+
"locus": "src/scripts/_lib/turn_end_refusals.ts:73",
|
|
408
|
+
"reason": "Refusal records for the turn-end quality gate. Consumed by the gate and by `hooks_doctor`, not by a successor session."
|
|
409
|
+
},
|
|
410
|
+
{
|
|
411
|
+
"id": "ui-audit.json",
|
|
412
|
+
"axis": "persistent_continuity_artefacts",
|
|
413
|
+
"disposition": "excluded",
|
|
414
|
+
"locus": "src/scripts/_dispatch.bash:74",
|
|
415
|
+
"reason": "UI audit output. Analysis result."
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
"id": "ui-route-nudge.json",
|
|
419
|
+
"axis": "persistent_continuity_artefacts",
|
|
420
|
+
"disposition": "excluded",
|
|
421
|
+
"locus": "src/scripts/hooks/ui_route_nudge_hook.ts:174",
|
|
422
|
+
"reason": "Once-per-session nudge latch."
|
|
423
|
+
},
|
|
424
|
+
{
|
|
425
|
+
"id": "unattended-budget.json",
|
|
426
|
+
"axis": "persistent_continuity_artefacts",
|
|
427
|
+
"disposition": "excluded",
|
|
428
|
+
"locus": "src/scripts/_lib/unattended_guard.ts:45",
|
|
429
|
+
"reason": "Unattended-run budget accounting."
|
|
430
|
+
},
|
|
431
|
+
{
|
|
432
|
+
"id": "unattended-jobs.json",
|
|
433
|
+
"axis": "persistent_continuity_artefacts",
|
|
434
|
+
"disposition": "excluded",
|
|
435
|
+
"locus": "src/scripts/_lib/unattended_guard.ts:46",
|
|
436
|
+
"reason": "Unattended job records."
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
"id": "verify-before-complete.json",
|
|
440
|
+
"axis": "persistent_continuity_artefacts",
|
|
441
|
+
"disposition": "excluded",
|
|
442
|
+
"locus": "src/scripts/_lib/envelope_grounding.ts:130",
|
|
443
|
+
"reason": "Verification-gate state, consumed within the run that wrote it."
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
"id": "work",
|
|
447
|
+
"axis": "persistent_continuity_artefacts",
|
|
448
|
+
"disposition": "excluded",
|
|
449
|
+
"locus": "src/scripts/explain_run.ts:725",
|
|
450
|
+
"reason": "Work-engine decision traces under `work/<id>/`. Per-run explainability output consumed by `explain_run`, not a restore source."
|
|
451
|
+
},
|
|
452
|
+
{
|
|
453
|
+
"id": "x.json",
|
|
454
|
+
"axis": "persistent_continuity_artefacts",
|
|
455
|
+
"disposition": "excluded",
|
|
456
|
+
"locus": "src/scripts/check_prefix_stable_mutation.ts:268",
|
|
457
|
+
"reason": "Not a surface: a string literal inside `check_prefix_stable_mutation`s own fixture, which the discovery walk sees because it scans source text. Listed rather than filtered out, because a filter is where a real leaf would eventually hide."
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
"id": "verb:chat-history:checkpoint",
|
|
461
|
+
"axis": "public_continuity_commands",
|
|
462
|
+
"disposition": "excluded",
|
|
463
|
+
"locus": "src/cli/registry.ts:113",
|
|
464
|
+
"reason": "Also capture, and out of scope on the same ground. What step 4.1b targets is the colliding NAME, not the capability: the verb dispatches to `chat_history.ts hook-append --event phase` and has four live producers in generated git hooks."
|
|
465
|
+
},
|
|
466
|
+
{
|
|
467
|
+
"id": "verb:chat-history:hook",
|
|
468
|
+
"axis": "public_continuity_commands",
|
|
469
|
+
"disposition": "excluded",
|
|
470
|
+
"locus": "src/cli/registry.ts:112",
|
|
471
|
+
"reason": "Chat-history CAPTURE, which the parent roadmap places out of scope by decision: it is the only cross-host transcript source and has no substitute on hosts with no native transcript."
|
|
472
|
+
},
|
|
473
|
+
{
|
|
474
|
+
"id": "verb:handoff",
|
|
475
|
+
"axis": "public_continuity_commands",
|
|
476
|
+
"disposition": "excluded",
|
|
477
|
+
"locus": "src/cli/registry.ts:62",
|
|
478
|
+
"reason": "An OPTIONAL affordance, not a required step. The parent roadmap`s blocker resolution of 2026-09-06 explicitly preserved `handoff` and `/agent-handoff` as the surviving verb and command, and its goal states the target as \"no continuity-specific command is REQUIRED\" rather than none existing. Excluded on that wording \u2014 and the tension is recorded rather than hidden: read as a bare count of existing public commands, the parent`s target of 0 is unreachable while its own resolution keeps this verb alive."
|
|
479
|
+
},
|
|
480
|
+
{
|
|
481
|
+
"id": "verb:session:recycle",
|
|
482
|
+
"axis": "public_continuity_commands",
|
|
483
|
+
"disposition": "counted",
|
|
484
|
+
"locus": "src/cli/registry.ts:73",
|
|
485
|
+
"reason": "REQUIRED on the normal path today: it is the only writer of the continuity record in the tree, so continuity does not happen unless a human runs it. That is what makes it a continuity command rather than an affordance, and it is on the owner-authorised retirement set of 2026-09-06."
|
|
486
|
+
},
|
|
487
|
+
{
|
|
488
|
+
"id": "command:chat-history",
|
|
489
|
+
"axis": "session_resume_pickers",
|
|
490
|
+
"disposition": "excluded",
|
|
491
|
+
"locus": "src/domains/meta/chat-history/command.md:3",
|
|
492
|
+
"reason": "The orchestrator shell that routes to the import picker; it presents no picker of its own. Counting both would double-count one surface. It is retired together with the picker it routes to, so the row disappears with it."
|
|
493
|
+
},
|
|
494
|
+
{
|
|
495
|
+
"id": "picker:agent-handoff",
|
|
496
|
+
"axis": "session_resume_pickers",
|
|
497
|
+
"disposition": "counted",
|
|
498
|
+
"locus": "src/domains/meta/agent-handoff/command.md:41",
|
|
499
|
+
"reason": "A numbered-options block asking a human which prior session to resume. It is a picker by construction, and the parent`s target of 0 pickers is in tension with its preservation of this command \u2014 recorded here so the tension is visible in the count rather than argued away."
|
|
500
|
+
},
|
|
501
|
+
{
|
|
502
|
+
"id": "picker:chat-history-import",
|
|
503
|
+
"axis": "session_resume_pickers",
|
|
504
|
+
"disposition": "counted",
|
|
505
|
+
"locus": "src/domains/meta/chat-history/import/command.md:77",
|
|
506
|
+
"reason": "A numbered-table session picker plus a resume offer \u2014 a second, competing answer to \"which prior session do I continue from\". On the owner-authorised retirement set of 2026-09-06."
|
|
507
|
+
}
|
|
508
|
+
]
|
|
509
|
+
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"review_by": "2027-08-18",
|
|
8
8
|
"metric": {
|
|
9
9
|
"basis": "src/scripts/check_estate_count.ts. The live side uses collect() from update_roadmap_progress — the same parser the dashboard is generated from, imported rather than re-implemented. The floor side runs the SAME functions over a scratch copy of the base ref's agents/roadmaps/, materialised by _lib/base_tree.ts (git ls-tree + git cat-file --batch; `git archive` cannot be used here because .gitattributes carries `/agents export-ignore` and would yield an empty, silently-zero tree). SKILL METRICS (added 2026-08-24): _lib/skill_estate.ts walks src/skills/*/SKILL.md under the SAME root, so the floor side measures the base ref's own skill tree with the same function. That needs a SECOND materialised subtree — materialiseSubtree takes one prefix — and the two are independent on purpose: a base ref with no src/skills (an old tag, a shallow clone) drops the skill metrics and leaves the roadmap metrics ratcheting.",
|
|
10
|
-
"active_roadmaps": "roadmap candidates at the top level of agents/roadmaps/ that are not drafts, as collect() counts them
|
|
10
|
+
"active_roadmaps": "roadmap candidates at the top level of agents/roadmaps/ that are not drafts, as collect() counts them. EQUAL to the dashboard header's 'N open roadmaps'. It used to add back the candidates collect() dropped for declaring status: carrier, so that FLIPPING a roadmap to that status was count-neutral: the flip measured 3 -> 2 with the gate printing 'estate within its ratchet', because a count below the floor is a drawdown and free; the floor is measured at the base ref, so the lowered number became the next floor and any roadmap could be laundered out of the count by adding one word. ADR-262 (2026-09-08) deleted status: carrier, so there is no flip to neutralise, no add-back, and no divergence from the header left. Drafts stay excluded on both sides, unchanged, and a draft flip has the same laundering shape — it is tolerated because a draft may be deleted freely, which is the property the deleted status did not have.",
|
|
11
11
|
"later_roadmaps": "roadmap-shaped *.md files under agents/roadmaps/later/ — the same is_roadmap_candidate name filter the active side uses, so later/README.md is not counted. Counted from the filesystem because parked roadmaps sit outside collect()'s corpus by design; they are estate all the same, and a drawdown that moved everything into later/ and called the number down would be the burial T1's quality anchor exists to prevent.",
|
|
12
12
|
"open_blockers": "blockers whose Status does not start with `resolved`, summed over the active and later corpora.",
|
|
13
13
|
"floor": "the same three metrics measured at the base ref (origin/main, else the merge commit's first parent). No base ref resolves -> no floor -> the gate FAILS rather than skipping: a shrink-only gate with no floor passes every possible tree. `--base <ref>` is the explicit escape.",
|