Skip to content

Commit a286411

Browse files
fix(spec): repoint the agent, skill and action liveness citations at the real cloud path (#13309)
* fix(spec): repoint agent/skill/action liveness citations at the real cloud path The 22 citations in these three ledgers named packages/services/service-ai/..., a path that exists in neither repository, and each _note repeated a claim that is false in this checkout. Repointed onto cloud's real layout with an explicit cloud realm marker, and repaired the note. * chore(spec): add changeset for the liveness cloud-path repair --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 426ad58 commit a286411

4 files changed

Lines changed: 64 additions & 25 deletions

File tree

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
---
2+
"@objectstack/spec": patch
3+
---
4+
5+
fix(spec): repoint the `agent`, `skill` and `action` liveness citations at the real cloud path (#13272)
6+
7+
The `liveness/` ledgers ship inside this package's npm tarball (they are named
8+
in `files`), so this is a published-data change even though no runtime
9+
behaviour moves and no schema key changes. No `status` verdict is altered.
10+
11+
Twenty-two `evidence` citations across `liveness/agent.json` (11),
12+
`liveness/skill.json` (8) and `liveness/action.json` (3) named
13+
`packages/services/service-ai/...` — a path that exists in **neither**
14+
repository. The framework has no service-ai tree at all (`packages/services/`
15+
ships every sibling service except it), and cloud's real layout, measured at
16+
cloud@`15f55df`, is `packages/service-ai/...`. Each `_note` additionally
17+
repeated the claim that the framework's own tree "is a stale build artifact
18+
with no `src/`", which is false in the opposite direction from the one it
19+
suggests: absent, not stale.
20+
21+
Why twenty-two dead pointers sat green, and why the repair is not a plain
22+
re-spelling: `FOREIGN_PATH_PREFIXES` in `scripts/liveness/evidence.mts` lists
23+
the *stale* spelling, so those citations were silently treated as foreign and
24+
never resolved — they did not survive scrutiny, they were exempt from it. The
25+
real cloud path is repo-rooted in shape and is not in that list, so a naive
26+
repoint resolves as LOCAL and fails CI. Measured on this branch by ablation:
27+
stripping the realm markers moves the gate from `467 repo-local ... 467
28+
resolved` to `489 ... 467 resolved, 22 MISSING` and exit 1. Every repointed
29+
citation therefore carries the explicit `cloud` realm marker, which is the
30+
attribution `scanEvidence` reads directly rather than a special case for one
31+
prefix. The constant is deliberately left alone: adding the real path to it
32+
would let an unmarked citation pass silently, trading one unfalsifiable
33+
spelling for another.
34+
35+
Scope boundary recorded in each `_note`: this corrects the package root from
36+
the measurement above only. The cited consumers were **not** re-read against a
37+
cloud checkout, so no `verifiedAt` is stamped and no `#symbol` anchor is added
38+
— the gate never resolves a foreign anchor, so an unverified one would
39+
re-create the very unfalsifiable pointer this repair removes.

packages/spec/liveness/action.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"type": "action",
3-
"_note": "ActionSchema. Seeded from docs/audits/2026-06-actionschema-property-liveness.md. Renderers live in objectui (evidence cited as prose, not framework paths); framework-side: service-ai action-tools, runtime body-runner/http-dispatcher. Containers (params/resultDialog/ai/aria) classified at top level — no divergent sub-statuses in the audit. ⚠ EVIDENCE LIVES IN CLOUD/EE: the `packages/services/service-ai/...` paths cited below are the closed `@objectstack/service-ai` runtime in the CLOUD repo, NOT git-tracked framework code (the framework's own service-ai tree is a stale build artifact with no src/). These props are `live` because that cloud runtime consumes them; the OPEN framework edition does not — see content/docs/ai for the open/cloud boundary. 2026-07-30 (#3896 close-out sweep): the dead authoring keys were REMOVED — tombstoned at the schema with prescriptions (retiredKey) and stripped by the protocol-17 close-out conversions; entries deleted per the #3715 precedent.",
3+
"_note": "ActionSchema. Seeded from docs/audits/2026-06-actionschema-property-liveness.md. Renderers live in objectui (evidence cited as prose, not framework paths); framework-side: service-ai action-tools, runtime body-runner/http-dispatcher. Containers (params/resultDialog/ai/aria) classified at top level — no divergent sub-statuses in the audit. ⚠ EVIDENCE LIVES IN CLOUD/EE: the `cloud: packages/service-ai/...` paths cited below are the closed `@objectstack/service-ai` runtime in the CLOUD repo, NOT git-tracked framework code. 2026-08-30 (#13272): the previous wording of this sentence was false in BOTH halves. (a) It called the framework's own service-ai tree “a stale build artifact with no src/” — there is no tree at all: `packages/services/` holds every sibling service EXCEPT service-ai, and `git ls-files | grep -ic service-ai` returns 0. Absent, not stale. (b) The citations spelled `packages/services/service-ai/...`, a path present in NEITHER repo; cloud's real layout, measured at cloud@15f55df (#13042), is `packages/service-ai/...`. Every citation below now carries the explicit `cloud` realm marker, so it is attributed by the marker `scanEvidence` reads rather than riding the `FOREIGN_PATH_PREFIXES` special case that silently exempted the stale spelling from resolution — which is why 22 dead pointers sat green. ⚠ NOT RE-VERIFIED: this repair corrected the package root from that recorded measurement ONLY. No consumer below was re-read against a cloud checkout, so no `verifiedAt` was stamped and no `#symbol` anchor was added — the gate never resolves a foreign anchor, so an unchecked one would re-create the unfalsifiable pointer this repair removes. Re-verifying these consumers against a live cloud checkout is still open (#13272). These props are `live` because that cloud runtime consumes them; the OPEN framework edition does not — see content/docs/ai for the open/cloud boundary. 2026-07-30 (#3896 close-out sweep): the dead authoring keys were REMOVED — tombstoned at the schema with prescriptions (retiredKey) and stripped by the protocol-17 close-out conversions; entries deleted per the #3715 precedent.",
44
"props": {
55
"name": {
66
"status": "live",
@@ -18,7 +18,7 @@
1818
},
1919
"objectName": {
2020
"status": "live",
21-
"evidence": "packages/services/service-ai/src/tools/action-tools.ts:535",
21+
"evidence": "cloud: packages/service-ai/src/tools/action-tools.ts:535",
2222
"note": "action dispatch + AI bridge."
2323
},
2424
"icon": {
@@ -60,7 +60,7 @@
6060
},
6161
"params": {
6262
"status": "live",
63-
"evidence": "packages/services/service-ai/src/tools/action-tools.ts",
63+
"evidence": "cloud: packages/service-ai/src/tools/action-tools.ts",
6464
"note": "field/objectOverride/defaultFromRow/options/placeholder/helpText/defaultValue/required all consumed."
6565
},
6666
"variant": {
@@ -120,7 +120,7 @@
120120
},
121121
"ai": {
122122
"status": "live",
123-
"evidence": "packages/services/service-ai/src/tools/action-tools.ts",
123+
"evidence": "cloud: packages/service-ai/src/tools/action-tools.ts",
124124
"note": "full AI bridge (exposed/description/category/paramHints/outputSchema/requiresConfirmation)."
125125
},
126126
"recordIdParam": {

packages/spec/liveness/agent.json

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
{
22
"type": "agent",
3-
"_note": "AgentSchema. Seeded from docs/audits/2026-06-agentschema-property-liveness.md. agent-runtime.ts is the runtime consumer; AgentPreview is display-only. ⚠ EVIDENCE LIVES IN CLOUD/EE: the `packages/services/service-ai/...` paths cited below are the closed `@objectstack/service-ai` runtime in the CLOUD repo, NOT git-tracked framework code (the framework's own service-ai tree is a stale build artifact with no src/). These props are `live` because that cloud runtime consumes them; the OPEN framework edition does not — see content/docs/ai for the open/cloud boundary. 2026-07-30 (#3896 close-out sweep): the dead authoring keys were REMOVED — tombstoned at the schema with prescriptions (retiredKey) and stripped by the protocol-17 close-out conversions; entries deleted per the #3715 precedent. agent.knowledge (and AIKnowledgeSchema) removed; the topics→sources rename was absorbed into the removal pre-release.",
3+
"_note": "AgentSchema. Seeded from docs/audits/2026-06-agentschema-property-liveness.md. agent-runtime.ts is the runtime consumer; AgentPreview is display-only. ⚠ EVIDENCE LIVES IN CLOUD/EE: the `cloud: packages/service-ai/...` paths cited below are the closed `@objectstack/service-ai` runtime in the CLOUD repo, NOT git-tracked framework code. 2026-08-30 (#13272): the previous wording of this sentence was false in BOTH halves. (a) It called the framework's own service-ai tree “a stale build artifact with no src/” — there is no tree at all: `packages/services/` holds every sibling service EXCEPT service-ai, and `git ls-files | grep -ic service-ai` returns 0. Absent, not stale. (b) The citations spelled `packages/services/service-ai/...`, a path present in NEITHER repo; cloud's real layout, measured at cloud@15f55df (#13042), is `packages/service-ai/...`. Every citation below now carries the explicit `cloud` realm marker, so it is attributed by the marker `scanEvidence` reads rather than riding the `FOREIGN_PATH_PREFIXES` special case that silently exempted the stale spelling from resolution — which is why 22 dead pointers sat green. ⚠ NOT RE-VERIFIED: this repair corrected the package root from that recorded measurement ONLY. No consumer below was re-read against a cloud checkout, so no `verifiedAt` was stamped and no `#symbol` anchor was added — the gate never resolves a foreign anchor, so an unchecked one would re-create the unfalsifiable pointer this repair removes. Re-verifying these consumers against a live cloud checkout is still open (#13272). These props are `live` because that cloud runtime consumes them; the OPEN framework edition does not — see content/docs/ai for the open/cloud boundary. 2026-07-30 (#3896 close-out sweep): the dead authoring keys were REMOVED — tombstoned at the schema with prescriptions (retiredKey) and stripped by the protocol-17 close-out conversions; entries deleted per the #3715 precedent. agent.knowledge (and AIKnowledgeSchema) removed; the topics→sources rename was absorbed into the removal pre-release.",
44
"props": {
55
"name": {
66
"status": "live",
7-
"evidence": "packages/services/service-ai/src/agent-runtime.ts"
7+
"evidence": "cloud: packages/service-ai/src/agent-runtime.ts"
88
},
99
"surface": {
1010
"status": "live",
11-
"evidence": "packages/services/service-ai/src/agent-runtime.ts (resolveActiveSkills)",
11+
"evidence": "cloud: packages/service-ai/src/agent-runtime.ts (resolveActiveSkills)",
1212
"note": "ADR-0063 §1 — the product surface this agent binds ('ask'|'build'). resolveActiveSkills enforces that only surface-compatible skills (matching, or 'both') attach; tool scoping is derived from that bundle."
1313
},
1414
"label": {
@@ -21,47 +21,47 @@
2121
},
2222
"role": {
2323
"status": "live",
24-
"evidence": "packages/services/service-ai/src/agent-runtime.ts",
24+
"evidence": "cloud: packages/service-ai/src/agent-runtime.ts",
2525
"note": "persona → system prompt."
2626
},
2727
"instructions": {
2828
"status": "live",
29-
"evidence": "packages/services/service-ai/src/agent-runtime.ts",
29+
"evidence": "cloud: packages/service-ai/src/agent-runtime.ts",
3030
"note": "system prompt."
3131
},
3232
"model": {
3333
"status": "live",
34-
"evidence": "packages/services/service-ai/src/agent-runtime.ts:264",
34+
"evidence": "cloud: packages/service-ai/src/agent-runtime.ts:264",
3535
"note": "PARTIAL — model/temperature/maxTokens applied; model.provider + topP DEAD."
3636
},
3737
"skills": {
3838
"status": "live",
39-
"evidence": "packages/services/service-ai/src/agent-runtime.ts",
39+
"evidence": "cloud: packages/service-ai/src/agent-runtime.ts",
4040
"note": "Agent→Skill→Tool."
4141
},
4242
"tools": {
4343
"status": "live",
44-
"evidence": "packages/services/service-ai/src/agent-runtime.ts",
44+
"evidence": "cloud: packages/service-ai/src/agent-runtime.ts",
4545
"note": "legacy direct-tool fallback."
4646
},
4747
"active": {
4848
"status": "live",
49-
"evidence": "packages/services/service-ai/src/agent-runtime.ts",
49+
"evidence": "cloud: packages/service-ai/src/agent-runtime.ts",
5050
"note": "gates listing + 403 on chat."
5151
},
5252
"planning": {
5353
"status": "live",
54-
"evidence": "packages/services/service-ai/src/agent-runtime.ts",
54+
"evidence": "cloud: packages/service-ai/src/agent-runtime.ts",
5555
"note": "Only planning.maxIterations remains; the dead strategy/allowReplan knobs were removed in 16.0 (#2377)."
5656
},
5757
"access": {
5858
"status": "live",
59-
"evidence": "packages/services/service-ai/src/routes/agent-access.ts:50",
59+
"evidence": "cloud: packages/service-ai/src/routes/agent-access.ts:50",
6060
"note": "evaluateAgentAccess() — allow-list by userId/role; enforced at the chat route (agent-routes.ts:151). #1884 (landed after the 2026-06 audit, which still listed it dead)."
6161
},
6262
"permissions": {
6363
"status": "live",
64-
"evidence": "packages/services/service-ai/src/routes/agent-access.ts:50",
64+
"evidence": "cloud: packages/service-ai/src/routes/agent-access.ts:50",
6565
"note": "evaluateAgentAccess() — caller must hold ALL required permissions/roles; enforced at the chat route. #1884."
6666
},
6767
"lifecycle": {

packages/spec/liveness/skill.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,52 @@
11
{
22
"type": "skill",
3-
"_note": "SkillSchema. Seeded from docs/audits/2026-06-skillschema-property-liveness.md. skill-registry.ts + agent-runtime.ts are the runtime consumers. ⚠ EVIDENCE LIVES IN CLOUD/EE: the `packages/services/service-ai/...` paths cited below are the closed `@objectstack/service-ai` runtime in the CLOUD repo, NOT git-tracked framework code (the framework's own service-ai tree is a stale build artifact with no src/). 2026-08-06 (#3905): that used to be the WHOLE story — the open framework consumed nothing here. It now consumes the INSTRUCTIONS half: `packages/mcp/src/skill-prompts.ts` projects every active skill carrying `instructions` onto the MCP `prompts` primitive (name/label/description/instructions/active are read there, in-repo and testable). The TOOL-BINDING half (`tools`, `surface`, `triggerConditions`) stays cloud-runtime-only and now says so in the schema's own JSDoc. See content/docs/ai for the open/cloud boundary. 2026-07-30 (#3896 close-out sweep): the dead authoring keys were REMOVED — tombstoned at the schema with prescriptions (retiredKey) and stripped by the protocol-17 close-out conversions; entries deleted per the #3715 precedent.",
3+
"_note": "SkillSchema. Seeded from docs/audits/2026-06-skillschema-property-liveness.md. skill-registry.ts + agent-runtime.ts are the runtime consumers. ⚠ EVIDENCE LIVES IN CLOUD/EE: the `cloud: packages/service-ai/...` paths cited below are the closed `@objectstack/service-ai` runtime in the CLOUD repo, NOT git-tracked framework code. 2026-08-30 (#13272): the previous wording of this sentence was false in BOTH halves. (a) It called the framework's own service-ai tree “a stale build artifact with no src/” — there is no tree at all: `packages/services/` holds every sibling service EXCEPT service-ai, and `git ls-files | grep -ic service-ai` returns 0. Absent, not stale. (b) The citations spelled `packages/services/service-ai/...`, a path present in NEITHER repo; cloud's real layout, measured at cloud@15f55df (#13042), is `packages/service-ai/...`. Every citation below now carries the explicit `cloud` realm marker, so it is attributed by the marker `scanEvidence` reads rather than riding the `FOREIGN_PATH_PREFIXES` special case that silently exempted the stale spelling from resolution — which is why 22 dead pointers sat green. ⚠ NOT RE-VERIFIED: this repair corrected the package root from that recorded measurement ONLY. No consumer below was re-read against a cloud checkout, so no `verifiedAt` was stamped and no `#symbol` anchor was added — the gate never resolves a foreign anchor, so an unchecked one would re-create the unfalsifiable pointer this repair removes. Re-verifying these consumers against a live cloud checkout is still open (#13272). 2026-08-06 (#3905): that used to be the WHOLE story — the open framework consumed nothing here. It now consumes the INSTRUCTIONS half: `packages/mcp/src/skill-prompts.ts` projects every active skill carrying `instructions` onto the MCP `prompts` primitive (name/label/description/instructions/active are read there, in-repo and testable). The TOOL-BINDING half (`tools`, `surface`, `triggerConditions`) stays cloud-runtime-only and now says so in the schema's own JSDoc. See content/docs/ai for the open/cloud boundary. 2026-07-30 (#3896 close-out sweep): the dead authoring keys were REMOVED — tombstoned at the schema with prescriptions (retiredKey) and stripped by the protocol-17 close-out conversions; entries deleted per the #3715 precedent.",
44
"props": {
55
"name": {
66
"status": "live",
7-
"evidence": "packages/services/service-ai/src/skill-registry.ts; packages/mcp/src/skill-prompts.ts (projectSkillPrompt)",
7+
"evidence": "cloud: packages/service-ai/src/skill-registry.ts; packages/mcp/src/skill-prompts.ts (projectSkillPrompt)",
88
"note": "also the MCP prompt name in the open framework (#3905).",
99
"verifiedAt": "2026-08-06"
1010
},
1111
"surface": {
1212
"status": "live",
13-
"evidence": "packages/services/service-ai/src/agent-runtime.ts (resolveActiveSkills)",
13+
"evidence": "cloud: packages/service-ai/src/agent-runtime.ts (resolveActiveSkills)",
1414
"note": "ADR-0063 §3 / ADR-0064 — skill↔agent affinity. resolveActiveSkills hard-fails when a bound skill's surface ('ask'|'build'|'both') is incompatible with the agent's surface; the union of surface-compatible skills' tools IS the agent's tool set (no global fall-through). CLOUD-RUNTIME-ONLY (#3905) — the open framework has no agent to bind to.",
1515
"verifiedAt": "2026-08-06"
1616
},
1717
"label": {
1818
"status": "live",
19-
"evidence": "packages/services/service-ai/src/skill-registry.ts:247; packages/mcp/src/skill-prompts.ts (projectSkillPrompt)",
19+
"evidence": "cloud: packages/service-ai/src/skill-registry.ts:247; packages/mcp/src/skill-prompts.ts (projectSkillPrompt)",
2020
"note": "injected into the agent system prompt (cloud); the MCP prompt `title` in the open framework (#3905).",
2121
"verifiedAt": "2026-08-06"
2222
},
2323
"description": {
2424
"status": "live",
25-
"evidence": "packages/services/service-ai/src/skill-registry.ts:247; packages/mcp/src/skill-prompts.ts (projectSkillPrompt)",
25+
"evidence": "cloud: packages/service-ai/src/skill-registry.ts:247; packages/mcp/src/skill-prompts.ts (projectSkillPrompt)",
2626
"note": "injected into prompt (cloud); the MCP prompt `description` in the open framework (#3905).",
2727
"verifiedAt": "2026-08-06"
2828
},
2929
"instructions": {
3030
"status": "live",
31-
"evidence": "packages/services/service-ai/src/skill-registry.ts:247; packages/mcp/src/skill-prompts.ts (skillPromptResult)",
31+
"evidence": "cloud: packages/service-ai/src/skill-registry.ts:247; packages/mcp/src/skill-prompts.ts (skillPromptResult)",
3232
"note": "injected into prompt (cloud); served as the MCP `prompts/get` message body in the open framework (#3905) — a skill without it is not projected at all.",
3333
"verifiedAt": "2026-08-06"
3434
},
3535
"tools": {
3636
"status": "live",
37-
"evidence": "packages/services/service-ai/src/skill-registry.ts:206",
37+
"evidence": "cloud: packages/service-ai/src/skill-registry.ts:206",
3838
"note": "tool-contribution path incl. action_* wildcard. CLOUD-RUNTIME-ONLY (#3905): MCP exposes one flat tool list to a client-side model, so there is nothing to bind server-side; still validated at authoring time in both distributions.",
3939
"verifiedAt": "2026-08-06"
4040
},
4141
"triggerConditions": {
4242
"status": "live",
43-
"evidence": "packages/services/service-ai/src/skill-registry.ts:153",
43+
"evidence": "cloud: packages/service-ai/src/skill-registry.ts:153",
4444
"note": "THE activation gate — AND of {field,operator,value}. CLOUD-RUNTIME-ONLY (#3905): MCP has no server-side activation step; a client lists every projected prompt and chooses.",
4545
"verifiedAt": "2026-08-06"
4646
},
4747
"active": {
4848
"status": "live",
49-
"evidence": "packages/services/service-ai/src/skill-registry.ts:93; packages/mcp/src/skill-prompts.ts (projectSkillPrompt)",
49+
"evidence": "cloud: packages/service-ai/src/skill-registry.ts:93; packages/mcp/src/skill-prompts.ts (projectSkillPrompt)",
5050
"note": "inactive skills dropped — by the cloud registry, and not projected as an MCP prompt either (#3905).",
5151
"verifiedAt": "2026-08-06"
5252
},

0 commit comments

Comments
 (0)