feat(intelligence): prepare exact profile activation - #572

Merged
drewstone merged 2 commits into
mainfrom
feat/profile-activation-apply
Jul 20, 2026
Merged

feat(intelligence): prepare exact profile activation#572
drewstone merged 2 commits into
mainfrom
feat/profile-activation-apply

Conversation

@drewstone

Copy link
Copy Markdown
Contributor

Problem

Products need to apply approved prompt, skill, tool, MCP, hook, and subagent changes to their own AgentProfile stores without copying profile diff semantics into every product.

Solution

Add one pure profile activation preparation function that compares exact measured digests, distinguishes missing/already-applied/conflicting state, and returns immutable serializable all-or-none replacements. Products retain ownership of locking, persistence, security policy, and durable activation receipts.

The package release is prepared as 0.101.0.

Proof

  • 1,574 executed tests passed across 495 files; 2 explicitly skipped; 0 failed
  • pnpm run typecheck
  • pnpm run lint
  • pnpm run build
  • pnpm run verify:package
  • pnpm run docs:freshness
  • Independent adversarial review findings addressed: non-empty outcome typing, canonical removals, immutable output, dead options, and packed-consumer coverage

tangletools
tangletools previously approved these changes Jul 20, 2026

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Auto-approved drewstone PR — 7679db6a

This PR was opened by the trusted drewstone account.
The full PR reviewer audit still runs separately and will publish findings if it detects issues.

tangletools · auto-approval · reason: drewstone_author · 2026-07-20T02:09:48Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Value Audit — sound-with-nits

Verdictsound-with-nits
Concerns2 (2 weak-concern)
Heuristic0.0s
Duplication0.0s
Interrogation204.6s (2 bridge agents)
Total204.6s

💰 Value — sound-with-nits

