feat(linkedin-studio): SB-S3a — wire strategy-advisor as first brain/profile.md reader [skip-docs]

The second brain now feeds generation: strategy-advisor reads brain/profile.md
as evidence-to-test (anti-sycophancy default, graceful absence on fresh installs).
First end-to-end proof of capture → consolidate → read-back-into-generation.

- agents/strategy-advisor.md: brain/profile.md added to Step 0 Load Context + a
  consumption subsection (Static/Dynamic layers, evidence_count/last_seen weighting,
  anti-sycophancy counter-pressure, silent degrade when the file is absent).
- scripts/test-runner.sh: new Section 16d (Brain Profile Reader) — 2 UNCONDITIONAL
  checks (non-vacuity self-test with legacy-path/lowercase decoy + exact-literal
  wiring grep on strategy-advisor.md), ASSERT_BASELINE_FLOOR 78→80, header
  enumeration extended. Gate 93→95/0/0; brain floor 82 untouched.
- docs/second-brain/consolidation-loop.md: reconciled the stale "no reader yet"
  honest-limit to the true partial state (one reader; broader consumption deferred).

TDD: RED (only the wiring grep failed, exit 1) → GREEN (95/0/0). READ-only — the
brain consolidate --apply --confirm gate stays the sole writer. SC4 (graceful
absence) verified by inspection; SC5 (read-back) deferred to a reloaded session
(honest — agent prompts load at session start). S3a scope held: one reader, no
parser, no id-threading.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RigJBiRFNtFZKCz21qNbQ4
This commit is contained in:
Kjell Tore Guttormsen 2026-06-23 18:23:04 +02:00
commit 4fa411f13c
3 changed files with 76 additions and 6 deletions

View file

@ -64,8 +64,10 @@ Defaults: `promoteThreshold = 3`, `decayDays = 90` (operator-confirmed).
- **The loop's value depends on the session's extraction.** The engine only guarantees threshold/conflict/
decay/provenance mechanics. Garbage candidates → a garbage diff. The operator gate + candidate-shape
validation catch shape errors, not insight quality.
- **`brain/profile.md` has no reader yet.** S2 evolves the profile; wiring content agents/commands to
*consume* it is SB-S3. The value is deferred: the profile compounds now so S3's reader inherits rich data.
- **`brain/profile.md` has one reader as of SB-S3a.** S2 evolved the profile motor-only; SB-S3a wired the
first consumer — `strategy-advisor` reads it as *evidence-to-test* (anti-sycophancy: counter-pressured, never
parroted). Broader consumption (more content agents, a hook-level prompt digest) remains later S3 work, and
the profile is still mutated ONLY via `brain consolidate --apply --confirm`.
- **No supersede / no auto-demotion.** Conflicts keep both; stale facts are flagged, never auto-removed —
the operator (or S3) reconciles. Conflict alt facts persist until then.
- **No AI at session-start.** The nudge is a deterministic file-count + sidecar read; the consolidation