fix(api,watcher): name the queue, list parked non-markdown, reserved wings, top-level-only frontmatter key; document the inbox (review of #211)
CI / Lint / Test / Vet (pull_request) Successful in 1m2s
CI / Mirror to GitHub (pull_request) Skipped

- brain_promote/brain_reject take an optional queue (inbox | needs-review); a
  name present in both is refused instead of silently acting on the top-level
  note; brain_pending labels every entry with its queue
- parked pdf/txt files are listed (they were invisible); only markdown can be
  promoted, the others are moved or rejected
- promote refuses sources/concepts/entities/wiki as a wing
- frontmatterWing reads only a top-level key inside a properly fenced block
- docs/raw-inbox.md: the contract, the three env vars, the known limits
Each behaviour has a test that fails without it (mutation-checked).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-20 20:34:52 +02:00
co-authored by Claude Sonnet 5.5
parent 6b6d430383
commit 87c40fe364
10 changed files with 316 additions and 47 deletions
@@ -314,3 +314,24 @@ func TestProcessDir_ANoteThatReappearsChangedIsExtractedAgain(t *testing.T) {
assert.Equal(t, int32(2), llmCalls.Load(), "a real edit must still be picked up")
}
func TestFrontmatterWing(t *testing.T) {
tests := []struct {
name, in, want string
}{
{"plain key", "---\nwing: radar\n---\nbody", "radar"},
{"quoted", "---\nwing: \"radar\"\n---\nbody", "radar"},
{"CRLF", "---\r\nwing: radar\r\n---\r\nbody", "radar"},
{"no frontmatter", "wing: radar\nbody", ""},
{"an indented key belongs to another mapping", "---\nmeta:\n wing: radar\n---\nbody", ""},
{"a key before a non-fence dash line is not frontmatter", "---\nwing: radar\n----\nbody", ""},
{"no closing fence", "---\nwing: radar\nbody", ""},
{"closing fence at end of input", "---\nwing: radar\n---", "radar"},
{"another key first", "---\ntitle: x\nwing: radar\n---\nbody", "radar"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
assert.Equal(t, tt.want, frontmatterWing(tt.in))
})
}
}