Adds a pure profile-activation prep function that classifies product-owned profiles against a measured transition and returns immutable all-or-none replacements — fills a real gap (knowledge has an executor, profiles didn't), reuses every existing primitive, ships.

  • What it does: Adds prepareAgentImprovementProfileActivation (src/intelligence/profile-activation.ts:65), a synchronous pure function that takes a product's current profiles (by identity) plus a non-empty list of measured activation targets for profile surfaces (prompt/skills/tools/mcp/hooks/subagents), and returns one of four classified outcomes: missing (identity not in the map), already-applied (current
  • Goals it achieves: Let products apply an approved measured profile change (prompt, skills, tools, mcp, hooks, subagents — the six profile-deliverable surfaces defined in AGENT_IMPROVEMENT_PROFILE_SURFACES) WITHOUT each product reimplementing digest comparison, multi-surface diff folding, or the missing/already-applied/conflict/apply classification. Runtime owns profile-diff semantics (it already owns the digest/diff
  • Assessment: Strong fit with the codebase's existing seam. Knowledge already has a sibling helper, createKnowledgeImprovementActivationExecutor (src/knowledge/activation.ts:38), which produces transition+reconcile callbacks because knowledge writes through Runtime into a durable store. Profiles are different — products own their profile stores — so the appropriate primitive is one step shallower: a pure prep
  • Better / existing approach: none — this is the right approach. Searched: grep for prepare, preparation, AgentImprovementActivationTargetPlan, desiredInput, expectedBaseDigest, the four status literals, and the two sibling constructors createAgentImprovementActivationResult / createKnowledgeImprovementActivationExecutor across src/ and tests/. No prior profile-activation preparation function exists; the only s
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 2
  • Bridge warning: opencode/kimi-for-coding/k2p7: bridge stream ended without value-audit content

🎯 Usefulness — sound

A pure preparation helper that fills the gap between Runtime's measured profile diffs and a product's owned activation write path; built in the grain of the existing improvement-cycle stack.

  • Integration: Exported from src/intelligence/index.ts:170; added to the packed-consumer compile check (scripts/verify-package-exports.mjs:158,218,322) which demonstrates the canonical product-side wiring (prepare → build AgentImprovementActivationOutcome). No internal caller yet — by design: docstring at src/intelligence/profile-activation.ts:60-64 says the caller owns locking/persistence/receipt. Products owni
  • Fit with existing patterns: Reuses the established primitives directly: agentImprovementTargetProfileDiffs, applyExactAgentProfileDiff (src/candidate-execution/profile.ts:214), agentImprovementProfileSurfaceDigest, immutableCandidateValue (src/candidate-execution/digest.ts:21). Same canonical-digest discipline, same omitUndefinedObjectFields/parseExactAgentProfile normalization, same 'product owns the write, Runtime owns the
  • Real-world viability: Covers the four real outcomes — missing / already-applied / conflict / apply — using exact digest comparisons (src/intelligence/profile-activation.ts:105-110). Post-apply digest verification per target (lines 132-142) catches any drift between desiredInput and desiredDigest. Immutable frozen output via immutableCandidateValue; serializable (verified in tests/profile-activation.test.ts:53). Duplica
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 1

💰 Value Audit

🟡 Non-empty tuple casts repeated inline[maintenance] ``

profile-activation.ts:103, 150, and 156 cast array literals to [T, ...T[]] via as. Unavoidable given TS's handling of dynamically-built arrays and the codebase-wide use of non-empty tuple types, but a one-line nonEmptyTuple helper (or reusing one if it already exists in candidate-execution/digest.ts) would localize the escape hatch. Polish, not a blocker.

🟡 Naming asymmetry vs knowledge executor is not signposted[maintenance] ``

Knowledge uses createKnowledgeImprovementActivationExecutor (returns transition+reconcile callbacks, src/knowledge/activation.ts:38); profiles now use prepareAgentImprovementProfileActivation (returns data). The asymmetry is correct — different ownership seam — but the JSDoc at profile-activation.ts:60 explains only what the function does, not why profiles get a different shape than knowledge. A one-sentence 'profiles are product-owned, so this returns replacements rather than a transition c


What this audit checks

It judges the change on its merits — not whether it was tasked out in an issue. Unticketed, fast-moving work is fine; the question is whether the change is good and whether a better or existing approach should be used instead.

PassWhat it asks
HeuristicVague title? Whitespace-only or cruft-bearing diff? (content signals only)
DuplicationDo added function/class names already exist elsewhere in the repo?
Value AuditWhat does it do? What goal does it achieve? Is it good? Better architecture or already-exists?
Usefulness AuditDoes it integrate and fit? Will it hold up in real use and actually get used?

Findings are concerns, not blocks — the human reviewer decides what to do with them.

value-audit · 20260720T021520Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Auto-approved drewstone PR — 1a28e464

This PR was opened by the trusted drewstone account.
The full PR reviewer audit still runs separately and will publish findings if it detects issues.

tangletools · auto-approval · reason: drewstone_author · 2026-07-20T02:27:41Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Value Audit — sound

Verdictsound
Concerns0 (none)
Heuristic0.0s
Duplication0.0s
Interrogation126.1s (2 bridge agents)
Total126.1s

💰 Value — sound

Adds a pure preparation primitive that turns approved measured profile transitions into immutable all-or-none replacements for product-owned profile stores; mirrors the existing knowledge-activation seam with the right ownership boundary.

  • What it does: Adds prepareAgentImprovementProfileActivation (src/intelligence/profile-activation.ts:67) — a pure function that takes current profiles by identity plus a list of (identity, surface, expectedBaseDigest, desiredDigest, desiredInput) targets, and returns one of four states: 'missing' (some identities absent), 'already-applied' (every current surface digest equals desiredDigest), 'conflict' (some cur
  • Goals it achieves: Let products apply approved prompt/skill/tool/mcp/hook/subagent changes to their OWN profile stores without each product reimplementing digest comparison, diff application, conflict detection, or canonical-removal semantics. Runtime owns profile-semantics; the product retains locking, persistence, security policy, and the durable activation receipt. This was inferred from the code, not the PR body
  • Assessment: Coherent and tightly in-grain. (1) Reuses existing primitives only: applyExactAgentProfileDiff, omitUndefinedObjectFields, parseExactAgentProfile, agentImprovementTargetProfileDiffs, agentImprovementProfileSurfaceDigest, immutableCandidateValue, and the AgentImprovementActivationTargetPlan/State/Transition types from src/intelligence/activation.ts:34-51. (2) Mirrors the sibling seam at src/knowled
  • Better / existing approach: none — this is the right approach. Searched src/ for 'profile.*activation', 'prepare.*Activation', and existing executors; the only sibling is src/knowledge/activation.ts:38, which uses Runtime-owned transition callbacks because knowledge lives in a Runtime-controlled adapter (@tangle-network/agent-knowledge). Forcing profile activation through the same callback shape would require Runtime to take
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 2
  • Bridge warning: opencode/kimi-for-coding/k2p7: bridge stream ended without value-audit content

🎯 Usefulness — sound

Pure profile-activation prep function — the product-owned-store analog of createKnowledgeImprovementActivationExecutor, built from existing diff primitives with no competing implementation.

  • Integration: Exported from src/intelligence/index.ts:170 and exercised by the package-exports compile smoke (scripts/verify-package-exports.mjs:218-241). Reachable from any product that owns an AgentProfile store and consumes executeAgentImprovementActivation's transition callback (src/intelligence/activation.ts:67-69). The first external caller doesn't exist in this repo, which is expected for a substrate pri
  • Fit with existing patterns: Fills a real gap. createKnowledgeImprovementActivationExecutor (src/knowledge/activation.ts:38) wires activation for Runtime-owned knowledge stores; until this PR there was no counterpart for product-owned profile stores, forcing every consumer to hand-roll diff assembly (visible in tests/improvement-cycle.test.ts:187-204). Uses established primitives throughout — agentImprovementTargetProfileDiff
  • Real-world viability: Pure, synchronous, no I/O or shared state — locking and persistence are explicitly the caller's job per the doc comment at src/intelligence/profile-activation.ts:60-66. Missing/already-applied/conflict/apply are all distinguished statuses matching what assertOutcomeDesiredState (src/intelligence/activation.ts:303-333) verifies. Self-check at src/intelligence/profile-activation.ts:134-144 throws if
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 1

No concerns — sound change, no better or existing approach found. ✅


What this audit checks

It judges the change on its merits — not whether it was tasked out in an issue. Unticketed, fast-moving work is fine; the question is whether the change is good and whether a better or existing approach should be used instead.

PassWhat it asks
HeuristicVague title? Whitespace-only or cruft-bearing diff? (content signals only)
DuplicationDo added function/class names already exist elsewhere in the repo?
Value AuditWhat does it do? What goal does it achieve? Is it good? Better architecture or already-exists?
Usefulness AuditDoes it integrate and fit? Will it hold up in real use and actually get used?

Findings are concerns, not blocks — the human reviewer decides what to do with them.

value-audit · 20260720T023020Z

@drewstone
drewstone merged commit 8488c44 into mainJul 20, 2026
2 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@drewstone@tangletools
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(intelligence): prepare exact profile activation - #572

Merged
drewstone merged 2 commits into
mainfrom
feat/profile-activation-apply
Jul 20, 2026
Merged

feat(intelligence): prepare exact profile activation#572
drewstone merged 2 commits into
mainfrom
feat/profile-activation-apply

Conversation

@drewstone

Copy link
Copy Markdown
Contributor

Problem

Products need to apply approved prompt, skill, tool, MCP, hook, and subagent changes to their own AgentProfile stores without copying profile diff semantics into every product.

Solution

Add one pure profile activation preparation function that compares exact measured digests, distinguishes missing/already-applied/conflicting state, and returns immutable serializable all-or-none replacements. Products retain ownership of locking, persistence, security policy, and durable activation receipts.

The package release is prepared as 0.101.0.

Proof

  • 1,574 executed tests passed across 495 files; 2 explicitly skipped; 0 failed
  • pnpm run typecheck
  • pnpm run lint
  • pnpm run build
  • pnpm run verify:package
  • pnpm run docs:freshness
  • Independent adversarial review findings addressed: non-empty outcome typing, canonical removals, immutable output, dead options, and packed-consumer coverage

tangletools
tangletools previously approved these changes Jul 20, 2026

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Auto-approved drewstone PR — 7679db6a

This PR was opened by the trusted drewstone account.
The full PR reviewer audit still runs separately and will publish findings if it detects issues.

tangletools · auto-approval · reason: drewstone_author · 2026-07-20T02:09:48Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Value Audit — sound-with-nits

Verdictsound-with-nits
Concerns2 (2 weak-concern)
Heuristic0.0s
Duplication0.0s
Interrogation204.6s (2 bridge agents)
Total204.6s

💰 Value — sound-with-nits

Adds a pure profile-activation prep function that classifies product-owned profiles against a measured transition and returns immutable all-or-none replacements — fills a real gap (knowledge has an executor, profiles didn't), reuses every existing primitive, ships.

  • What it does: Adds prepareAgentImprovementProfileActivation (src/intelligence/profile-activation.ts:65), a synchronous pure function that takes a product's current profiles (by identity) plus a non-empty list of measured activation targets for profile surfaces (prompt/skills/tools/mcp/hooks/subagents), and returns one of four classified outcomes: missing (identity not in the map), already-applied (current
  • Goals it achieves: Let products apply an approved measured profile change (prompt, skills, tools, mcp, hooks, subagents — the six profile-deliverable surfaces defined in AGENT_IMPROVEMENT_PROFILE_SURFACES) WITHOUT each product reimplementing digest comparison, multi-surface diff folding, or the missing/already-applied/conflict/apply classification. Runtime owns profile-diff semantics (it already owns the digest/diff
  • Assessment: Strong fit with the codebase's existing seam. Knowledge already has a sibling helper, createKnowledgeImprovementActivationExecutor (src/knowledge/activation.ts:38), which produces transition+reconcile callbacks because knowledge writes through Runtime into a durable store. Profiles are different — products own their profile stores — so the appropriate primitive is one step shallower: a pure prep
  • Better / existing approach: none — this is the right approach. Searched: grep for prepare, preparation, AgentImprovementActivationTargetPlan, desiredInput, expectedBaseDigest, the four status literals, and the two sibling constructors createAgentImprovementActivationResult / createKnowledgeImprovementActivationExecutor across src/ and tests/. No prior profile-activation preparation function exists; the only s
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 2
  • Bridge warning: opencode/kimi-for-coding/k2p7: bridge stream ended without value-audit content

🎯 Usefulness — sound

A pure preparation helper that fills the gap between Runtime's measured profile diffs and a product's owned activation write path; built in the grain of the existing improvement-cycle stack.

  • Integration: Exported from src/intelligence/index.ts:170; added to the packed-consumer compile check (scripts/verify-package-exports.mjs:158,218,322) which demonstrates the canonical product-side wiring (prepare → build AgentImprovementActivationOutcome). No internal caller yet — by design: docstring at src/intelligence/profile-activation.ts:60-64 says the caller owns locking/persistence/receipt. Products owni
  • Fit with existing patterns: Reuses the established primitives directly: agentImprovementTargetProfileDiffs, applyExactAgentProfileDiff (src/candidate-execution/profile.ts:214), agentImprovementProfileSurfaceDigest, immutableCandidateValue (src/candidate-execution/digest.ts:21). Same canonical-digest discipline, same omitUndefinedObjectFields/parseExactAgentProfile normalization, same 'product owns the write, Runtime owns the
  • Real-world viability: Covers the four real outcomes — missing / already-applied / conflict / apply — using exact digest comparisons (src/intelligence/profile-activation.ts:105-110). Post-apply digest verification per target (lines 132-142) catches any drift between desiredInput and desiredDigest. Immutable frozen output via immutableCandidateValue; serializable (verified in tests/profile-activation.test.ts:53). Duplica
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 1

💰 Value Audit

🟡 Non-empty tuple casts repeated inline[maintenance] ``

profile-activation.ts:103, 150, and 156 cast array literals to [T, ...T[]] via as. Unavoidable given TS's handling of dynamically-built arrays and the codebase-wide use of non-empty tuple types, but a one-line nonEmptyTuple helper (or reusing one if it already exists in candidate-execution/digest.ts) would localize the escape hatch. Polish, not a blocker.

🟡 Naming asymmetry vs knowledge executor is not signposted[maintenance] ``

Knowledge uses createKnowledgeImprovementActivationExecutor (returns transition+reconcile callbacks, src/knowledge/activation.ts:38); profiles now use prepareAgentImprovementProfileActivation (returns data). The asymmetry is correct — different ownership seam — but the JSDoc at profile-activation.ts:60 explains only what the function does, not why profiles get a different shape than knowledge. A one-sentence 'profiles are product-owned, so this returns replacements rather than a transition c


What this audit checks

It judges the change on its merits — not whether it was tasked out in an issue. Unticketed, fast-moving work is fine; the question is whether the change is good and whether a better or existing approach should be used instead.

PassWhat it asks
HeuristicVague title? Whitespace-only or cruft-bearing diff? (content signals only)
DuplicationDo added function/class names already exist elsewhere in the repo?
Value AuditWhat does it do? What goal does it achieve? Is it good? Better architecture or already-exists?
Usefulness AuditDoes it integrate and fit? Will it hold up in real use and actually get used?

Findings are concerns, not blocks — the human reviewer decides what to do with them.

value-audit · 20260720T021520Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Auto-approved drewstone PR — 1a28e464

This PR was opened by the trusted drewstone account.
The full PR reviewer audit still runs separately and will publish findings if it detects issues.

tangletools · auto-approval · reason: drewstone_author · 2026-07-20T02:27:41Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Value Audit — sound

Verdictsound
Concerns0 (none)
Heuristic0.0s
Duplication0.0s
Interrogation126.1s (2 bridge agents)
Total126.1s

💰 Value — sound

Adds a pure preparation primitive that turns approved measured profile transitions into immutable all-or-none replacements for product-owned profile stores; mirrors the existing knowledge-activation seam with the right ownership boundary.

  • What it does: Adds prepareAgentImprovementProfileActivation (src/intelligence/profile-activation.ts:67) — a pure function that takes current profiles by identity plus a list of (identity, surface, expectedBaseDigest, desiredDigest, desiredInput) targets, and returns one of four states: 'missing' (some identities absent), 'already-applied' (every current surface digest equals desiredDigest), 'conflict' (some cur
  • Goals it achieves: Let products apply approved prompt/skill/tool/mcp/hook/subagent changes to their OWN profile stores without each product reimplementing digest comparison, diff application, conflict detection, or canonical-removal semantics. Runtime owns profile-semantics; the product retains locking, persistence, security policy, and the durable activation receipt. This was inferred from the code, not the PR body
  • Assessment: Coherent and tightly in-grain. (1) Reuses existing primitives only: applyExactAgentProfileDiff, omitUndefinedObjectFields, parseExactAgentProfile, agentImprovementTargetProfileDiffs, agentImprovementProfileSurfaceDigest, immutableCandidateValue, and the AgentImprovementActivationTargetPlan/State/Transition types from src/intelligence/activation.ts:34-51. (2) Mirrors the sibling seam at src/knowled
  • Better / existing approach: none — this is the right approach. Searched src/ for 'profile.*activation', 'prepare.*Activation', and existing executors; the only sibling is src/knowledge/activation.ts:38, which uses Runtime-owned transition callbacks because knowledge lives in a Runtime-controlled adapter (@tangle-network/agent-knowledge). Forcing profile activation through the same callback shape would require Runtime to take
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 2
  • Bridge warning: opencode/kimi-for-coding/k2p7: bridge stream ended without value-audit content

🎯 Usefulness — sound

Pure profile-activation prep function — the product-owned-store analog of createKnowledgeImprovementActivationExecutor, built from existing diff primitives with no competing implementation.

  • Integration: Exported from src/intelligence/index.ts:170 and exercised by the package-exports compile smoke (scripts/verify-package-exports.mjs:218-241). Reachable from any product that owns an AgentProfile store and consumes executeAgentImprovementActivation's transition callback (src/intelligence/activation.ts:67-69). The first external caller doesn't exist in this repo, which is expected for a substrate pri
  • Fit with existing patterns: Fills a real gap. createKnowledgeImprovementActivationExecutor (src/knowledge/activation.ts:38) wires activation for Runtime-owned knowledge stores; until this PR there was no counterpart for product-owned profile stores, forcing every consumer to hand-roll diff assembly (visible in tests/improvement-cycle.test.ts:187-204). Uses established primitives throughout — agentImprovementTargetProfileDiff
  • Real-world viability: Pure, synchronous, no I/O or shared state — locking and persistence are explicitly the caller's job per the doc comment at src/intelligence/profile-activation.ts:60-66. Missing/already-applied/conflict/apply are all distinguished statuses matching what assertOutcomeDesiredState (src/intelligence/activation.ts:303-333) verifies. Self-check at src/intelligence/profile-activation.ts:134-144 throws if
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 1

No concerns — sound change, no better or existing approach found. ✅


What this audit checks

It judges the change on its merits — not whether it was tasked out in an issue. Unticketed, fast-moving work is fine; the question is whether the change is good and whether a better or existing approach should be used instead.

PassWhat it asks
HeuristicVague title? Whitespace-only or cruft-bearing diff? (content signals only)
DuplicationDo added function/class names already exist elsewhere in the repo?
Value AuditWhat does it do? What goal does it achieve? Is it good? Better architecture or already-exists?
Usefulness AuditDoes it integrate and fit? Will it hold up in real use and actually get used?

Findings are concerns, not blocks — the human reviewer decides what to do with them.

value-audit · 20260720T023020Z

@drewstone
drewstone merged commit 8488c44 into mainJul 20, 2026
2 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@drewstone@tangletools
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(intelligence): prepare exact profile activation - #572

Merged
drewstone merged 2 commits into
mainfrom
feat/profile-activation-apply
Jul 20, 2026
Merged

feat(intelligence): prepare exact profile activation#572
drewstone merged 2 commits into
mainfrom
feat/profile-activation-apply

Conversation

@drewstone

Copy link
Copy Markdown
Contributor

Problem

Products need to apply approved prompt, skill, tool, MCP, hook, and subagent changes to their own AgentProfile stores without copying profile diff semantics into every product.

Solution

Add one pure profile activation preparation function that compares exact measured digests, distinguishes missing/already-applied/conflicting state, and returns immutable serializable all-or-none replacements. Products retain ownership of locking, persistence, security policy, and durable activation receipts.

The package release is prepared as 0.101.0.

Proof

  • 1,574 executed tests passed across 495 files; 2 explicitly skipped; 0 failed
  • pnpm run typecheck
  • pnpm run lint
  • pnpm run build
  • pnpm run verify:package
  • pnpm run docs:freshness
  • Independent adversarial review findings addressed: non-empty outcome typing, canonical removals, immutable output, dead options, and packed-consumer coverage

tangletools
tangletools previously approved these changes Jul 20, 2026

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Auto-approved drewstone PR — 7679db6a

This PR was opened by the trusted drewstone account.
The full PR reviewer audit still runs separately and will publish findings if it detects issues.

tangletools · auto-approval · reason: drewstone_author · 2026-07-20T02:09:48Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Value Audit — sound-with-nits

Verdictsound-with-nits
Concerns2 (2 weak-concern)
Heuristic0.0s
Duplication0.0s
Interrogation204.6s (2 bridge agents)
Total204.6s

💰 Value — sound-with-nits

Adds a pure profile-activation prep function that classifies product-owned profiles against a measured transition and returns immutable all-or-none replacements — fills a real gap (knowledge has an executor, profiles didn't), reuses every existing primitive, ships.

  • What it does: Adds prepareAgentImprovementProfileActivation (src/intelligence/profile-activation.ts:65), a synchronous pure function that takes a product's current profiles (by identity) plus a non-empty list of measured activation targets for profile surfaces (prompt/skills/tools/mcp/hooks/subagents), and returns one of four classified outcomes: missing (identity not in the map), already-applied (current
  • Goals it achieves: Let products apply an approved measured profile change (prompt, skills, tools, mcp, hooks, subagents — the six profile-deliverable surfaces defined in AGENT_IMPROVEMENT_PROFILE_SURFACES) WITHOUT each product reimplementing digest comparison, multi-surface diff folding, or the missing/already-applied/conflict/apply classification. Runtime owns profile-diff semantics (it already owns the digest/diff
  • Assessment: Strong fit with the codebase's existing seam. Knowledge already has a sibling helper, createKnowledgeImprovementActivationExecutor (src/knowledge/activation.ts:38), which produces transition+reconcile callbacks because knowledge writes through Runtime into a durable store. Profiles are different — products own their profile stores — so the appropriate primitive is one step shallower: a pure prep
  • Better / existing approach: none — this is the right approach. Searched: grep for prepare, preparation, AgentImprovementActivationTargetPlan, desiredInput, expectedBaseDigest, the four status literals, and the two sibling constructors createAgentImprovementActivationResult / createKnowledgeImprovementActivationExecutor across src/ and tests/. No prior profile-activation preparation function exists; the only s
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 2
  • Bridge warning: opencode/kimi-for-coding/k2p7: bridge stream ended without value-audit content

🎯 Usefulness — sound

A pure preparation helper that fills the gap between Runtime's measured profile diffs and a product's owned activation write path; built in the grain of the existing improvement-cycle stack.

  • Integration: Exported from src/intelligence/index.ts:170; added to the packed-consumer compile check (scripts/verify-package-exports.mjs:158,218,322) which demonstrates the canonical product-side wiring (prepare → build AgentImprovementActivationOutcome). No internal caller yet — by design: docstring at src/intelligence/profile-activation.ts:60-64 says the caller owns locking/persistence/receipt. Products owni
  • Fit with existing patterns: Reuses the established primitives directly: agentImprovementTargetProfileDiffs, applyExactAgentProfileDiff (src/candidate-execution/profile.ts:214), agentImprovementProfileSurfaceDigest, immutableCandidateValue (src/candidate-execution/digest.ts:21). Same canonical-digest discipline, same omitUndefinedObjectFields/parseExactAgentProfile normalization, same 'product owns the write, Runtime owns the
  • Real-world viability: Covers the four real outcomes — missing / already-applied / conflict / apply — using exact digest comparisons (src/intelligence/profile-activation.ts:105-110). Post-apply digest verification per target (lines 132-142) catches any drift between desiredInput and desiredDigest. Immutable frozen output via immutableCandidateValue; serializable (verified in tests/profile-activation.test.ts:53). Duplica
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 1

💰 Value Audit

🟡 Non-empty tuple casts repeated inline[maintenance] ``

profile-activation.ts:103, 150, and 156 cast array literals to [T, ...T[]] via as. Unavoidable given TS's handling of dynamically-built arrays and the codebase-wide use of non-empty tuple types, but a one-line nonEmptyTuple helper (or reusing one if it already exists in candidate-execution/digest.ts) would localize the escape hatch. Polish, not a blocker.

🟡 Naming asymmetry vs knowledge executor is not signposted[maintenance] ``

Knowledge uses createKnowledgeImprovementActivationExecutor (returns transition+reconcile callbacks, src/knowledge/activation.ts:38); profiles now use prepareAgentImprovementProfileActivation (returns data). The asymmetry is correct — different ownership seam — but the JSDoc at profile-activation.ts:60 explains only what the function does, not why profiles get a different shape than knowledge. A one-sentence 'profiles are product-owned, so this returns replacements rather than a transition c


What this audit checks

It judges the change on its merits — not whether it was tasked out in an issue. Unticketed, fast-moving work is fine; the question is whether the change is good and whether a better or existing approach should be used instead.

PassWhat it asks
HeuristicVague title? Whitespace-only or cruft-bearing diff? (content signals only)
DuplicationDo added function/class names already exist elsewhere in the repo?
Value AuditWhat does it do? What goal does it achieve? Is it good? Better architecture or already-exists?
Usefulness AuditDoes it integrate and fit? Will it hold up in real use and actually get used?

Findings are concerns, not blocks — the human reviewer decides what to do with them.

value-audit · 20260720T021520Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Auto-approved drewstone PR — 1a28e464

This PR was opened by the trusted drewstone account.
The full PR reviewer audit still runs separately and will publish findings if it detects issues.

tangletools · auto-approval · reason: drewstone_author · 2026-07-20T02:27:41Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Value Audit — sound

Verdictsound
Concerns0 (none)
Heuristic0.0s
Duplication0.0s
Interrogation126.1s (2 bridge agents)
Total126.1s

💰 Value — sound

Adds a pure preparation primitive that turns approved measured profile transitions into immutable all-or-none replacements for product-owned profile stores; mirrors the existing knowledge-activation seam with the right ownership boundary.

  • What it does: Adds prepareAgentImprovementProfileActivation (src/intelligence/profile-activation.ts:67) — a pure function that takes current profiles by identity plus a list of (identity, surface, expectedBaseDigest, desiredDigest, desiredInput) targets, and returns one of four states: 'missing' (some identities absent), 'already-applied' (every current surface digest equals desiredDigest), 'conflict' (some cur
  • Goals it achieves: Let products apply approved prompt/skill/tool/mcp/hook/subagent changes to their OWN profile stores without each product reimplementing digest comparison, diff application, conflict detection, or canonical-removal semantics. Runtime owns profile-semantics; the product retains locking, persistence, security policy, and the durable activation receipt. This was inferred from the code, not the PR body
  • Assessment: Coherent and tightly in-grain. (1) Reuses existing primitives only: applyExactAgentProfileDiff, omitUndefinedObjectFields, parseExactAgentProfile, agentImprovementTargetProfileDiffs, agentImprovementProfileSurfaceDigest, immutableCandidateValue, and the AgentImprovementActivationTargetPlan/State/Transition types from src/intelligence/activation.ts:34-51. (2) Mirrors the sibling seam at src/knowled
  • Better / existing approach: none — this is the right approach. Searched src/ for 'profile.*activation', 'prepare.*Activation', and existing executors; the only sibling is src/knowledge/activation.ts:38, which uses Runtime-owned transition callbacks because knowledge lives in a Runtime-controlled adapter (@tangle-network/agent-knowledge). Forcing profile activation through the same callback shape would require Runtime to take
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 2
  • Bridge warning: opencode/kimi-for-coding/k2p7: bridge stream ended without value-audit content

🎯 Usefulness — sound

Pure profile-activation prep function — the product-owned-store analog of createKnowledgeImprovementActivationExecutor, built from existing diff primitives with no competing implementation.

  • Integration: Exported from src/intelligence/index.ts:170 and exercised by the package-exports compile smoke (scripts/verify-package-exports.mjs:218-241). Reachable from any product that owns an AgentProfile store and consumes executeAgentImprovementActivation's transition callback (src/intelligence/activation.ts:67-69). The first external caller doesn't exist in this repo, which is expected for a substrate pri
  • Fit with existing patterns: Fills a real gap. createKnowledgeImprovementActivationExecutor (src/knowledge/activation.ts:38) wires activation for Runtime-owned knowledge stores; until this PR there was no counterpart for product-owned profile stores, forcing every consumer to hand-roll diff assembly (visible in tests/improvement-cycle.test.ts:187-204). Uses established primitives throughout — agentImprovementTargetProfileDiff
  • Real-world viability: Pure, synchronous, no I/O or shared state — locking and persistence are explicitly the caller's job per the doc comment at src/intelligence/profile-activation.ts:60-66. Missing/already-applied/conflict/apply are all distinguished statuses matching what assertOutcomeDesiredState (src/intelligence/activation.ts:303-333) verifies. Self-check at src/intelligence/profile-activation.ts:134-144 throws if
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 1

No concerns — sound change, no better or existing approach found. ✅


What this audit checks

It judges the change on its merits — not whether it was tasked out in an issue. Unticketed, fast-moving work is fine; the question is whether the change is good and whether a better or existing approach should be used instead.

PassWhat it asks
HeuristicVague title? Whitespace-only or cruft-bearing diff? (content signals only)
DuplicationDo added function/class names already exist elsewhere in the repo?
Value AuditWhat does it do? What goal does it achieve? Is it good? Better architecture or already-exists?
Usefulness AuditDoes it integrate and fit? Will it hold up in real use and actually get used?

Findings are concerns, not blocks — the human reviewer decides what to do with them.

value-audit · 20260720T023020Z

@drewstone
drewstone merged commit 8488c44 into mainJul 20, 2026
2 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@drewstone@tangletools
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(intelligence): prepare exact profile activation - #572

Merged
drewstone merged 2 commits into
mainfrom
feat/profile-activation-apply
Jul 20, 2026
Merged

feat(intelligence): prepare exact profile activation#572
drewstone merged 2 commits into
mainfrom
feat/profile-activation-apply

Conversation

@drewstone

Copy link
Copy Markdown
Contributor

Problem

Products need to apply approved prompt, skill, tool, MCP, hook, and subagent changes to their own AgentProfile stores without copying profile diff semantics into every product.

Solution

Add one pure profile activation preparation function that compares exact measured digests, distinguishes missing/already-applied/conflicting state, and returns immutable serializable all-or-none replacements. Products retain ownership of locking, persistence, security policy, and durable activation receipts.

The package release is prepared as 0.101.0.

Proof

  • 1,574 executed tests passed across 495 files; 2 explicitly skipped; 0 failed
  • pnpm run typecheck
  • pnpm run lint
  • pnpm run build
  • pnpm run verify:package
  • pnpm run docs:freshness
  • Independent adversarial review findings addressed: non-empty outcome typing, canonical removals, immutable output, dead options, and packed-consumer coverage

tangletools
tangletools previously approved these changes Jul 20, 2026

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Auto-approved drewstone PR — 7679db6a

This PR was opened by the trusted drewstone account.
The full PR reviewer audit still runs separately and will publish findings if it detects issues.

tangletools · auto-approval · reason: drewstone_author · 2026-07-20T02:09:48Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Value Audit — sound-with-nits

Verdictsound-with-nits
Concerns2 (2 weak-concern)
Heuristic0.0s
Duplication0.0s
Interrogation204.6s (2 bridge agents)
Total204.6s

💰 Value — sound-with-nits

Adds a pure profile-activation prep function that classifies product-owned profiles against a measured transition and returns immutable all-or-none replacements — fills a real gap (knowledge has an executor, profiles didn't), reuses every existing primitive, ships.

  • What it does: Adds prepareAgentImprovementProfileActivation (src/intelligence/profile-activation.ts:65), a synchronous pure function that takes a product's current profiles (by identity) plus a non-empty list of measured activation targets for profile surfaces (prompt/skills/tools/mcp/hooks/subagents), and returns one of four classified outcomes: missing (identity not in the map), already-applied (current
  • Goals it achieves: Let products apply an approved measured profile change (prompt, skills, tools, mcp, hooks, subagents — the six profile-deliverable surfaces defined in AGENT_IMPROVEMENT_PROFILE_SURFACES) WITHOUT each product reimplementing digest comparison, multi-surface diff folding, or the missing/already-applied/conflict/apply classification. Runtime owns profile-diff semantics (it already owns the digest/diff
  • Assessment: Strong fit with the codebase's existing seam. Knowledge already has a sibling helper, createKnowledgeImprovementActivationExecutor (src/knowledge/activation.ts:38), which produces transition+reconcile callbacks because knowledge writes through Runtime into a durable store. Profiles are different — products own their profile stores — so the appropriate primitive is one step shallower: a pure prep
  • Better / existing approach: none — this is the right approach. Searched: grep for prepare, preparation, AgentImprovementActivationTargetPlan, desiredInput, expectedBaseDigest, the four status literals, and the two sibling constructors createAgentImprovementActivationResult / createKnowledgeImprovementActivationExecutor across src/ and tests/. No prior profile-activation preparation function exists; the only s
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 2
  • Bridge warning: opencode/kimi-for-coding/k2p7: bridge stream ended without value-audit content

🎯 Usefulness — sound

A pure preparation helper that fills the gap between Runtime's measured profile diffs and a product's owned activation write path; built in the grain of the existing improvement-cycle stack.

  • Integration: Exported from src/intelligence/index.ts:170; added to the packed-consumer compile check (scripts/verify-package-exports.mjs:158,218,322) which demonstrates the canonical product-side wiring (prepare → build AgentImprovementActivationOutcome). No internal caller yet — by design: docstring at src/intelligence/profile-activation.ts:60-64 says the caller owns locking/persistence/receipt. Products owni
  • Fit with existing patterns: Reuses the established primitives directly: agentImprovementTargetProfileDiffs, applyExactAgentProfileDiff (src/candidate-execution/profile.ts:214), agentImprovementProfileSurfaceDigest, immutableCandidateValue (src/candidate-execution/digest.ts:21). Same canonical-digest discipline, same omitUndefinedObjectFields/parseExactAgentProfile normalization, same 'product owns the write, Runtime owns the
  • Real-world viability: Covers the four real outcomes — missing / already-applied / conflict / apply — using exact digest comparisons (src/intelligence/profile-activation.ts:105-110). Post-apply digest verification per target (lines 132-142) catches any drift between desiredInput and desiredDigest. Immutable frozen output via immutableCandidateValue; serializable (verified in tests/profile-activation.test.ts:53). Duplica
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 1

💰 Value Audit

🟡 Non-empty tuple casts repeated inline[maintenance] ``

profile-activation.ts:103, 150, and 156 cast array literals to [T, ...T[]] via as. Unavoidable given TS's handling of dynamically-built arrays and the codebase-wide use of non-empty tuple types, but a one-line nonEmptyTuple helper (or reusing one if it already exists in candidate-execution/digest.ts) would localize the escape hatch. Polish, not a blocker.

🟡 Naming asymmetry vs knowledge executor is not signposted[maintenance] ``

Knowledge uses createKnowledgeImprovementActivationExecutor (returns transition+reconcile callbacks, src/knowledge/activation.ts:38); profiles now use prepareAgentImprovementProfileActivation (returns data). The asymmetry is correct — different ownership seam — but the JSDoc at profile-activation.ts:60 explains only what the function does, not why profiles get a different shape than knowledge. A one-sentence 'profiles are product-owned, so this returns replacements rather than a transition c


What this audit checks

It judges the change on its merits — not whether it was tasked out in an issue. Unticketed, fast-moving work is fine; the question is whether the change is good and whether a better or existing approach should be used instead.

PassWhat it asks
HeuristicVague title? Whitespace-only or cruft-bearing diff? (content signals only)
DuplicationDo added function/class names already exist elsewhere in the repo?
Value AuditWhat does it do? What goal does it achieve? Is it good? Better architecture or already-exists?
Usefulness AuditDoes it integrate and fit? Will it hold up in real use and actually get used?

Findings are concerns, not blocks — the human reviewer decides what to do with them.

value-audit · 20260720T021520Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Auto-approved drewstone PR — 1a28e464

This PR was opened by the trusted drewstone account.
The full PR reviewer audit still runs separately and will publish findings if it detects issues.

tangletools · auto-approval · reason: drewstone_author · 2026-07-20T02:27:41Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Value Audit — sound

Verdictsound
Concerns0 (none)
Heuristic0.0s
Duplication0.0s
Interrogation126.1s (2 bridge agents)
Total126.1s

💰 Value — sound

Adds a pure preparation primitive that turns approved measured profile transitions into immutable all-or-none replacements for product-owned profile stores; mirrors the existing knowledge-activation seam with the right ownership boundary.

  • What it does: Adds prepareAgentImprovementProfileActivation (src/intelligence/profile-activation.ts:67) — a pure function that takes current profiles by identity plus a list of (identity, surface, expectedBaseDigest, desiredDigest, desiredInput) targets, and returns one of four states: 'missing' (some identities absent), 'already-applied' (every current surface digest equals desiredDigest), 'conflict' (some cur
  • Goals it achieves: Let products apply approved prompt/skill/tool/mcp/hook/subagent changes to their OWN profile stores without each product reimplementing digest comparison, diff application, conflict detection, or canonical-removal semantics. Runtime owns profile-semantics; the product retains locking, persistence, security policy, and the durable activation receipt. This was inferred from the code, not the PR body
  • Assessment: Coherent and tightly in-grain. (1) Reuses existing primitives only: applyExactAgentProfileDiff, omitUndefinedObjectFields, parseExactAgentProfile, agentImprovementTargetProfileDiffs, agentImprovementProfileSurfaceDigest, immutableCandidateValue, and the AgentImprovementActivationTargetPlan/State/Transition types from src/intelligence/activation.ts:34-51. (2) Mirrors the sibling seam at src/knowled
  • Better / existing approach: none — this is the right approach. Searched src/ for 'profile.*activation', 'prepare.*Activation', and existing executors; the only sibling is src/knowledge/activation.ts:38, which uses Runtime-owned transition callbacks because knowledge lives in a Runtime-controlled adapter (@tangle-network/agent-knowledge). Forcing profile activation through the same callback shape would require Runtime to take
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 2
  • Bridge warning: opencode/kimi-for-coding/k2p7: bridge stream ended without value-audit content

🎯 Usefulness — sound

Pure profile-activation prep function — the product-owned-store analog of createKnowledgeImprovementActivationExecutor, built from existing diff primitives with no competing implementation.

  • Integration: Exported from src/intelligence/index.ts:170 and exercised by the package-exports compile smoke (scripts/verify-package-exports.mjs:218-241). Reachable from any product that owns an AgentProfile store and consumes executeAgentImprovementActivation's transition callback (src/intelligence/activation.ts:67-69). The first external caller doesn't exist in this repo, which is expected for a substrate pri
  • Fit with existing patterns: Fills a real gap. createKnowledgeImprovementActivationExecutor (src/knowledge/activation.ts:38) wires activation for Runtime-owned knowledge stores; until this PR there was no counterpart for product-owned profile stores, forcing every consumer to hand-roll diff assembly (visible in tests/improvement-cycle.test.ts:187-204). Uses established primitives throughout — agentImprovementTargetProfileDiff
  • Real-world viability: Pure, synchronous, no I/O or shared state — locking and persistence are explicitly the caller's job per the doc comment at src/intelligence/profile-activation.ts:60-66. Missing/already-applied/conflict/apply are all distinguished statuses matching what assertOutcomeDesiredState (src/intelligence/activation.ts:303-333) verifies. Self-check at src/intelligence/profile-activation.ts:134-144 throws if
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 1

No concerns — sound change, no better or existing approach found. ✅


What this audit checks

It judges the change on its merits — not whether it was tasked out in an issue. Unticketed, fast-moving work is fine; the question is whether the change is good and whether a better or existing approach should be used instead.

PassWhat it asks
HeuristicVague title? Whitespace-only or cruft-bearing diff? (content signals only)
DuplicationDo added function/class names already exist elsewhere in the repo?
Value AuditWhat does it do? What goal does it achieve? Is it good? Better architecture or already-exists?
Usefulness AuditDoes it integrate and fit? Will it hold up in real use and actually get used?

Findings are concerns, not blocks — the human reviewer decides what to do with them.

value-audit · 20260720T023020Z

@drewstone
drewstone merged commit 8488c44 into mainJul 20, 2026
2 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@drewstone@tangletools
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(intelligence): prepare exact profile activation - #572

Merged
drewstone merged 2 commits into
mainfrom
feat/profile-activation-apply
Jul 20, 2026
Merged

feat(intelligence): prepare exact profile activation#572
drewstone merged 2 commits into
mainfrom
feat/profile-activation-apply

Conversation

@drewstone

Copy link
Copy Markdown
Contributor

Problem

Products need to apply approved prompt, skill, tool, MCP, hook, and subagent changes to their own AgentProfile stores without copying profile diff semantics into every product.

Solution

Add one pure profile activation preparation function that compares exact measured digests, distinguishes missing/already-applied/conflicting state, and returns immutable serializable all-or-none replacements. Products retain ownership of locking, persistence, security policy, and durable activation receipts.

The package release is prepared as 0.101.0.

Proof

  • 1,574 executed tests passed across 495 files; 2 explicitly skipped; 0 failed
  • pnpm run typecheck
  • pnpm run lint
  • pnpm run build
  • pnpm run verify:package
  • pnpm run docs:freshness
  • Independent adversarial review findings addressed: non-empty outcome typing, canonical removals, immutable output, dead options, and packed-consumer coverage

tangletools
tangletools previously approved these changes Jul 20, 2026

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Auto-approved drewstone PR — 7679db6a

This PR was opened by the trusted drewstone account.
The full PR reviewer audit still runs separately and will publish findings if it detects issues.

tangletools · auto-approval · reason: drewstone_author · 2026-07-20T02:09:48Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Value Audit — sound-with-nits

Verdictsound-with-nits
Concerns2 (2 weak-concern)
Heuristic0.0s
Duplication0.0s
Interrogation204.6s (2 bridge agents)
Total204.6s

💰 Value — sound-with-nits

Adds a pure profile-activation prep function that classifies product-owned profiles against a measured transition and returns immutable all-or-none replacements — fills a real gap (knowledge has an executor, profiles didn't), reuses every existing primitive, ships.

  • What it does: Adds prepareAgentImprovementProfileActivation (src/intelligence/profile-activation.ts:65), a synchronous pure function that takes a product's current profiles (by identity) plus a non-empty list of measured activation targets for profile surfaces (prompt/skills/tools/mcp/hooks/subagents), and returns one of four classified outcomes: missing (identity not in the map), already-applied (current
  • Goals it achieves: Let products apply an approved measured profile change (prompt, skills, tools, mcp, hooks, subagents — the six profile-deliverable surfaces defined in AGENT_IMPROVEMENT_PROFILE_SURFACES) WITHOUT each product reimplementing digest comparison, multi-surface diff folding, or the missing/already-applied/conflict/apply classification. Runtime owns profile-diff semantics (it already owns the digest/diff
  • Assessment: Strong fit with the codebase's existing seam. Knowledge already has a sibling helper, createKnowledgeImprovementActivationExecutor (src/knowledge/activation.ts:38), which produces transition+reconcile callbacks because knowledge writes through Runtime into a durable store. Profiles are different — products own their profile stores — so the appropriate primitive is one step shallower: a pure prep
  • Better / existing approach: none — this is the right approach. Searched: grep for prepare, preparation, AgentImprovementActivationTargetPlan, desiredInput, expectedBaseDigest, the four status literals, and the two sibling constructors createAgentImprovementActivationResult / createKnowledgeImprovementActivationExecutor across src/ and tests/. No prior profile-activation preparation function exists; the only s
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 2
  • Bridge warning: opencode/kimi-for-coding/k2p7: bridge stream ended without value-audit content

🎯 Usefulness — sound

A pure preparation helper that fills the gap between Runtime's measured profile diffs and a product's owned activation write path; built in the grain of the existing improvement-cycle stack.

  • Integration: Exported from src/intelligence/index.ts:170; added to the packed-consumer compile check (scripts/verify-package-exports.mjs:158,218,322) which demonstrates the canonical product-side wiring (prepare → build AgentImprovementActivationOutcome). No internal caller yet — by design: docstring at src/intelligence/profile-activation.ts:60-64 says the caller owns locking/persistence/receipt. Products owni
  • Fit with existing patterns: Reuses the established primitives directly: agentImprovementTargetProfileDiffs, applyExactAgentProfileDiff (src/candidate-execution/profile.ts:214), agentImprovementProfileSurfaceDigest, immutableCandidateValue (src/candidate-execution/digest.ts:21). Same canonical-digest discipline, same omitUndefinedObjectFields/parseExactAgentProfile normalization, same 'product owns the write, Runtime owns the
  • Real-world viability: Covers the four real outcomes — missing / already-applied / conflict / apply — using exact digest comparisons (src/intelligence/profile-activation.ts:105-110). Post-apply digest verification per target (lines 132-142) catches any drift between desiredInput and desiredDigest. Immutable frozen output via immutableCandidateValue; serializable (verified in tests/profile-activation.test.ts:53). Duplica
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 1

💰 Value Audit

🟡 Non-empty tuple casts repeated inline[maintenance] ``

profile-activation.ts:103, 150, and 156 cast array literals to [T, ...T[]] via as. Unavoidable given TS's handling of dynamically-built arrays and the codebase-wide use of non-empty tuple types, but a one-line nonEmptyTuple helper (or reusing one if it already exists in candidate-execution/digest.ts) would localize the escape hatch. Polish, not a blocker.

🟡 Naming asymmetry vs knowledge executor is not signposted[maintenance] ``

Knowledge uses createKnowledgeImprovementActivationExecutor (returns transition+reconcile callbacks, src/knowledge/activation.ts:38); profiles now use prepareAgentImprovementProfileActivation (returns data). The asymmetry is correct — different ownership seam — but the JSDoc at profile-activation.ts:60 explains only what the function does, not why profiles get a different shape than knowledge. A one-sentence 'profiles are product-owned, so this returns replacements rather than a transition c


What this audit checks

It judges the change on its merits — not whether it was tasked out in an issue. Unticketed, fast-moving work is fine; the question is whether the change is good and whether a better or existing approach should be used instead.

PassWhat it asks
HeuristicVague title? Whitespace-only or cruft-bearing diff? (content signals only)
DuplicationDo added function/class names already exist elsewhere in the repo?
Value AuditWhat does it do? What goal does it achieve? Is it good? Better architecture or already-exists?
Usefulness AuditDoes it integrate and fit? Will it hold up in real use and actually get used?

Findings are concerns, not blocks — the human reviewer decides what to do with them.

value-audit · 20260720T021520Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Auto-approved drewstone PR — 1a28e464

This PR was opened by the trusted drewstone account.
The full PR reviewer audit still runs separately and will publish findings if it detects issues.

tangletools · auto-approval · reason: drewstone_author · 2026-07-20T02:27:41Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Value Audit — sound

Verdictsound
Concerns0 (none)
Heuristic0.0s
Duplication0.0s
Interrogation126.1s (2 bridge agents)
Total126.1s

💰 Value — sound

Adds a pure preparation primitive that turns approved measured profile transitions into immutable all-or-none replacements for product-owned profile stores; mirrors the existing knowledge-activation seam with the right ownership boundary.

  • What it does: Adds prepareAgentImprovementProfileActivation (src/intelligence/profile-activation.ts:67) — a pure function that takes current profiles by identity plus a list of (identity, surface, expectedBaseDigest, desiredDigest, desiredInput) targets, and returns one of four states: 'missing' (some identities absent), 'already-applied' (every current surface digest equals desiredDigest), 'conflict' (some cur
  • Goals it achieves: Let products apply approved prompt/skill/tool/mcp/hook/subagent changes to their OWN profile stores without each product reimplementing digest comparison, diff application, conflict detection, or canonical-removal semantics. Runtime owns profile-semantics; the product retains locking, persistence, security policy, and the durable activation receipt. This was inferred from the code, not the PR body
  • Assessment: Coherent and tightly in-grain. (1) Reuses existing primitives only: applyExactAgentProfileDiff, omitUndefinedObjectFields, parseExactAgentProfile, agentImprovementTargetProfileDiffs, agentImprovementProfileSurfaceDigest, immutableCandidateValue, and the AgentImprovementActivationTargetPlan/State/Transition types from src/intelligence/activation.ts:34-51. (2) Mirrors the sibling seam at src/knowled
  • Better / existing approach: none — this is the right approach. Searched src/ for 'profile.*activation', 'prepare.*Activation', and existing executors; the only sibling is src/knowledge/activation.ts:38, which uses Runtime-owned transition callbacks because knowledge lives in a Runtime-controlled adapter (@tangle-network/agent-knowledge). Forcing profile activation through the same callback shape would require Runtime to take
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 2
  • Bridge warning: opencode/kimi-for-coding/k2p7: bridge stream ended without value-audit content

🎯 Usefulness — sound

Pure profile-activation prep function — the product-owned-store analog of createKnowledgeImprovementActivationExecutor, built from existing diff primitives with no competing implementation.

  • Integration: Exported from src/intelligence/index.ts:170 and exercised by the package-exports compile smoke (scripts/verify-package-exports.mjs:218-241). Reachable from any product that owns an AgentProfile store and consumes executeAgentImprovementActivation's transition callback (src/intelligence/activation.ts:67-69). The first external caller doesn't exist in this repo, which is expected for a substrate pri
  • Fit with existing patterns: Fills a real gap. createKnowledgeImprovementActivationExecutor (src/knowledge/activation.ts:38) wires activation for Runtime-owned knowledge stores; until this PR there was no counterpart for product-owned profile stores, forcing every consumer to hand-roll diff assembly (visible in tests/improvement-cycle.test.ts:187-204). Uses established primitives throughout — agentImprovementTargetProfileDiff
  • Real-world viability: Pure, synchronous, no I/O or shared state — locking and persistence are explicitly the caller's job per the doc comment at src/intelligence/profile-activation.ts:60-66. Missing/already-applied/conflict/apply are all distinguished statuses matching what assertOutcomeDesiredState (src/intelligence/activation.ts:303-333) verifies. Self-check at src/intelligence/profile-activation.ts:134-144 throws if
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 1

No concerns — sound change, no better or existing approach found. ✅


What this audit checks

It judges the change on its merits — not whether it was tasked out in an issue. Unticketed, fast-moving work is fine; the question is whether the change is good and whether a better or existing approach should be used instead.

PassWhat it asks
HeuristicVague title? Whitespace-only or cruft-bearing diff? (content signals only)
DuplicationDo added function/class names already exist elsewhere in the repo?
Value AuditWhat does it do? What goal does it achieve? Is it good? Better architecture or already-exists?
Usefulness AuditDoes it integrate and fit? Will it hold up in real use and actually get used?

Findings are concerns, not blocks — the human reviewer decides what to do with them.

value-audit · 20260720T023020Z

@drewstone
drewstone merged commit 8488c44 into mainJul 20, 2026
2 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@drewstone@tangletools
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(intelligence): prepare exact profile activation - #572

Merged
drewstone merged 2 commits into
mainfrom
feat/profile-activation-apply
Jul 20, 2026
Merged

feat(intelligence): prepare exact profile activation#572
drewstone merged 2 commits into
mainfrom
feat/profile-activation-apply

Conversation

@drewstone

Copy link
Copy Markdown
Contributor

Problem

Products need to apply approved prompt, skill, tool, MCP, hook, and subagent changes to their own AgentProfile stores without copying profile diff semantics into every product.

Solution

Add one pure profile activation preparation function that compares exact measured digests, distinguishes missing/already-applied/conflicting state, and returns immutable serializable all-or-none replacements. Products retain ownership of locking, persistence, security policy, and durable activation receipts.

The package release is prepared as 0.101.0.

Proof

  • 1,574 executed tests passed across 495 files; 2 explicitly skipped; 0 failed
  • pnpm run typecheck
  • pnpm run lint
  • pnpm run build
  • pnpm run verify:package
  • pnpm run docs:freshness
  • Independent adversarial review findings addressed: non-empty outcome typing, canonical removals, immutable output, dead options, and packed-consumer coverage

tangletools
tangletools previously approved these changes Jul 20, 2026

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Auto-approved drewstone PR — 7679db6a

This PR was opened by the trusted drewstone account.
The full PR reviewer audit still runs separately and will publish findings if it detects issues.

tangletools · auto-approval · reason: drewstone_author · 2026-07-20T02:09:48Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Value Audit — sound-with-nits

Verdictsound-with-nits
Concerns2 (2 weak-concern)
Heuristic0.0s
Duplication0.0s
Interrogation204.6s (2 bridge agents)
Total204.6s

💰 Value — sound-with-nits

Adds a pure profile-activation prep function that classifies product-owned profiles against a measured transition and returns immutable all-or-none replacements — fills a real gap (knowledge has an executor, profiles didn't), reuses every existing primitive, ships.

  • What it does: Adds prepareAgentImprovementProfileActivation (src/intelligence/profile-activation.ts:65), a synchronous pure function that takes a product's current profiles (by identity) plus a non-empty list of measured activation targets for profile surfaces (prompt/skills/tools/mcp/hooks/subagents), and returns one of four classified outcomes: missing (identity not in the map), already-applied (current
  • Goals it achieves: Let products apply an approved measured profile change (prompt, skills, tools, mcp, hooks, subagents — the six profile-deliverable surfaces defined in AGENT_IMPROVEMENT_PROFILE_SURFACES) WITHOUT each product reimplementing digest comparison, multi-surface diff folding, or the missing/already-applied/conflict/apply classification. Runtime owns profile-diff semantics (it already owns the digest/diff
  • Assessment: Strong fit with the codebase's existing seam. Knowledge already has a sibling helper, createKnowledgeImprovementActivationExecutor (src/knowledge/activation.ts:38), which produces transition+reconcile callbacks because knowledge writes through Runtime into a durable store. Profiles are different — products own their profile stores — so the appropriate primitive is one step shallower: a pure prep
  • Better / existing approach: none — this is the right approach. Searched: grep for prepare, preparation, AgentImprovementActivationTargetPlan, desiredInput, expectedBaseDigest, the four status literals, and the two sibling constructors createAgentImprovementActivationResult / createKnowledgeImprovementActivationExecutor across src/ and tests/. No prior profile-activation preparation function exists; the only s
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 2
  • Bridge warning: opencode/kimi-for-coding/k2p7: bridge stream ended without value-audit content

🎯 Usefulness — sound

A pure preparation helper that fills the gap between Runtime's measured profile diffs and a product's owned activation write path; built in the grain of the existing improvement-cycle stack.

  • Integration: Exported from src/intelligence/index.ts:170; added to the packed-consumer compile check (scripts/verify-package-exports.mjs:158,218,322) which demonstrates the canonical product-side wiring (prepare → build AgentImprovementActivationOutcome). No internal caller yet — by design: docstring at src/intelligence/profile-activation.ts:60-64 says the caller owns locking/persistence/receipt. Products owni
  • Fit with existing patterns: Reuses the established primitives directly: agentImprovementTargetProfileDiffs, applyExactAgentProfileDiff (src/candidate-execution/profile.ts:214), agentImprovementProfileSurfaceDigest, immutableCandidateValue (src/candidate-execution/digest.ts:21). Same canonical-digest discipline, same omitUndefinedObjectFields/parseExactAgentProfile normalization, same 'product owns the write, Runtime owns the
  • Real-world viability: Covers the four real outcomes — missing / already-applied / conflict / apply — using exact digest comparisons (src/intelligence/profile-activation.ts:105-110). Post-apply digest verification per target (lines 132-142) catches any drift between desiredInput and desiredDigest. Immutable frozen output via immutableCandidateValue; serializable (verified in tests/profile-activation.test.ts:53). Duplica
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 1

💰 Value Audit

🟡 Non-empty tuple casts repeated inline[maintenance] ``

profile-activation.ts:103, 150, and 156 cast array literals to [T, ...T[]] via as. Unavoidable given TS's handling of dynamically-built arrays and the codebase-wide use of non-empty tuple types, but a one-line nonEmptyTuple helper (or reusing one if it already exists in candidate-execution/digest.ts) would localize the escape hatch. Polish, not a blocker.

🟡 Naming asymmetry vs knowledge executor is not signposted[maintenance] ``

Knowledge uses createKnowledgeImprovementActivationExecutor (returns transition+reconcile callbacks, src/knowledge/activation.ts:38); profiles now use prepareAgentImprovementProfileActivation (returns data). The asymmetry is correct — different ownership seam — but the JSDoc at profile-activation.ts:60 explains only what the function does, not why profiles get a different shape than knowledge. A one-sentence 'profiles are product-owned, so this returns replacements rather than a transition c


What this audit checks

It judges the change on its merits — not whether it was tasked out in an issue. Unticketed, fast-moving work is fine; the question is whether the change is good and whether a better or existing approach should be used instead.

PassWhat it asks
HeuristicVague title? Whitespace-only or cruft-bearing diff? (content signals only)
DuplicationDo added function/class names already exist elsewhere in the repo?
Value AuditWhat does it do? What goal does it achieve? Is it good? Better architecture or already-exists?
Usefulness AuditDoes it integrate and fit? Will it hold up in real use and actually get used?

Findings are concerns, not blocks — the human reviewer decides what to do with them.

value-audit · 20260720T021520Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Auto-approved drewstone PR — 1a28e464

This PR was opened by the trusted drewstone account.
The full PR reviewer audit still runs separately and will publish findings if it detects issues.

tangletools · auto-approval · reason: drewstone_author · 2026-07-20T02:27:41Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Value Audit — sound

Verdictsound
Concerns0 (none)
Heuristic0.0s
Duplication0.0s
Interrogation126.1s (2 bridge agents)
Total126.1s

💰 Value — sound

Adds a pure preparation primitive that turns approved measured profile transitions into immutable all-or-none replacements for product-owned profile stores; mirrors the existing knowledge-activation seam with the right ownership boundary.

  • What it does: Adds prepareAgentImprovementProfileActivation (src/intelligence/profile-activation.ts:67) — a pure function that takes current profiles by identity plus a list of (identity, surface, expectedBaseDigest, desiredDigest, desiredInput) targets, and returns one of four states: 'missing' (some identities absent), 'already-applied' (every current surface digest equals desiredDigest), 'conflict' (some cur
  • Goals it achieves: Let products apply approved prompt/skill/tool/mcp/hook/subagent changes to their OWN profile stores without each product reimplementing digest comparison, diff application, conflict detection, or canonical-removal semantics. Runtime owns profile-semantics; the product retains locking, persistence, security policy, and the durable activation receipt. This was inferred from the code, not the PR body
  • Assessment: Coherent and tightly in-grain. (1) Reuses existing primitives only: applyExactAgentProfileDiff, omitUndefinedObjectFields, parseExactAgentProfile, agentImprovementTargetProfileDiffs, agentImprovementProfileSurfaceDigest, immutableCandidateValue, and the AgentImprovementActivationTargetPlan/State/Transition types from src/intelligence/activation.ts:34-51. (2) Mirrors the sibling seam at src/knowled
  • Better / existing approach: none — this is the right approach. Searched src/ for 'profile.*activation', 'prepare.*Activation', and existing executors; the only sibling is src/knowledge/activation.ts:38, which uses Runtime-owned transition callbacks because knowledge lives in a Runtime-controlled adapter (@tangle-network/agent-knowledge). Forcing profile activation through the same callback shape would require Runtime to take
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 2
  • Bridge warning: opencode/kimi-for-coding/k2p7: bridge stream ended without value-audit content

🎯 Usefulness — sound

Pure profile-activation prep function — the product-owned-store analog of createKnowledgeImprovementActivationExecutor, built from existing diff primitives with no competing implementation.

  • Integration: Exported from src/intelligence/index.ts:170 and exercised by the package-exports compile smoke (scripts/verify-package-exports.mjs:218-241). Reachable from any product that owns an AgentProfile store and consumes executeAgentImprovementActivation's transition callback (src/intelligence/activation.ts:67-69). The first external caller doesn't exist in this repo, which is expected for a substrate pri
  • Fit with existing patterns: Fills a real gap. createKnowledgeImprovementActivationExecutor (src/knowledge/activation.ts:38) wires activation for Runtime-owned knowledge stores; until this PR there was no counterpart for product-owned profile stores, forcing every consumer to hand-roll diff assembly (visible in tests/improvement-cycle.test.ts:187-204). Uses established primitives throughout — agentImprovementTargetProfileDiff
  • Real-world viability: Pure, synchronous, no I/O or shared state — locking and persistence are explicitly the caller's job per the doc comment at src/intelligence/profile-activation.ts:60-66. Missing/already-applied/conflict/apply are all distinguished statuses matching what assertOutcomeDesiredState (src/intelligence/activation.ts:303-333) verifies. Self-check at src/intelligence/profile-activation.ts:134-144 throws if
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 1

No concerns — sound change, no better or existing approach found. ✅


What this audit checks

It judges the change on its merits — not whether it was tasked out in an issue. Unticketed, fast-moving work is fine; the question is whether the change is good and whether a better or existing approach should be used instead.

PassWhat it asks
HeuristicVague title? Whitespace-only or cruft-bearing diff? (content signals only)
DuplicationDo added function/class names already exist elsewhere in the repo?
Value AuditWhat does it do? What goal does it achieve? Is it good? Better architecture or already-exists?
Usefulness AuditDoes it integrate and fit? Will it hold up in real use and actually get used?

Findings are concerns, not blocks — the human reviewer decides what to do with them.

value-audit · 20260720T023020Z

@drewstone
drewstone merged commit 8488c44 into mainJul 20, 2026
2 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@drewstone@tangletools
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(intelligence): prepare exact profile activation - #572

Merged
drewstone merged 2 commits into
mainfrom
feat/profile-activation-apply
Jul 20, 2026
Merged

feat(intelligence): prepare exact profile activation#572
drewstone merged 2 commits into
mainfrom
feat/profile-activation-apply

Conversation

@drewstone

Copy link
Copy Markdown
Contributor

Problem

Products need to apply approved prompt, skill, tool, MCP, hook, and subagent changes to their own AgentProfile stores without copying profile diff semantics into every product.

Solution

Add one pure profile activation preparation function that compares exact measured digests, distinguishes missing/already-applied/conflicting state, and returns immutable serializable all-or-none replacements. Products retain ownership of locking, persistence, security policy, and durable activation receipts.

The package release is prepared as 0.101.0.

Proof

  • 1,574 executed tests passed across 495 files; 2 explicitly skipped; 0 failed
  • pnpm run typecheck
  • pnpm run lint
  • pnpm run build
  • pnpm run verify:package
  • pnpm run docs:freshness
  • Independent adversarial review findings addressed: non-empty outcome typing, canonical removals, immutable output, dead options, and packed-consumer coverage

tangletools
tangletools previously approved these changes Jul 20, 2026

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Auto-approved drewstone PR — 7679db6a

This PR was opened by the trusted drewstone account.
The full PR reviewer audit still runs separately and will publish findings if it detects issues.

tangletools · auto-approval · reason: drewstone_author · 2026-07-20T02:09:48Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Value Audit — sound-with-nits

Verdictsound-with-nits
Concerns2 (2 weak-concern)
Heuristic0.0s
Duplication0.0s
Interrogation204.6s (2 bridge agents)
Total204.6s

💰 Value — sound-with-nits

Adds a pure profile-activation prep function that classifies product-owned profiles against a measured transition and returns immutable all-or-none replacements — fills a real gap (knowledge has an executor, profiles didn't), reuses every existing primitive, ships.

  • What it does: Adds prepareAgentImprovementProfileActivation (src/intelligence/profile-activation.ts:65), a synchronous pure function that takes a product's current profiles (by identity) plus a non-empty list of measured activation targets for profile surfaces (prompt/skills/tools/mcp/hooks/subagents), and returns one of four classified outcomes: missing (identity not in the map), already-applied (current
  • Goals it achieves: Let products apply an approved measured profile change (prompt, skills, tools, mcp, hooks, subagents — the six profile-deliverable surfaces defined in AGENT_IMPROVEMENT_PROFILE_SURFACES) WITHOUT each product reimplementing digest comparison, multi-surface diff folding, or the missing/already-applied/conflict/apply classification. Runtime owns profile-diff semantics (it already owns the digest/diff
  • Assessment: Strong fit with the codebase's existing seam. Knowledge already has a sibling helper, createKnowledgeImprovementActivationExecutor (src/knowledge/activation.ts:38), which produces transition+reconcile callbacks because knowledge writes through Runtime into a durable store. Profiles are different — products own their profile stores — so the appropriate primitive is one step shallower: a pure prep
  • Better / existing approach: none — this is the right approach. Searched: grep for prepare, preparation, AgentImprovementActivationTargetPlan, desiredInput, expectedBaseDigest, the four status literals, and the two sibling constructors createAgentImprovementActivationResult / createKnowledgeImprovementActivationExecutor across src/ and tests/. No prior profile-activation preparation function exists; the only s
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 2
  • Bridge warning: opencode/kimi-for-coding/k2p7: bridge stream ended without value-audit content

🎯 Usefulness — sound

A pure preparation helper that fills the gap between Runtime's measured profile diffs and a product's owned activation write path; built in the grain of the existing improvement-cycle stack.

  • Integration: Exported from src/intelligence/index.ts:170; added to the packed-consumer compile check (scripts/verify-package-exports.mjs:158,218,322) which demonstrates the canonical product-side wiring (prepare → build AgentImprovementActivationOutcome). No internal caller yet — by design: docstring at src/intelligence/profile-activation.ts:60-64 says the caller owns locking/persistence/receipt. Products owni
  • Fit with existing patterns: Reuses the established primitives directly: agentImprovementTargetProfileDiffs, applyExactAgentProfileDiff (src/candidate-execution/profile.ts:214), agentImprovementProfileSurfaceDigest, immutableCandidateValue (src/candidate-execution/digest.ts:21). Same canonical-digest discipline, same omitUndefinedObjectFields/parseExactAgentProfile normalization, same 'product owns the write, Runtime owns the
  • Real-world viability: Covers the four real outcomes — missing / already-applied / conflict / apply — using exact digest comparisons (src/intelligence/profile-activation.ts:105-110). Post-apply digest verification per target (lines 132-142) catches any drift between desiredInput and desiredDigest. Immutable frozen output via immutableCandidateValue; serializable (verified in tests/profile-activation.test.ts:53). Duplica
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 1

💰 Value Audit

🟡 Non-empty tuple casts repeated inline[maintenance] ``

profile-activation.ts:103, 150, and 156 cast array literals to [T, ...T[]] via as. Unavoidable given TS's handling of dynamically-built arrays and the codebase-wide use of non-empty tuple types, but a one-line nonEmptyTuple helper (or reusing one if it already exists in candidate-execution/digest.ts) would localize the escape hatch. Polish, not a blocker.

🟡 Naming asymmetry vs knowledge executor is not signposted[maintenance] ``

Knowledge uses createKnowledgeImprovementActivationExecutor (returns transition+reconcile callbacks, src/knowledge/activation.ts:38); profiles now use prepareAgentImprovementProfileActivation (returns data). The asymmetry is correct — different ownership seam — but the JSDoc at profile-activation.ts:60 explains only what the function does, not why profiles get a different shape than knowledge. A one-sentence 'profiles are product-owned, so this returns replacements rather than a transition c


What this audit checks

It judges the change on its merits — not whether it was tasked out in an issue. Unticketed, fast-moving work is fine; the question is whether the change is good and whether a better or existing approach should be used instead.

PassWhat it asks
HeuristicVague title? Whitespace-only or cruft-bearing diff? (content signals only)
DuplicationDo added function/class names already exist elsewhere in the repo?
Value AuditWhat does it do? What goal does it achieve? Is it good? Better architecture or already-exists?
Usefulness AuditDoes it integrate and fit? Will it hold up in real use and actually get used?

Findings are concerns, not blocks — the human reviewer decides what to do with them.

value-audit · 20260720T021520Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Auto-approved drewstone PR — 1a28e464

This PR was opened by the trusted drewstone account.
The full PR reviewer audit still runs separately and will publish findings if it detects issues.

tangletools · auto-approval · reason: drewstone_author · 2026-07-20T02:27:41Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Value Audit — sound

Verdictsound
Concerns0 (none)
Heuristic0.0s
Duplication0.0s
Interrogation126.1s (2 bridge agents)
Total126.1s

💰 Value — sound

Adds a pure preparation primitive that turns approved measured profile transitions into immutable all-or-none replacements for product-owned profile stores; mirrors the existing knowledge-activation seam with the right ownership boundary.

  • What it does: Adds prepareAgentImprovementProfileActivation (src/intelligence/profile-activation.ts:67) — a pure function that takes current profiles by identity plus a list of (identity, surface, expectedBaseDigest, desiredDigest, desiredInput) targets, and returns one of four states: 'missing' (some identities absent), 'already-applied' (every current surface digest equals desiredDigest), 'conflict' (some cur
  • Goals it achieves: Let products apply approved prompt/skill/tool/mcp/hook/subagent changes to their OWN profile stores without each product reimplementing digest comparison, diff application, conflict detection, or canonical-removal semantics. Runtime owns profile-semantics; the product retains locking, persistence, security policy, and the durable activation receipt. This was inferred from the code, not the PR body
  • Assessment: Coherent and tightly in-grain. (1) Reuses existing primitives only: applyExactAgentProfileDiff, omitUndefinedObjectFields, parseExactAgentProfile, agentImprovementTargetProfileDiffs, agentImprovementProfileSurfaceDigest, immutableCandidateValue, and the AgentImprovementActivationTargetPlan/State/Transition types from src/intelligence/activation.ts:34-51. (2) Mirrors the sibling seam at src/knowled
  • Better / existing approach: none — this is the right approach. Searched src/ for 'profile.*activation', 'prepare.*Activation', and existing executors; the only sibling is src/knowledge/activation.ts:38, which uses Runtime-owned transition callbacks because knowledge lives in a Runtime-controlled adapter (@tangle-network/agent-knowledge). Forcing profile activation through the same callback shape would require Runtime to take
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 2
  • Bridge warning: opencode/kimi-for-coding/k2p7: bridge stream ended without value-audit content

🎯 Usefulness — sound

Pure profile-activation prep function — the product-owned-store analog of createKnowledgeImprovementActivationExecutor, built from existing diff primitives with no competing implementation.

  • Integration: Exported from src/intelligence/index.ts:170 and exercised by the package-exports compile smoke (scripts/verify-package-exports.mjs:218-241). Reachable from any product that owns an AgentProfile store and consumes executeAgentImprovementActivation's transition callback (src/intelligence/activation.ts:67-69). The first external caller doesn't exist in this repo, which is expected for a substrate pri
  • Fit with existing patterns: Fills a real gap. createKnowledgeImprovementActivationExecutor (src/knowledge/activation.ts:38) wires activation for Runtime-owned knowledge stores; until this PR there was no counterpart for product-owned profile stores, forcing every consumer to hand-roll diff assembly (visible in tests/improvement-cycle.test.ts:187-204). Uses established primitives throughout — agentImprovementTargetProfileDiff
  • Real-world viability: Pure, synchronous, no I/O or shared state — locking and persistence are explicitly the caller's job per the doc comment at src/intelligence/profile-activation.ts:60-66. Missing/already-applied/conflict/apply are all distinguished statuses matching what assertOutcomeDesiredState (src/intelligence/activation.ts:303-333) verifies. Self-check at src/intelligence/profile-activation.ts:134-144 throws if
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 1

No concerns — sound change, no better or existing approach found. ✅


What this audit checks

It judges the change on its merits — not whether it was tasked out in an issue. Unticketed, fast-moving work is fine; the question is whether the change is good and whether a better or existing approach should be used instead.

PassWhat it asks
HeuristicVague title? Whitespace-only or cruft-bearing diff? (content signals only)
DuplicationDo added function/class names already exist elsewhere in the repo?
Value AuditWhat does it do? What goal does it achieve? Is it good? Better architecture or already-exists?
Usefulness AuditDoes it integrate and fit? Will it hold up in real use and actually get used?

Findings are concerns, not blocks — the human reviewer decides what to do with them.

value-audit · 20260720T023020Z

@drewstone
drewstone merged commit 8488c44 into mainJul 20, 2026
2 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@drewstone@tangletools
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(intelligence): prepare exact profile activation - #572

Merged
drewstone merged 2 commits into
mainfrom
feat/profile-activation-apply
Jul 20, 2026
Merged

feat(intelligence): prepare exact profile activation#572
drewstone merged 2 commits into
mainfrom
feat/profile-activation-apply

Conversation

@drewstone

Copy link
Copy Markdown
Contributor

Problem

Products need to apply approved prompt, skill, tool, MCP, hook, and subagent changes to their own AgentProfile stores without copying profile diff semantics into every product.

Solution

Add one pure profile activation preparation function that compares exact measured digests, distinguishes missing/already-applied/conflicting state, and returns immutable serializable all-or-none replacements. Products retain ownership of locking, persistence, security policy, and durable activation receipts.

The package release is prepared as 0.101.0.

Proof

  • 1,574 executed tests passed across 495 files; 2 explicitly skipped; 0 failed
  • pnpm run typecheck
  • pnpm run lint
  • pnpm run build
  • pnpm run verify:package
  • pnpm run docs:freshness
  • Independent adversarial review findings addressed: non-empty outcome typing, canonical removals, immutable output, dead options, and packed-consumer coverage

tangletools
tangletools previously approved these changes Jul 20, 2026

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Auto-approved drewstone PR — 7679db6a

This PR was opened by the trusted drewstone account.
The full PR reviewer audit still runs separately and will publish findings if it detects issues.

tangletools · auto-approval · reason: drewstone_author · 2026-07-20T02:09:48Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Value Audit — sound-with-nits

Verdictsound-with-nits
Concerns2 (2 weak-concern)
Heuristic0.0s
Duplication0.0s
Interrogation204.6s (2 bridge agents)
Total204.6s

💰 Value — sound-with-nits

Adds a pure profile-activation prep function that classifies product-owned profiles against a measured transition and returns immutable all-or-none replacements — fills a real gap (knowledge has an executor, profiles didn't), reuses every existing primitive, ships.

  • What it does: Adds prepareAgentImprovementProfileActivation (src/intelligence/profile-activation.ts:65), a synchronous pure function that takes a product's current profiles (by identity) plus a non-empty list of measured activation targets for profile surfaces (prompt/skills/tools/mcp/hooks/subagents), and returns one of four classified outcomes: missing (identity not in the map), already-applied (current
  • Goals it achieves: Let products apply an approved measured profile change (prompt, skills, tools, mcp, hooks, subagents — the six profile-deliverable surfaces defined in AGENT_IMPROVEMENT_PROFILE_SURFACES) WITHOUT each product reimplementing digest comparison, multi-surface diff folding, or the missing/already-applied/conflict/apply classification. Runtime owns profile-diff semantics (it already owns the digest/diff
  • Assessment: Strong fit with the codebase's existing seam. Knowledge already has a sibling helper, createKnowledgeImprovementActivationExecutor (src/knowledge/activation.ts:38), which produces transition+reconcile callbacks because knowledge writes through Runtime into a durable store. Profiles are different — products own their profile stores — so the appropriate primitive is one step shallower: a pure prep
  • Better / existing approach: none — this is the right approach. Searched: grep for prepare, preparation, AgentImprovementActivationTargetPlan, desiredInput, expectedBaseDigest, the four status literals, and the two sibling constructors createAgentImprovementActivationResult / createKnowledgeImprovementActivationExecutor across src/ and tests/. No prior profile-activation preparation function exists; the only s
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 2
  • Bridge warning: opencode/kimi-for-coding/k2p7: bridge stream ended without value-audit content

🎯 Usefulness — sound

A pure preparation helper that fills the gap between Runtime's measured profile diffs and a product's owned activation write path; built in the grain of the existing improvement-cycle stack.

  • Integration: Exported from src/intelligence/index.ts:170; added to the packed-consumer compile check (scripts/verify-package-exports.mjs:158,218,322) which demonstrates the canonical product-side wiring (prepare → build AgentImprovementActivationOutcome). No internal caller yet — by design: docstring at src/intelligence/profile-activation.ts:60-64 says the caller owns locking/persistence/receipt. Products owni
  • Fit with existing patterns: Reuses the established primitives directly: agentImprovementTargetProfileDiffs, applyExactAgentProfileDiff (src/candidate-execution/profile.ts:214), agentImprovementProfileSurfaceDigest, immutableCandidateValue (src/candidate-execution/digest.ts:21). Same canonical-digest discipline, same omitUndefinedObjectFields/parseExactAgentProfile normalization, same 'product owns the write, Runtime owns the
  • Real-world viability: Covers the four real outcomes — missing / already-applied / conflict / apply — using exact digest comparisons (src/intelligence/profile-activation.ts:105-110). Post-apply digest verification per target (lines 132-142) catches any drift between desiredInput and desiredDigest. Immutable frozen output via immutableCandidateValue; serializable (verified in tests/profile-activation.test.ts:53). Duplica
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 1

💰 Value Audit

🟡 Non-empty tuple casts repeated inline[maintenance] ``

profile-activation.ts:103, 150, and 156 cast array literals to [T, ...T[]] via as. Unavoidable given TS's handling of dynamically-built arrays and the codebase-wide use of non-empty tuple types, but a one-line nonEmptyTuple helper (or reusing one if it already exists in candidate-execution/digest.ts) would localize the escape hatch. Polish, not a blocker.

🟡 Naming asymmetry vs knowledge executor is not signposted[maintenance] ``

Knowledge uses createKnowledgeImprovementActivationExecutor (returns transition+reconcile callbacks, src/knowledge/activation.ts:38); profiles now use prepareAgentImprovementProfileActivation (returns data). The asymmetry is correct — different ownership seam — but the JSDoc at profile-activation.ts:60 explains only what the function does, not why profiles get a different shape than knowledge. A one-sentence 'profiles are product-owned, so this returns replacements rather than a transition c


What this audit checks

It judges the change on its merits — not whether it was tasked out in an issue. Unticketed, fast-moving work is fine; the question is whether the change is good and whether a better or existing approach should be used instead.

PassWhat it asks
HeuristicVague title? Whitespace-only or cruft-bearing diff? (content signals only)
DuplicationDo added function/class names already exist elsewhere in the repo?
Value AuditWhat does it do? What goal does it achieve? Is it good? Better architecture or already-exists?
Usefulness AuditDoes it integrate and fit? Will it hold up in real use and actually get used?

Findings are concerns, not blocks — the human reviewer decides what to do with them.

value-audit · 20260720T021520Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Auto-approved drewstone PR — 1a28e464

This PR was opened by the trusted drewstone account.
The full PR reviewer audit still runs separately and will publish findings if it detects issues.

tangletools · auto-approval · reason: drewstone_author · 2026-07-20T02:27:41Z

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Value Audit — sound

Verdictsound
Concerns0 (none)
Heuristic0.0s
Duplication0.0s
Interrogation126.1s (2 bridge agents)
Total126.1s

💰 Value — sound

Adds a pure preparation primitive that turns approved measured profile transitions into immutable all-or-none replacements for product-owned profile stores; mirrors the existing knowledge-activation seam with the right ownership boundary.

  • What it does: Adds prepareAgentImprovementProfileActivation (src/intelligence/profile-activation.ts:67) — a pure function that takes current profiles by identity plus a list of (identity, surface, expectedBaseDigest, desiredDigest, desiredInput) targets, and returns one of four states: 'missing' (some identities absent), 'already-applied' (every current surface digest equals desiredDigest), 'conflict' (some cur
  • Goals it achieves: Let products apply approved prompt/skill/tool/mcp/hook/subagent changes to their OWN profile stores without each product reimplementing digest comparison, diff application, conflict detection, or canonical-removal semantics. Runtime owns profile-semantics; the product retains locking, persistence, security policy, and the durable activation receipt. This was inferred from the code, not the PR body
  • Assessment: Coherent and tightly in-grain. (1) Reuses existing primitives only: applyExactAgentProfileDiff, omitUndefinedObjectFields, parseExactAgentProfile, agentImprovementTargetProfileDiffs, agentImprovementProfileSurfaceDigest, immutableCandidateValue, and the AgentImprovementActivationTargetPlan/State/Transition types from src/intelligence/activation.ts:34-51. (2) Mirrors the sibling seam at src/knowled
  • Better / existing approach: none — this is the right approach. Searched src/ for 'profile.*activation', 'prepare.*Activation', and existing executors; the only sibling is src/knowledge/activation.ts:38, which uses Runtime-owned transition callbacks because knowledge lives in a Runtime-controlled adapter (@tangle-network/agent-knowledge). Forcing profile activation through the same callback shape would require Runtime to take
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 2
  • Bridge warning: opencode/kimi-for-coding/k2p7: bridge stream ended without value-audit content

🎯 Usefulness — sound

Pure profile-activation prep function — the product-owned-store analog of createKnowledgeImprovementActivationExecutor, built from existing diff primitives with no competing implementation.

  • Integration: Exported from src/intelligence/index.ts:170 and exercised by the package-exports compile smoke (scripts/verify-package-exports.mjs:218-241). Reachable from any product that owns an AgentProfile store and consumes executeAgentImprovementActivation's transition callback (src/intelligence/activation.ts:67-69). The first external caller doesn't exist in this repo, which is expected for a substrate pri
  • Fit with existing patterns: Fills a real gap. createKnowledgeImprovementActivationExecutor (src/knowledge/activation.ts:38) wires activation for Runtime-owned knowledge stores; until this PR there was no counterpart for product-owned profile stores, forcing every consumer to hand-roll diff assembly (visible in tests/improvement-cycle.test.ts:187-204). Uses established primitives throughout — agentImprovementTargetProfileDiff
  • Real-world viability: Pure, synchronous, no I/O or shared state — locking and persistence are explicitly the caller's job per the doc comment at src/intelligence/profile-activation.ts:60-66. Missing/already-applied/conflict/apply are all distinguished statuses matching what assertOutcomeDesiredState (src/intelligence/activation.ts:303-333) verifies. Self-check at src/intelligence/profile-activation.ts:134-144 throws if
  • Model: opencode/zai-coding-plan/glm-5.2
  • Bridge attempts: 1

No concerns — sound change, no better or existing approach found. ✅


What this audit checks

It judges the change on its merits — not whether it was tasked out in an issue. Unticketed, fast-moving work is fine; the question is whether the change is good and whether a better or existing approach should be used instead.

PassWhat it asks
HeuristicVague title? Whitespace-only or cruft-bearing diff? (content signals only)
DuplicationDo added function/class names already exist elsewhere in the repo?
Value AuditWhat does it do? What goal does it achieve? Is it good? Better architecture or already-exists?
Usefulness AuditDoes it integrate and fit? Will it hold up in real use and actually get used?

Findings are concerns, not blocks — the human reviewer decides what to do with them.

value-audit · 20260720T023020Z

@drewstone
drewstone merged commit 8488c44 into mainJul 20, 2026
2 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@drewstone@tangletools