feat(skills): author the Continuous Research skills, and make its roles honest
The boot log has said `continuous_research — 4 role skills bound, 8 unresolved`
on every start. Those eight roles ran without the instructions their template
promised them, silently: `skills_loader` reports the miss and carries on.
Worse than the missing files was what the prompts described. v1 told the
harvester to sweep "RSS feeds, GitHub trending, HN front page, YouTube /
podcast RSS" — none of which exist. `harvest.rs` searches arXiv and nothing
else. A role prompt describing a machine that was never built is the failure
this codebase keeps paying for, so v2 describes the machine that exists.
Roles now match the pipeline: paper_reader (the harvest already ran; read the
manifest and the papers), signal_ranker (unchanged in spirit), script_writer
(the podcast half, which had no role at all).
Seven skills authored under skills/research/, kebab-case to match the loader —
team_template_loader.rs:177-181 documents the snake_case/kebab-case trap that
already unbinds skills elsewhere:
arxiv-daily what the harvest guarantees, so an agent does
NOT re-search arXiv and corrupt the seen-set
paper-to-project-relevance name a file or roadmap item, or say "no bearing"
duplicate-detection the seen-set catches identity; this catches the
same work under a different id
signal-to-noise-ranking novelty/relevance/depth, and the two biases to
resist (recency up, inconvenience down)
executive-summary-writing what it is / why it matters / what to do — decide,
do not hedge
obsidian-vault-conventions the vault is a human's live workspace; never
main, never reorganise, hash the body not the file
podcast-dialogue-writing write for someone on a treadmill; the 10-70 char
highlight bound is the API's, not a style rule
`web_fetch` dropped from mcp_bundles: runtime_provision.rs binds every mission
claw to `["clawmates_door"]` and never reads that field, so declaring it
instructed roles to use a tool that never arrived. The prompts say `curl` via
Bash, which is what they actually have.
Boot now reports `continuous_research — 11 role skills bound`, with no
unresolved clause. 344 tests pass.
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5
parent
e20b321055
commit
a2d7e3ea92
@@ -0,0 +1,60 @@
|
||||
---
|
||||
name: obsidian-vault-conventions
|
||||
description: Writing into a live Obsidian vault a human also edits — frontmatter, links, paths, and what never to touch.
|
||||
when_to_use: You are committing notes, digests or scripts into the valhalla-vault repository.
|
||||
tags: [research, conventions]
|
||||
---
|
||||
|
||||
# The vault is somebody's live workspace
|
||||
|
||||
`valhalla-vault` is a real Obsidian vault a human edits and syncs continuously.
|
||||
It is not scratch space. Two consequences drive everything below.
|
||||
|
||||
## Never commit to `main`
|
||||
|
||||
Mission work lands on the run's own branch. `library.rs` does this deliberately
|
||||
and only auto-merges when the change is provably additive — every file in
|
||||
`git diff --name-status base...branch` is an `A`. A rename or a delete is not
|
||||
additive and stops the merge.
|
||||
|
||||
That rule protects the human: an auto-merge can add a note beside their work,
|
||||
never rewrite it.
|
||||
|
||||
## Stay in your folders
|
||||
|
||||
```
|
||||
60 Papers/arxiv-<id>.md one note per paper, written by the harvest
|
||||
ContinuousResearch/<date>/... one folder per run — yours
|
||||
```
|
||||
|
||||
Do not reorganise, rename or "tidy" anything outside those. What looks like a
|
||||
stray file is usually load-bearing in someone's graph.
|
||||
|
||||
## Frontmatter is the index
|
||||
|
||||
Obsidian queries it, so it must be parseable YAML and keys must stay stable:
|
||||
|
||||
```yaml
|
||||
---
|
||||
date: 2026-08-17
|
||||
type: research-digest
|
||||
harvested: 23
|
||||
surfaced: 4
|
||||
---
|
||||
```
|
||||
|
||||
**Hash the body, not the file.** Sync rewrites `updated:` and `size_kb:` on
|
||||
notes it touches; hashing the whole file reports phantom edits on notes nobody
|
||||
changed and makes "unchanged" meaningless.
|
||||
|
||||
## Links
|
||||
|
||||
`[[wikilinks]]` are the vault's native form — use them for internal references,
|
||||
plain markdown links for external URLs. A link to a note that does not exist yet
|
||||
is fine and idiomatic: it marks something worth writing.
|
||||
|
||||
## `source:` is not identity
|
||||
|
||||
The vault uses `source:` for local provenance — often a path like
|
||||
`/Users/…/Downloads/paper.pdf`. It is not a citable identifier and must never be
|
||||
used as a dedup key. Identity is `arxiv:<id>`, version suffix stripped.
|
||||
Reference in New Issue
Block a user