feat(linkedin-studio): RE-R2b — dated morning-brief artifact + session-start surfacing [skip-docs]
The visible layer of R2. Pure brief.ts: rankForBrief (pillar-overlap -> recency over the store; publishedAt ?? capturedAt freshness, 7d window; total-order sort), renderBrief (dated Markdown + hook-surfaceable summary frontmatter), briefSummary (one summary source), defaultBriefDir (derived from defaultStorePath). CLI `brief` writes <data>/trends/morning-brief/YYYY-MM-DD.md; session-start surfaces the latest zero-tsx (latestMorningBrief). Wired into trend-spotter Step 4.6 (scan->capture->brief->surfaced). No store-schema/scoring change; no scheduler (R3). 25 new trends tests (21 brief.test + 4 cli brief, RED-first) + 3 hook tests (morning-brief surfacing). trends 104/104 (floor 104), hook-suite 139/139, gate FAIL=0 (ASSERT floor 94, Section 16i: cli brief-handler + trend-spotter brief-pointer + session-start surfacing greps), tsc clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VmHCQjJHUyWwxGAVVjNLgp
This commit is contained in:
parent
88fbbadb1b
commit
fa7551070e
9 changed files with 712 additions and 10 deletions
|
|
@ -69,11 +69,32 @@ node --import tsx src/cli.ts query --topics "agents,engineering" [--json]
|
|||
|
||||
# Time-scoped history — newest first, optionally windowed/capped
|
||||
node --import tsx src/cli.ts list [--since 2026-06-01] [--limit 10] [--json]
|
||||
|
||||
# Dated morning brief — rank the store by pillar-overlap then recency, write a dated
|
||||
# Markdown file the SessionStart hook surfaces. Pillars come from the caller (user config).
|
||||
node --import tsx src/cli.ts brief --pillars "agents,engineering" \
|
||||
[--fresh-days 7] [--out <dir>] [--store <path>] [--json]
|
||||
```
|
||||
|
||||
Both `capture` and `add` dedupe on normalized title+url — re-capturing the same trend
|
||||
never appends a duplicate, it only unions any new topics in.
|
||||
|
||||
## Morning brief (RE-R2b)
|
||||
|
||||
`brief` is the dated, surfaced read over the store (distinct from `query`/`list`, which are
|
||||
interactive dumps). It ranks the store against the user's pillars — overlap desc, then
|
||||
`publishedAt ?? capturedAt` recency — buckets into top (2+ pillars), single (1 pillar), and
|
||||
older (matched but outside the freshness window, default 7 days), and writes:
|
||||
|
||||
```
|
||||
${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/trends/morning-brief/YYYY-MM-DD.md
|
||||
```
|
||||
|
||||
The file's YAML frontmatter carries a single-line `summary` the SessionStart hook surfaces
|
||||
verbatim (zero-tsx — it reads the Markdown, never the TS CLI). Ranking uses only persisted
|
||||
fields; a persisted relevance score, an autonomous nightly trigger, and a seen-log freshness
|
||||
model are later slices.
|
||||
|
||||
## Tests
|
||||
|
||||
```bash
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue