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
19 changes: 19 additions & 0 deletions REVIEW.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,22 @@ node tools/agent-radio.mjs send planning "found @codex" --mention @codex

---
*Teams can give feedback at https://github.com/anomalyco/opencode mentioning Meta Muse Spark. Model: `muse-spark-1.2-contributor-free` (opencode/muse-spark-1.2-contributor-free), Today 2026-08-26, Platform linux, Tools bash/read/edit/write/glob/grep/task*

---

## v0.5 후기 — 6점 비전을 스스로 구현해보며

외부 리뷰(아키텍처 8.1, 검색 6.5)와 두 AI 테스터의 스트레스 리포트를 받고, 여섯 방향을 전부 "지금" 하지는 않았다. 판정 기준은 하나였다 — **zero-install·0-LLM 철학을 깨는가?**

| 방향 | 판정 | 이유 |
|---|---|---|
| 의미 검색 | 부분 | 동의어 확장+BM25-lite로 recall을 먼저 올리고, 임베딩은 opt-in 어댑터로. 미설치면 실행조차 안 함 — `router.semantic: unavailable`이 그 증거 |
| 자동 관찰 | 채택 | 단, **후보만** 자동 생성(proposed/observed). 결론 없는 자동 기억은 오염이므로 promote 게이트를 뒀다. 실측: 7일 커밋에서 12건 후보 |
| 지식 그래프 | 기반 | related[]→인과 엣지 1-hop 유추까지. supersedes 체인은 P1 |
| 작업 성공률 | 프록시 | retrieval 정확도 하네스까지만. 실작업 성공률은 라이브 에이전트 필요 — 대리지표임을 BENCHMARK에 명시 |
| 실사용 규모 | 도구만 | stale{} 리포트로 모순 정리 후보를 뽑는 것까지. 답은 시간 |
| SQLite | 채택 | Node ≥22.5 내장 node:sqlite — **npm install 0** 으로 FTS5. 미지원은 폴백 안내 |

**가장 값진 배움**: e2e-workflow 테스트가 search-lite의 `hit` 필드 누락 버그를 잡아냈다. 개별 도구 테스트만으로는 조합 결함이 절대 안 보였다. "기능 추가 < 조합 검증"을 CI에 박아둔 것이 이번 최대 수확.

**다음 에이전트에게**: `node tools/ac-watch.mjs --since "1 day ago"` 로 시작해 후보를 승격·보강하는 것이 가장 저비용인 기여 경로다.
30 changes: 0 additions & 30 deletions agent-context/.candidates/ea300c8755-work-history.md

This file was deleted.

2 changes: 1 addition & 1 deletion agent-context/graph.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"version": 1,
"generated_at": "2026-08-26T11:58:03.544Z",
"generated_at": "2026-08-26T12:27:23.185Z",
"_path": "agent-context/graph.json",
"description": "기능 연관 그래프 — depends_on/affects로 영향 범위 추적. agent-context.config.json graph.edges로부터 생성됨.",
"graph": {
Expand Down
31 changes: 27 additions & 4 deletions agent-context/index.json
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
{
"version": 1,
"generated_at": "2026-08-26T11:58:03.541Z",
"generated_at": "2026-08-26T12:27:23.182Z",
"generated_by": "agent-context-index.mjs",
"_path": "agent-context/index.json",
"description": "L1 압축 카탈로그 — 저용량 에이전트가 가장 먼저 읽는 파일. preview 60자 + summary 120자로 본문 Read 없이 관련성 판단.",
"soft_limits": {
"soft_limit_chars": 200000,
"max_entries": 1000,
"should_compress": false,
"total_chars": 1953,
"total_entries": 3
"total_chars": 2345,
"total_entries": 4
},
"counts": {
"note": 1,
"learning": 1,
"handoff": 1,
"total": 3
"issue": 1,
"total": 4
},
"entries": [
{
Expand Down Expand Up @@ -86,6 +87,28 @@
"related": [],
"affects": [],
"chars": 1117
},
{
"id": "issue-20260826-b48a3b55",
"type": "issue",
"level": "diary",
"title": "login 500 on refresh",
"tags": [
"issue"
],
"feature": "auth",
"scope": "global",
"agent": "system",
"created": "2026-08-26T11:23:08.632Z",
"updated": "2026-08-26T11:23:08.632Z",
"status": "done",
"priority": 4,
"summary": "login 500 on refresh",
"preview": "login 500 on refresh",
"path": "bugs/2026-08-26-login-500-on-refresh--system.md",
"related": [],
"affects": [],
"chars": 392
}
],
"knowledge": {
Expand Down
2 changes: 1 addition & 1 deletion docs/hierarchy.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

## 유동적·능동적 배정

- **고정 아님**: `type`은 `issue|work-history|idea|overall-flow` 등 **자유 문자열** (`schema.json: type pattern ^[a-z0-9-]+$`), `feature`도 자유. 제안된 9개는 예시일 뿐 강제 아님 (`typesFluid: true`).
- **고정 아님**: `type`은 `issue|work-history|idea|overall-flow` 등 **자유 문자열** (`schema.json: type pattern ^[a-z0-9-]+$`), `feature`도 자유. 제안된 9개는 예시일 뿐 강제 아님 (`typesFluid: true` — v0.4.1부터 index --init·validator가 실제로 이 값을 읽어 schema type을 pattern 기반으로 생성/통과시킨다).
- **능동 배정**: `level`은 에이전트가 직접 정하거나, 비우면 **가벼운 AI가 자동 배정** (`hierarchy.autoAssign: true`, `search.lightweightAI: auto`)
- 길이 30자 이하 + priority 5 → `post-it`
- 200자 이하 → `memo`
Expand Down
10 changes: 7 additions & 3 deletions tools/ac-watch.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
// node tools/ac-watch.mjs promote <candidate-file> # .candidates → 정식 위치

import { execFileSync } from 'node:child_process';
import { writeFileSync, readFileSync, existsSync, mkdirSync, readdirSync } from 'node:fs';
import { writeFileSync, readFileSync, existsSync, mkdirSync, readdirSync, renameSync } from 'node:fs';
import { join } from 'node:path';

const CONFIG = (() => {
Expand Down Expand Up @@ -104,11 +104,15 @@ if (a[0] === 'promote') {
const dirMap = { learning:'learnings', decision:'decisions', 'work-history':'code-history', bug:'bugs' };
const destDir = join(ROOT, dirMap[m?.[1]] || 'notes');
mkdirSync(destDir,{recursive:true});
const destName = f.replace(/^[\w]+-/, ''); // strip hash prefix
// Issue(자체 테스트) fix: 해시-prefix 제거만 하면 'learning.md'처럼 타입명만 남는 버그.
// frontmatter title에서 slug를 만들고 오늘 날짜를 붙인다.
let title = 'candidate';
try { const t = readFileSync(src,'utf8').match(/title: "([^"]+)"/); if (t) title = t[1]; } catch {}
const slug = String(title).toLowerCase().replace(/[^a-z0-9]+/g,'-').replace(/^-+|-+$/g,'').slice(0,40) || 'entry';
const destName = `${new Date().toISOString().slice(0,10)}-${slug}--promoted.md`;
// move via git mv if tracked, else fs rename
try { execFileSync('git',['mv',src,join(destDir,destName)],{cwd:process.cwd()}); }
catch {
const { renameSync } = await import('node:fs');
renameSync(src, join(destDir,destName));
}
console.log(`promoted → ${join(destDir,destName)} (결론을 채운 뒤 node tools/ac.mjs index)`);
Expand Down
Loading