Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ this project adheres to [Semantic Versioning](https://semver.org/).
- **Action-items prioritization + task-query hardening** (`phases/core/action-items.md`) — two rules upstreamed from accumulated instance experience: a **Deadline-Distance Ceiling** (urgency is *capped* by deadline distance — 30+ days → 🟢 max, 7–30 → 🟡 max, <7 → eligible for 🔴, <3 → 🔴 when the next action is the user's; evaluate the real deadline, never the source's alarm-word tone; deprecation notices stay 🟢 until ~2–3 weeks out), and a **terminal-status filter on the ontology task query** (`query --type task --exclude-status "completed,cancelled"` instead of a bare query, so completed/cancelled task entities stop resurfacing as open work; documents the supported `--domain` / `--status` / `--deadline-before` filters).
- **KB-management hardening** (`phases/core/kb-management.md`) — three rules upstreamed from accumulated instance experience: **Never Guess a Name or Acronym Expansion** (cite the full form from a primary source or leave it abbreviated `[unverified]` — never invent a plausible expansion, which reads as fact and propagates); an **entity-creation trigger** (mint a new entity file when a person/org/technology recurs across 3+ independent sources — enriching existing files is not a substitute for creating missing ones); and **staleness-observability + search-depth** freshness rules (every file carries a machine-readable `last_updated:` so a scan can rank and a driver can queue stale files — opportunistic-only refresh lets the long tail rot; and don't scope completeness searches to a fixed channel set / `from:me` filters — a known-to-exist fact your scan missed is a search-depth miss, not an absence).
- **Granola deliverable-invention gate** (`phases/connectors/granola.md`) — a rule upstreamed from accumulated instance experience: a dated commitment or deliverable extracted from a transcript needs a **verbatim source quote** or it's dropped — never attach an urgency marker ("due Friday", "committed to X") the transcript doesn't literally contain; ship without the marker or route to the review queue. Guards two invention traps: topic conflation (don't fuse two adjacent meeting topics into one dated item) and one-off-as-standing (a single mention is not a recurring cadence).
- **Slack notification refinements** (`phases/connectors/slack.md`) — two rules upstreamed from accumulated instance experience: **lead the briefing wrap-DM with a "Today's Focus" continuity line** (open with the throughline from recent work to today, before the counts — counts say *how much*, not *what to care about first*); and a **Slack-renderable link refinement** to the existing DM-legibility rule (Slack does not auto-linkify custom URL schemes like `obsidian://` / `file://` — wrap them in mrkdwn angle-bracket form `<url|label>`; GFM `[label](url)` also fails for custom schemes — a clickable-link fix only lands when the link renders in the destination's markup dialect).

## [0.7.2] - 2026-06-22

Expand Down
5 changes: 4 additions & 1 deletion phases/connectors/slack.md
Original file line number Diff line number Diff line change
Expand Up @@ -216,13 +216,16 @@ Slightly more detail. Example format:

```
Scout morning briefing ready.
*Today's focus:* [the 1–2 things today is really about — the throughline from recent work to now]
- Today's meetings: [count] ([first meeting time])
- Action items: X urgent, Y to-do, Z watching
- New since yesterday: [brief summary of new items]
- KB areas updated: [list]
- Review queue: [count] items pending your review
```

**Lead the briefing DM with a continuity line.** A briefing wrap-DM must **open with a one-line "Today's Focus" continuity statement** that connects recent work to what matters today — *before* the counts and lists. Counts ("3 urgent, 5 to-do") tell {{USER_NAME}} *how much* without telling him *what to care about first*; the action-items file already carries this throughline, and the DM is where it most needs to surface. Lead with the one or two things today is really about, then the breakdown.

### Sources-Checked Footer

End every consolidation/briefing notification with a one-line transparency footer stating what was actually scanned, so coverage is auditable and "quiet" claims are backed by evidence:
Expand All @@ -238,7 +241,7 @@ Only count sources you genuinely queried this run. A "quiet window" claim must b
Applies to every wrap DM. Two parts:

1. **No bare internal `#SHORTCODE` tags in the user-facing DM.** Action-items use `#SHORTCODE` tags as an *internal* continuity-keying convention (they match an item across daily files); they mean nothing to the reader as bare tokens. Either **expand inline** — `*semantic-layer weekly update* (#TAG)` or just the plain-English label — or **drop the tag from the DM**. A DM line whose only handle on an item is a bare `#CODE` is forbidden: the reader must understand it from plain English. The file-side `#SHORTCODE` machinery is untouched — this is presentation-layer only.
2. **Link the action-items file.** Any wrap DM that references "today's list" / action items must include a clickable link to today's file — an Obsidian URI `obsidian://open?vault={{INSTANCE_NAME}}&file=action-items%2Faction-items-<YYYY-MM-DD>` and/or a `file://{{SCOUT_DIR}}/action-items/action-items-<YYYY-MM-DD>.md` — so a tap opens the list.
2. **Link the action-items file — and write the link so Slack renders it.** Any wrap DM that references "today's list" / action items must include a clickable link to today's file. **Slack does not auto-linkify custom URL schemes** (`obsidian://`, `file://`) — a bare `obsidian://open?…` pasted into a DM renders as inert text, not a link. Wrap it in Slack mrkdwn angle-bracket syntax with a label: `<obsidian://open?vault={{INSTANCE_NAME}}&file=action-items%2Faction-items-<YYYY-MM-DD>|Today's list>` (or `<file://{{SCOUT_DIR}}/action-items/action-items-<YYYY-MM-DD>.md|Today's list>`). GitHub-flavored `[label](url)` **also** fails for custom schemes in the Slack renderer; only `http(s)://` / `mailto:` auto-link when bare. The principle generalizes: a "make it clickable" fix is only delivered when the link actually renders clickable in the **destination surface's markup dialect** — Slack mrkdwn ≠ GFM ≠ bare-URL auto-linking.

### Notification Rules

Expand Down
Loading