mirror of
https://github.com/multica-ai/multica.git
synced 2026-07-23 10:08:38 +02:00
This is the structural prep PR for the runtime-brief diet roadmap on MUL-3560 — split out from the per-section compression work so the refactor risk and the content-gating risk land separately. Output is byte-for-byte identical to the pre-refactor monolithic builder for every existing test fixture. All existing tests pass unchanged. The follow-up PR (0.6) will start gating sections per the Section × Kind matrix from Eve's design comment on MUL-3560 (drop Mentions / Comment Formatting / Issue Metadata / Sub-issue out of quick-create, drop Comment Formatting / Mentions / Attachments out of autopilot and chat, etc.), with negative assertions added alongside each removal so each kind's brief contract becomes machine-checked. What changed: - runtime_config_kind.go (new): taskKind enum + classifyTask helper. Five kinds, mutually exclusive in practice; the documented precedence rule keeps the tiebreak deterministic even if a future caller breaks the mutex by accident. hasIssueContext is the predicate Issue Metadata and Sub-issue Creation gate on. - runtime_config_sections.go (new): every section of the brief is extracted into its own writeXxx helper, preserving byte sequences exactly. Helpers with internal conditions keep those conditions; helpers the dispatcher always wants to call are unconditional. - runtime_config.go: buildMetaSkillContent collapses from a ~450-line monolith to a ~70-line dispatcher — prelude, conditional context sections, a 5-way kind switch over Workflow bodies, and trailing sections. The matrix of "which kind gets which section" is now readable in one screen. - runtime_config_kind_test.go (new): TestClassifyTask covers all 5 kinds plus tiebreak cases; TestTaskKindHasIssueContext pins the predicate semantics; TestBuildMetaSkillContentKindMatrix is the structural canary that locks today's per-kind section set so any later PR that drops a section from a kind must update its expectations in lockstep. Verification: - go build ./... ok - go vet ./internal/daemon/... ok - go test ./internal/daemon/... ./internal/handler/... ok - go test ./internal/daemon/execenv -run TestClassifyTask -v pass - go test ./internal/daemon/execenv -run TestTaskKindHasIssueContext pass - go test ./internal/daemon/execenv -run TestBuildMetaSkillContent pass No production behaviour change in this PR. No new logging, no new char-bucket fields — those are in PR #4439 and compose cleanly with this refactor. Co-authored-by: multica-agent <github@multica.ai>