Commit 3f09335
authored
feat(v3r2): Wave 3 — Permission Stack, MX TAG v2, Hook Handler, Constitution Pipeline (#741)
* feat(v3r2): Wave 1+2 Bundle — Constitution + Runtime Foundation
Wave 1 — Constitution Foundation (CON-002, CON-003, SPC-001):
- CON-002: 5-layer amendment safety gate (frozen guard, canary check,
contradiction detector, rate limiter, human oversight)
- CON-003: Rule tree consolidation (merge 4 deleted files, relocate
content, frontmatter migration)
- SPC-001: EARS hierarchical acceptance criteria parser with spec
linter subcommand
Wave 2 — Runtime Core (RT-005, RT-001, RT-004):
- RT-005: Multi-layer settings resolution with provenance tags
(8-source priority stack: policy > user > project > local >
plugin > skill > session > builtin)
- RT-001: Hook JSON-OR-ExitCode dual protocol (HookResponse schema,
structured output for all 27 hook events)
- RT-004: Typed session state with phase checkpoints and
resumable permission context
Supporting changes:
- Template mirrors for all rules/skills changes
- LSP client decision document
- Master wave plan document
- CLI subcommands: constitution, spec lint/view, state, doctor config
🤖 MoAI <email@mo.ai.kr>
* feat(runtime): SPEC-V3R2-RT-002 Permission Stack + Bubble Mode 구현
8-소스 Permission Stack (SrcPolicy > SrcUser > SrcProject > SrcLocal >
SrcPlugin > SrcSkill > SrcSession > SrcBuiltin) + 5 PermissionMode
(Default, AcceptEdits, BypassPermissions, Plan, Bubble) + BubbleDispatcher
for fork agent AskUserQuestion routing + moai doctor permission 서브커맨드
🧪 AC 15개 전체 통과 · 📦 7 files · 📊 ~750 LOC
🗿 MoAI <email@mo.ai.kr>
* feat(spc): SPEC-V3R2-SPC-002 @mx TAG v2 — Sidecar Index + TagScanner 구현
16-언어 TagScanner (Go/Python/TypeScript/Rust/Java/Kotlin/C#/Ruby/PHP/
Elixir/C++/Scala/R/Dart/Swift) + JSON sidecar 인덱스 (.moai/state/
mx-index.json) + 원자적 쓰기 (temp+rename) + 7일 TTL 만료 아카이빙 +
AnchorID resolver API (SPC-004 placeholder)
🧪 AC 15개 전체 통과 · 📦 9 files · 📊 ~800 LOC
🗿 MoAI <email@mo.ai.kr>
* feat(runtime): SPEC-V3R2-RT-006 Hook Handler 27-Event Coverage + P-H02 CRITICAL 수정
5 UPGRADE: subagentStop (P-H02 tmux pane 누수 수정), postToolUseFailure
(에러 분류 7종), instructionsLoaded (40K char budget), fileChanged
(MX re-scan 16언어), configChange (YAML validation reload)
1 REMOVE: setup.go orphan 삭제
4 RETIRE-OBS-ONLY: notification/elicitation/elicitationResult/taskCreated
신규 audit_test.go: 핸들러 수 패리티 + retired event 검증
🧪 AC 17개 전체 통과 · 📦 18 files · 📊 ~1,000 LOC
🗿 MoAI <email@mo.ai.kr>
* fix(lint): golangci-lint 20개 이슈 수정 (errcheck/staticcheck/unused)
- errcheck: defer f.Close(), os.Remove(), json.Unmarshal 등 반환값 검사 추가
- ST1005: 에러 문자열 첫 글자 소문자화 (Layer → layer)
- SA9003: 빈 분기 제거 (isFork bypass 로직 코멘트로 대체)
- QF1003: if/else → tagged switch 전환
- unused: parseScoreFromProgress에 nolint 지시어 추가 (TODO 예약)
- unused: evolutionLogPath 인라인 처리
🗿 MoAI <email@mo.ai.kr>1 parent 7e098ee commit 3f09335
112 files changed
Lines changed: 13913 additions & 941 deletions
File tree
- .claude
- rules/moai
- core
- development
- workflow
- skills/moai
- references
- workflows
- .moai
- decisions
- plans
- internal
- cli
- config
- constitution
- hook
- mx
- permission
- session
- spec
- template/templates
- .claude
- rules/moai
- core
- development
- workflow
- skills/moai
- references
- workflows
- .moai/decisions
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
3 | | - | |
| 2 | + | |
4 | 3 | | |
5 | 4 | | |
6 | 5 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
3 | | - | |
| 2 | + | |
4 | 3 | | |
5 | 4 | | |
6 | 5 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
73 | 73 | | |
74 | 74 | | |
75 | 75 | | |
76 | | - | |
| 76 | + | |
77 | 77 | | |
78 | 78 | | |
79 | 79 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
48 | | - | |
49 | | - | |
50 | | - | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
51 | 97 | | |
52 | 98 | | |
53 | 99 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
This file was deleted.
This file was deleted.
0 commit comments