greprag 0.9.1 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -300,8 +300,46 @@ function parseFileFlag(raw) {
300
300
  }
301
301
  return { path: raw };
302
302
  }
303
- /** greprag send "body" --to <email>[/project[/session]]
304
- * [--session <id>] target session (alt to address suffix)
303
+ /** Disambiguation: a UUID v4 (36 chars with dashes) or its 8-hex short form
304
+ * is a session id; anything else is a project name. Project names that
305
+ * look like UUIDs are rejected at registration time so this is unambiguous.
306
+ * adr: adr/session-id-awareness.md, adr/address-grammar.md */
307
+ const SESSION_ID_PATTERN = /^([0-9a-f]{8}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/i;
308
+ /** Parse a send address under the v0.11 grammar:
309
+ * <handle>@greprag.com/<target>
310
+ * where <target> is exactly one segment — a session UUID (or 8-hex short
311
+ * form) for a session-targeted send, or a project name for a project
312
+ * broadcast. The bare form <handle>@greprag.com is identity-only and
313
+ * cannot be sent to — recipients share it as their contact form, senders
314
+ * must supply a target.
315
+ *
316
+ * Returns a discriminated result so the caller can print the helpful
317
+ * migration hint on failure. */
318
+ function parseSendAddress(addr) {
319
+ const segments = addr.split('/');
320
+ if (segments.length === 1) {
321
+ return { ok: false, error: `address "${addr}" has no target — the bare handle form is receive-only.\n` +
322
+ ` Add /<session-uuid> for the normal session-to-session send, or\n` +
323
+ ` add /<project-name> for an intentional project-wide broadcast.` };
324
+ }
325
+ if (segments.length > 2) {
326
+ return { ok: false, error: `address "${addr}" has too many segments. The v0.11 grammar is\n` +
327
+ ` <handle>@greprag.com/<target>\n` +
328
+ `where <target> is exactly one of: a session UUID OR a project name.\n` +
329
+ `Legacy <email>/<project>/<session> form is no longer accepted —\n` +
330
+ `pick the session you actually meant.` };
331
+ }
332
+ const [emailPart, target] = segments;
333
+ if (!emailPart.includes('@')) {
334
+ return { ok: false, error: `address "${addr}" missing @greprag.com handle.` };
335
+ }
336
+ if (!target) {
337
+ return { ok: false, error: `address "${addr}" has an empty target segment.` };
338
+ }
339
+ const kind = SESSION_ID_PATTERN.test(target) ? 'session' : 'project';
340
+ return { ok: true, targetKind: kind, target };
341
+ }
342
+ /** greprag send "body" --to <handle>@greprag.com/<target>
305
343
  * [--from-session <id>] sender's own session — denormalized
306
344
  * onto the message so the recipient can
307
345
  * reply by session without re-discovery
@@ -309,6 +347,11 @@ function parseFileFlag(raw) {
309
347
  * [--artifact <type:id>]+ (repeatable; e.g. commit:abc123, pr:#42)
310
348
  * [--file <path[:lines]>]+ (repeatable; e.g. src/auth.ts:42)
311
349
  * [--ref-json '<json>'] (escape hatch — full references object)
350
+ *
351
+ * <target> is exactly one segment — a session UUID (normal case) or a
352
+ * project name (intentional broadcast). The bare <handle>@greprag.com form
353
+ * is receive-only; sending to it errors. --session and --project flags
354
+ * were removed in v0.11 — the address carries the target.
312
355
  */
313
356
  async function send(args) {
314
357
  const cfg = getConfig();
@@ -318,14 +361,31 @@ async function send(args) {
318
361
  }
319
362
  const to = getFlag(args, '--to');
320
363
  if (!to) {
321
- console.error('Usage: greprag send "body" --to <email>[/project[/session]] [--session <id>] [--from-session <id>] [--memory <uuid>] [--artifact <type:id>] [--file <path[:lines]>]');
364
+ console.error('Usage: greprag send "body" --to <handle>@greprag.com/<target> [--from-session <id>] [--memory <uuid>] [--artifact <type:id>] [--file <path[:lines]>]\n <target>: session UUID (normal) or project name (broadcast).');
365
+ process.exit(1);
366
+ }
367
+ // Early validation — fail before the round-trip so the operator sees the
368
+ // hint immediately instead of after a 4xx from the server.
369
+ const parsed = parseSendAddress(to);
370
+ if (!parsed.ok) {
371
+ console.error(parsed.error);
322
372
  process.exit(1);
323
373
  }
374
+ // Reject the dropped flags loudly so legacy scripts surface the change
375
+ // instead of silently sending without a target.
376
+ for (const dropped of ['--session', '--project']) {
377
+ if (args.includes(dropped)) {
378
+ console.error(`${dropped} was removed in v0.11. The address itself now carries the target —\n` +
379
+ ` for session: --to <handle>@greprag.com/<session-uuid>\n` +
380
+ ` for project broadcast: --to <handle>@greprag.com/<project-name>`);
381
+ process.exit(1);
382
+ }
383
+ }
324
384
  // Find the body — first positional arg that isn't a flag value. We need to
325
385
  // skip both the flag itself and the value of any preceding flag.
326
386
  const flagsTakingValue = new Set([
327
387
  '--to', '--memory', '--artifact', '--file', '--ref-json',
328
- '--session', '--from-session',
388
+ '--from-session',
329
389
  ]);
330
390
  let body;
331
391
  for (let i = 0; i < args.length; i++) {
@@ -337,7 +397,7 @@ async function send(args) {
337
397
  break;
338
398
  }
339
399
  if (!body) {
340
- console.error('Usage: greprag send "body" --to <email>[/project] ...');
400
+ console.error('Usage: greprag send "body" --to <handle>@greprag.com/<target> ...');
341
401
  process.exit(1);
342
402
  }
343
403
  // Build references from flags (or take the explicit --ref-json if provided).
@@ -371,22 +431,22 @@ async function send(args) {
371
431
  const payload = { to, body };
372
432
  if (references)
373
433
  payload.references = references;
374
- const sessionId = getFlag(args, '--session');
375
- if (sessionId)
376
- payload.session_id = sessionId;
377
434
  const fromSessionId = getFlag(args, '--from-session');
378
435
  if (fromSessionId)
379
436
  payload.from_session_id = fromSessionId;
380
437
  const result = await apiCall(`${cfg.apiUrl}/v1/inbox/send`, cfg.apiKey, payload);
381
438
  const delivered = result.delivered_to;
382
- // Display session in 8-hex form adr: adr/session-id-awareness.md
383
- const deliveredSessionShort = (0, session_id_1.truncateSessionId)(delivered.session_id ?? null);
384
- const sessionSuffix = deliveredSessionShort ? '/' + deliveredSessionShort : '';
385
- // Always show @greprag.com handle (numeric or alias) — never the real email.
386
- // adr: adr/numeric-handles.md
439
+ // Render the delivered-to in the v0.11 single-segment grammar.
440
+ // adr: adr/numeric-handles.md, adr/address-grammar.md
387
441
  const base = delivered.handle || `${delivered.tenant}@greprag.com`;
388
- const target = `${base}${delivered.project ? '/' + delivered.project : ''}${sessionSuffix}`;
389
- console.log(`Sent to ${target} (${result.id.slice(0, 8)})`);
442
+ // Session takes precedence over project as the displayed segment when
443
+ // both happened (rare: session-targeted send to a session that lives
444
+ // inside a project), the session is what the recipient watcher saw.
445
+ const deliveredSessionShort = (0, session_id_1.truncateSessionId)(delivered.session_id ?? null);
446
+ const targetSegment = deliveredSessionShort
447
+ ? '/' + deliveredSessionShort
448
+ : (delivered.project ? '/' + delivered.project : '');
449
+ console.log(`Sent to ${base}${targetSegment} (${result.id.slice(0, 8)})`);
390
450
  const retractCode = result.retract_code;
391
451
  if (retractCode)
392
452
  console.log(`Retract: greprag retract ${retractCode}`);
@@ -426,6 +486,9 @@ Inbox (email-style messaging across tenants):
426
486
  --session filters to messages targeting this session
427
487
  (plus untargeted broadcasts).
428
488
  inbox watch Long-lived SSE stream — prints each message as it lands.
489
+ Wrap in a bash while-loop so the watcher restarts
490
+ if the SSE process dies. The CLI itself has no
491
+ in-process supervisor.
429
492
  [--project <name>] Filter to one project inbox (default: tenant-wide).
430
493
  [--session <id>] Filter to messages targeting this session
431
494
  (plus untargeted broadcasts).
@@ -434,8 +497,7 @@ Inbox (email-style messaging across tenants):
434
497
  inbox keep <id> Extend a read message's TTL (default delete after 14 days)
435
498
  inbox delete <id> Permanently delete a message
436
499
  send "body" --to <addr> Send a message. Body is markdown.
437
- --session <id> Target session only that session's watcher sees it.
438
- Equivalent to suffixing the address with /<id>.
500
+ <addr> must include a target segment see Addresses below.
439
501
  --from-session <id> Sender's session — denormalized so the recipient can
440
502
  reply by session without re-discovery.
441
503
  --memory <uuid> (repeatable) back-pointer to a memory row
@@ -446,10 +508,12 @@ Inbox (email-style messaging across tenants):
446
508
  Unread → hard delete. Read → body replaced with a retracted notice.
447
509
  Idempotent: double-retract is a no-op.
448
510
 
449
- Addresses: <email>
450
- <email>/<project>
451
- <email>/<project>/<session-id>
452
- <tenant>@greprag.com[/<project>[/<session-id>]]
511
+ Addresses (v0.11+):
512
+ Share: <handle>@greprag.com identity-only, receive form
513
+ Send: <handle>@greprag.com/<session-uuid> session-to-session (normal)
514
+ <handle>@greprag.com/<project-name> project broadcast (rare, intentional)
515
+ The bare share form cannot be sent to — operators must pick a target.
516
+ --session and --project flags were removed; the address carries the target.
453
517
 
454
518
  Project facts (self-organizing learnings — seed knowledge for future chips):
455
519
  fact add "<text>" --scope <S> [--project <name>] [--source-session <id>]
@@ -483,10 +547,11 @@ Examples:
483
547
  greprag init # standard repo setup
484
548
  greprag init --global # Cowork / unanchored sessions
485
549
  greprag inbox
486
- greprag send "Heads up on the migration" --to alice@example.com
487
- greprag send "Deploy when ready" --to alice@example.com/paybot
488
- greprag send "Ping" --to bob@greprag.com # native handle alias
489
- greprag send "Bug in auth flow — repro at line 42" --to alice@example.com \
550
+ greprag send "done with migration" --to alice@greprag.com/abc12345
551
+ # session-targeted (normal)
552
+ greprag send "deploy approved" --to alice@greprag.com/paybot
553
+ # project broadcast (rare)
554
+ greprag send "Bug in auth flow — repro at line 42" --to alice@greprag.com/abc12345 \
490
555
  --file src/auth.ts:42 --artifact commit:abc123
491
556
  `.trim();
492
557
  async function main() {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "greprag",
3
- "version": "0.9.1",
3
+ "version": "0.11.0",
4
4
  "description": "GrepRAG — agent memory for Claude Code. 2-command setup.",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -0,0 +1,65 @@
1
+ ---
2
+ name: content-advisor
3
+ version: 0.1.0
4
+ description: |
5
+ Cross-venture content strategist for a multi-venture portfolio. Reads
6
+ GrepRAG episodic memory (ship-events, dailies, weeklies) across every
7
+ paired project, cross-checks recent writing activity (OpenWriter drafts,
8
+ newsletter sends, X posts, blog commits), and produces a ranked list of
9
+ the next content pieces to ship — each one ready to hand off to a
10
+ channel-master writer (`/x-writer`, `/blog-writer`, `/newsletter-writer`).
11
+
12
+ Scope: content strategy only. Does NOT compose prose. The handoff brief
13
+ follows the contract in `C:/openwriter/skills/WRITER-CONVENTION.md` — the
14
+ writer masters execute. Revenue strategy lives in the sibling
15
+ `business-advisor` skill; orchestrator meta-coordination lives at
16
+ `C:/orchestrator/CLAUDE.md`.
17
+
18
+ Use when: "/content-advisor", "what should I write", "what's the next
19
+ post", "content check-in", "what content am I behind on", "queue up the
20
+ next thread/post/newsletter".
21
+ ---
22
+
23
+ # Content Advisor
24
+
25
+ Input: nothing. Output: ranked content opportunity list + handoff commands. The advisor reads activity, applies decision rules, presents — the user picks one and invokes the writer.
26
+
27
+ All paths below are relative to the **portfolio root** (defaults to `C:/orchestrator`). Resolution: `CONTENT_ADVISOR_ROOT` env, `~/.claude/content-advisor.json`, cwd marker scan. See `docs/setup.md`.
28
+
29
+ ## Protocol
30
+
31
+ 0. **Verify setup.** Portfolio root resolved, `GREPRAG_API_KEY` present, `greprag discover` returns ≥1 project, the three writer skills (`x-writer`, `blog-writer`, `newsletter-writer`) exist on disk. Else enter setup per `docs/setup.md`.
32
+
33
+ 1. **Read state.** `docs/ventures.md`, `docs/strategy/focus.md`, per-venture `docs/<venture>.md` if present. Note tier per venture, cadence config if a venture overrides defaults.
34
+
35
+ 2. **Pull data.** Two parallel streams:
36
+ - **Episodic memory** — fan out greprag queries per `docs/episodic-memory-queries.md`. One project at a time, three shapes per project (ship-event 30d, daily 14d, weekly 4w). Aggregate into `{ venture, ships[], dailies[], weeklies[] }`.
37
+ - **Writing activity** — per `docs/writing-activity.md`. OpenWriter `list_documents`, newsletter analytics, X recent posts, blog git history. Aggregate per venture per channel.
38
+
39
+ 3. **Apply decision rules** per `docs/decision-rules.md`:
40
+ - Source-farmer: every un-content'd ship-event = opportunity
41
+ - Cadence floor: silent channel past its floor = recombination opportunity
42
+ - Tier prioritization: tier S/A outrank tier B/C
43
+ - Anti-duplication: if topic already shipped on channel X, propose cross-format on channel Y
44
+
45
+ 4. **Produce triaged list** per `docs/output-format.md`. Top-line: the single highest-value next piece. Then ranked list ≤10. Clean split between "act now" and "consider later."
46
+
47
+ 5. **Present to user.** Plain-English summary + ranked list. Each item carries the exact slash-command to hand off. User picks one (or none); advisor exits. **Do not auto-invoke the writer in v1** — list-only handoff per `docs/handoff-contract.md`.
48
+
49
+ ## Firm rules
50
+
51
+ - **Don't write content.** Ever. If the advisor catches itself drafting copy, stop and convert to a brief. The boundary is sacred.
52
+ - **One project per greprag call.** The endpoint can return all projects in one call but cross-venture aggregation needs per-project grouping anyway; explicit fan-out is clearer and matches greprag's discover-then-query pattern.
53
+ - **Correct type values.** `daily`, `weekly`, `ship-event`, `turn`. NOT `episodic-daily` / `episodic-weekly` — those silently return zero rows.
54
+ - **Don't ask the user to pick which ventures to scan.** `greprag discover` returns the full list; aggregate everything, then rank by tier.
55
+ - **Skip auto-invocation.** v1 is list-only. The user reads the list, picks an item by number, runs the slash-command themselves.
56
+
57
+ ## Sub-docs
58
+
59
+ - `docs/setup.md` — portfolio root resolution, greprag check, writer-skill verification, config file
60
+ - `docs/data-sources.md` — what's read, refresh policy, failure modes
61
+ - `docs/episodic-memory-queries.md` — **load-bearing** — exact greprag queries, time windows, aggregation, fallback
62
+ - `docs/writing-activity.md` — OpenWriter list_documents, newsletter analytics, X recent posts, blog git history
63
+ - `docs/decision-rules.md` — source-farmer, cadence floor, tier prioritization, anti-duplication
64
+ - `docs/output-format.md` — ranked opportunity list shape
65
+ - `docs/handoff-contract.md` — input brief shape per WRITER-CONVENTION.md; v1 list-only handoff
@@ -0,0 +1,51 @@
1
+ # Data Sources
2
+
3
+ What the advisor reads on every run, where it lives, refresh policy, failure mode.
4
+
5
+ | Source | Where | Refresh | Failure mode |
6
+ |---|---|---|---|
7
+ | GrepRAG episodic memory | `https://api.greprag.com/v1/memory/by-period` via Bearer auth | Live per run | Per-project — skip + warn. Whole API down → abort. |
8
+ | Project list | `greprag discover --json` | Live per run | If empty → "no projects paired, run greprag init in your repos." |
9
+ | Venture index | `<portfolio_root>/docs/ventures.md` | On-disk read | If missing → tier-prioritization disabled, all opportunities flat-ranked. |
10
+ | Focus / tier | `<portfolio_root>/docs/strategy/focus.md` | On-disk read | If missing → tier-prioritization disabled, warn. |
11
+ | Per-venture notes | `<portfolio_root>/docs/<venture>.md` | On-disk read | Optional; advisor still runs without them. |
12
+ | OpenWriter docs | `mcp__openwriter__list_documents` + `list_workspaces` | Live per run | MCP down → no draft-anti-duplication, mark warnings. |
13
+ | Newsletter sends | `mcp__openwriter__list_newsletter_issues` + `get_newsletter_analytics` | Live per run | MCP down → assume no recent sends, surface warning. |
14
+ | X recent posts | `/x-strategy` cache or `mcp__x__*` if available; fallback: read user's recent tweets via fxtwitter | Live per run | If unavailable → cadence-floor rule for X disabled, warn. |
15
+ | Blog git history | `git log` against each venture's marketing-site repo (paths from project_to_venture map + ventures.md) | Live per run | If repo path unknown → skip blog-anti-duplication for that venture. |
16
+ | Writer skills | `~/.claude/skills/{x,blog,newsletter}-writer/SKILL.md` | Once per setup | If missing → setup forces install. |
17
+ | Config | `~/.claude/content-advisor.json` | Read every run | If missing → setup flow. |
18
+
19
+ ## Refresh policy
20
+
21
+ Every run is a full refresh. No caching at the advisor layer — the underlying data sources (greprag, OpenWriter, git) are already fast and their own freshness is what we trust. Caching here would just create staleness bugs.
22
+
23
+ ## Read order
24
+
25
+ Sequential where there's a dependency, parallel otherwise:
26
+
27
+ ```
28
+ 1. config + setup verification (sequential, blocks all)
29
+ 2. greprag discover (sequential, drives fan-out)
30
+ 3. PARALLEL:
31
+ - greprag memory fan-out (per project × 3 shapes)
32
+ - ventures.md / focus.md / per-venture notes
33
+ - OpenWriter list_documents
34
+ - newsletter list_issues
35
+ - X recent posts
36
+ - blog git log per venture
37
+ 4. aggregate + apply decision-rules (sequential)
38
+ 5. format + present (sequential)
39
+ ```
40
+
41
+ ## Auth + env
42
+
43
+ - `GREPRAG_API_KEY` — required, sourced from `~/.env` if not already exported. Setup flow handles missing key.
44
+ - OpenWriter MCP — required for draft-anti-duplication and newsletter-sends signal. Configured per-user; if not connected, advisor degrades.
45
+ - X — graceful degradation; treat as "no signal" rather than failing.
46
+
47
+ ## What's NOT read
48
+
49
+ - Stripe / MRR — that's `business-advisor`'s job. Content-advisor doesn't reason about revenue directly; it inherits tier via `focus.md`.
50
+ - Discord activity — out of scope for v1 (no content channel there).
51
+ - Code search (grep across repos) — too noisy. Memory rows already crystallized the signal.
@@ -0,0 +1,114 @@
1
+ # Decision Rules
2
+
3
+ Five rules turn the raw memory + activity streams into a ranked opportunity list. They compose — one opportunity often triggers under multiple rules, which boosts its rank.
4
+
5
+ ## Rule 1 — Source-farmer
6
+
7
+ > Every `ship-event` row without a corresponding piece of content in the same window is an opportunity.
8
+
9
+ **Mechanism:**
10
+ - For each `ship-event` in the 30d window:
11
+ - Pull its `content`, `artifactUrl`, `windowStart`, `projectName` → venture.
12
+ - Check the venture's activity map: did X, blog, or newsletter cover this in the days since the ship?
13
+ - "Covered" means a post/issue/draft whose inferred topic overlaps with the ship's content excerpt (substring or shared 3+ content-words; loose match).
14
+ - Un-covered ships → one opportunity per eligible channel for that venture (per `channels_per_venture` in config).
15
+ - Default channel preference for a fresh ship: X first (cheap, fast, signals to audience), then blog (durable), then newsletter (only if next-issue cadence is near).
16
+
17
+ **Why first:** ships are the highest-trust source material. The user actually did something. Writing about it has both narrative truth and discoverability value. This is the rule the user specifically called out as "most important."
18
+
19
+ ## Rule 2 — Cadence floor
20
+
21
+ > Each channel has a default cadence. If a channel has been silent past its floor, surface a recombination opportunity even with no fresh material.
22
+
23
+ **Defaults (v1 hardcoded; per-venture override via config):**
24
+
25
+ | Channel | Floor |
26
+ |---|---|
27
+ | X | 1 day (silent >1d → opportunity) |
28
+ | Newsletter | 7 days (silent >7d → opportunity) |
29
+ | Blog | 14 days (silent >14d → opportunity) |
30
+
31
+ **Mechanism:**
32
+ - For each venture × channel pair in `channels_per_venture`:
33
+ - Read activity map → days since last post.
34
+ - If days > floor: emit an opportunity tagged "cadence-floor: recombine."
35
+ - Source material for a cadence-floor opportunity = the most recent un-content'd dailies for that venture, OR the freshest weekly's through-line. The writer ideates from there.
36
+ - Cadence-floor opportunities rank below source-farmer opportunities at the same tier (recombination is lower-energy than net-new).
37
+
38
+ **Personal / Meta_Trav** is a venture too (cadence floor applies even when no product venture has anything to ship).
39
+
40
+ ## Rule 3 — Tier prioritization
41
+
42
+ > Tier S/A ventures' opportunities outrank tier B/C, regardless of rule that produced them.
43
+
44
+ **Mechanism:**
45
+ - Read `docs/strategy/focus.md`. Parse the tier table — venture → tier (Foundation / Tier 1 / Tier 2 / Tier 3 / backburner).
46
+ - Tier weight: Foundation = 4, Tier 1 = 3, Tier 2 = 2, Tier 3 = 1, backburner = 0 (excluded entirely).
47
+ - Final rank = `tier_weight × rule_score`, where rule_score is:
48
+ - Source-farmer: 3
49
+ - Cadence-floor on a channel with a fresh daily pattern: 2
50
+ - Cadence-floor pure (no fresh material, pure recombination): 1
51
+ - Ties broken by: most recent ship-event first, then alphabetical venture.
52
+
53
+ **Edge case:** if `focus.md` is missing, all ventures get tier weight 1 (flat). Surface a warning that prioritization is disabled.
54
+
55
+ ## Rule 4 — Anti-duplication & cross-format
56
+
57
+ > If a topic was shipped recently on channel X, don't propose a duplicate; propose a cross-format on channel Y.
58
+
59
+ **Mechanism:**
60
+ - For each candidate opportunity:
61
+ - Compare its source-material topic (ship content, daily excerpt, weekly through-line) to the venture's activity map across ALL channels in the last 14d.
62
+ - If a match exists on channel X and the candidate's channel is X → suppress.
63
+ - If a match exists on channel X and the candidate's channel is Y → keep, but tag as "cross-format: <X> → <Y> rehash."
64
+ - Also check OpenWriter in-flight drafts. A draft on the topic = suppression regardless of channel (the user is already writing it).
65
+
66
+ **Cross-format laddering** (preferred direction): X thread → newsletter expansion → blog deep dive. A blog post on a topic doesn't trigger a thread proposal unless the original X coverage is missing. This avoids retreading.
67
+
68
+ ## Rule 5 — Audience fit
69
+
70
+ > Each candidate opportunity is scored against the venture's ICP doc. Strong fit boosts; weak fit attenuates.
71
+
72
+ **Mechanism:**
73
+ - For each candidate opportunity, read the venture's ICP via the pointer in
74
+ `icp_per_venture[venture]` (set during setup Step 4.5). The pointer resolves
75
+ to either an OpenWriter doc (`openwriter:<docId>`) or a local file
76
+ (`file:<absolute-path>`).
77
+ - Compare the candidate's source material against two ICP fields:
78
+ - **Recognition shock** — does the material mirror the ICP's current state /
79
+ pain back to them in a way they'd recognize as their own?
80
+ - **Actionable this week** — does it give them something they can do this
81
+ week, not abstract framing?
82
+ - Score:
83
+ - Strong fit (both signals present): `audience_fit = 1.5`
84
+ - Default (one signal or ambiguous): `audience_fit = 1.0`
85
+ - Weak fit (neither signal, or material contradicts ICP failure-mode): `audience_fit = 0.5`
86
+ - Final rank from Rule 3 is multiplied by `audience_fit`.
87
+ - If `icp_per_venture[venture]` is missing or the pointer fails to resolve, default to `1.0` and surface a warning that audience fit is disabled for that venture.
88
+
89
+ **Why last:** the first four rules are mechanical (data-derived). Audience fit
90
+ needs the ICP doc as input. Without it, the rule is a no-op — so the advisor
91
+ still produces a usable list even when ICP setup was skipped.
92
+
93
+ ## Composition
94
+
95
+ Each candidate opportunity object goes through all five rules in order:
96
+
97
+ ```
98
+ candidate = { venture, channel, source_material, rule_triggered, rule_score }
99
+ → rule 4 → drop if duplicate, tag if cross-format
100
+ → rule 3 → multiply by tier_weight, drop if backburner
101
+ → rule 5 → multiply by audience_fit (1.5 / 1.0 / 0.5)
102
+ → final_rank = tier_weight × rule_score × audience_fit
103
+ sorted desc by final_rank, capped at 10
104
+ ```
105
+
106
+ The output stage (`output-format.md`) renders this ranked list.
107
+
108
+ ## Mechanical vs. judgment
109
+
110
+ All five rules are **mechanical** — derived from data and the ICP doc, no user confirm at rank time. The only judgment call is the user's pick at the end ("which one of these do I want to write?"). Advisor never writes to disk in v1 (beyond config and an optional session log if added later).
111
+
112
+ ## v1 scope discipline
113
+
114
+ The rules are deliberately blunt. Future refinements (semantic topic matching, audience-resonance weighting from past post engagement, A/B angle suggestions) belong in later versions. The v1 goal is: produce a list the user looks at and says "yes, that's roughly the right next thing."
@@ -0,0 +1,116 @@
1
+ # Episodic Memory Queries — The Load-Bearing Doc
2
+
3
+ This is the heart of the advisor. Every content opportunity ultimately traces back to a memory row (or the conspicuous absence of one). Get this layer wrong and the rest of the skill ships noise.
4
+
5
+ ## What we read and why
6
+
7
+ | Shape | Why it matters | Default window |
8
+ |---|---|---|
9
+ | **`ship-event`** | Highest-signal rows. Each is an explicit "we shipped X" moment — exactly the kind of thing the source-farmer rule wants to convert into content. Carries `artifactType`/`artifactId`/`artifactUrl` for direct linking. | **last 30d** — long enough to catch ships that still haven't been content'd; short enough that we're not raising stale news. |
10
+ | **`daily`** | The strategic context layer. Per-venture per-day summary of what the user did. Surfaces angles that aren't ship-events: decisions, lessons, recurring themes, customer interactions. | **last 14d** — two weeks is the recall window for "this happened recently enough to be timely." |
11
+ | **`weekly`** | The through-line. One row summarizes a whole week. Used to detect *patterns* (three dailies in a row touched topic Y → that's a theme worth a newsletter). | **last 4 weeks** |
12
+ | **`turn`** | Per-conversation-turn. Noisy. **Fallback only** — when a project hasn't crystallized a daily/weekly yet (new project, low activity, compaction lag). Surface a warning when used. | **last 7d** (fallback only) |
13
+
14
+ **Forbidden values:** `episodic-daily`, `episodic-weekly`. Those silently return zero rows. Earlier docs (including business-advisor's `greprag-query.md`) reference them — they are wrong. Use `daily` / `weekly`.
15
+
16
+ ## The API
17
+
18
+ ```
19
+ GET https://api.greprag.com/v1/memory/by-period
20
+ Authorization: Bearer ${GREPRAG_API_KEY}
21
+ ```
22
+
23
+ Required params: `projectId`, `from` (ISO), `to` (ISO), `type` (one of: `turn`, `hourly`, `daily`, `weekly`, `ship-event`). Optional: `limit` (default 100).
24
+
25
+ **One shape per call.** If we want ship-events + dailies + weeklies for a project, that's three calls.
26
+
27
+ Response (truncated):
28
+ ```json
29
+ {
30
+ "ok": true,
31
+ "count": N,
32
+ "memories": [
33
+ {
34
+ "id": "<uuid>",
35
+ "projectId": "<uuid>",
36
+ "projectName": "openwriter",
37
+ "crystallization": "ship-event",
38
+ "content": "...",
39
+ "windowStart": "...",
40
+ "windowEnd": "...",
41
+ "artifactType": "git-commit",
42
+ "artifactId": "abc123",
43
+ "artifactUrl": "https://github.com/..."
44
+ }
45
+ ]
46
+ }
47
+ ```
48
+
49
+ ## Cross-venture aggregation algorithm
50
+
51
+ ```
52
+ 1. greprag discover --json
53
+ → list of { id, name, anchor, row_counts, first_activity, last_activity }
54
+ → filter: skip projects with last_activity > 60d old (dead)
55
+ → skip projects whose row_counts show all zeros for daily/weekly/ship-event
56
+ 2. For each remaining project:
57
+ → fan out 3 parallel curls:
58
+ ship-event from=now-30d to=now+1d limit=100
59
+ daily from=now-14d to=now+1d limit=50
60
+ weekly from=now-28d to=now+1d limit=10
61
+ → if daily count = 0 AND ship-event count = 0:
62
+ fallback: turn from=now-7d to=now+1d limit=200 (mark venture as "fallback turns")
63
+ 3. Map projectName → venture via config `project_to_venture`
64
+ → unknown projectName → ask user once, persist to config, continue
65
+ 4. Aggregate per venture:
66
+ buckets[venture] = {
67
+ ships: [...], // dedup by id across multiple projects under one venture
68
+ dailies: [...],
69
+ weeklies: [...],
70
+ fallback_warning: bool
71
+ }
72
+ 5. Hand buckets to decision-rules layer
73
+ ```
74
+
75
+ ## Window rationale
76
+
77
+ The 30/14/4 windows were chosen so each shape's row count stays under ~50 per project in normal use (cheap aggregation), while the windows nest cleanly: weekly subsumes dailies subsumes ship-events. A pattern surfaced by a weekly row should be traceable back through its constituent dailies and ships.
78
+
79
+ Per-venture overrides allowed via config (`cadence_overrides`) for ventures that ship faster (longer window = noise) or slower (longer window = needed to find anything).
80
+
81
+ ## Failure modes (per project)
82
+
83
+ - **HTTP 401** → API key invalid or expired. Abort the whole pass, surface to user.
84
+ - **HTTP 404** → projectId not registered. Skip project, warn.
85
+ - **HTTP 5xx** → transient. Retry once with 2s backoff. Then skip and warn.
86
+ - **Network timeout (10s)** → skip and warn.
87
+ - **Empty memories array** → not a failure. Record as "silent" — feeds the cadence-floor rule.
88
+
89
+ Never abort the whole pass for one project's failure. The user wants the cross-portfolio view even if one project is broken.
90
+
91
+ ## Memory row → opportunity (preview — full rules in `decision-rules.md`)
92
+
93
+ - **ship-event** with no matching content in the same window → source-farmer opportunity. Channel choice depends on `channels_per_venture` + cadence state.
94
+ - **daily** mentioning a recurring topic across 3+ days → pattern opportunity, prefer newsletter or blog (long-form synthesis).
95
+ - **weekly** summary stating a strategic shift → angle for a thought-piece, prefer blog or X article.
96
+ - **silence** (no rows in window past a channel's cadence floor) → recombination opportunity, surface even without new material.
97
+
98
+ ## Sample one-shot for a project (Bash)
99
+
100
+ ```bash
101
+ PROJECT_ID="<uuid from greprag discover>"
102
+ TO=$(node -e "console.log(new Date(Date.now()+86400000).toISOString().slice(0,10))")
103
+ FROM_SHIPS=$(node -e "console.log(new Date(Date.now()-30*86400000).toISOString().slice(0,10))")
104
+ FROM_DAILY=$(node -e "console.log(new Date(Date.now()-14*86400000).toISOString().slice(0,10))")
105
+ FROM_WEEKLY=$(node -e "console.log(new Date(Date.now()-28*86400000).toISOString().slice(0,10))")
106
+
107
+ for SHAPE_FROM in "ship-event:$FROM_SHIPS" "daily:$FROM_DAILY" "weekly:$FROM_WEEKLY"; do
108
+ TYPE="${SHAPE_FROM%%:*}"
109
+ FROM="${SHAPE_FROM##*:}"
110
+ curl -sf -H "Authorization: Bearer $GREPRAG_API_KEY" \
111
+ "https://api.greprag.com/v1/memory/by-period?projectId=$PROJECT_ID&from=$FROM&to=$TO&type=$TYPE&limit=100" \
112
+ > "/tmp/$TYPE-$PROJECT_ID.json"
113
+ done
114
+ ```
115
+
116
+ Fan out across projects in parallel via `xargs -P` or by running the curls in a Bash `&` group.