Steps 266-268: Phase 10a — semantic annotation core + sidecar persistence (32/32 tests)

Step 266: 5 semantic annotation AST types (Intent, Complexity, Risk,
Contract, SemanticTag) with JSON roundtrip and compact AST integration.
Step 267: Sidecar AST persistence (.whetstone/<file>.ast.json) with
save/load/list RPC methods, MCP tools, and permission enforcement.
Step 268: Phase 10a integration tests — multi-file sidecar workflow,
all 5 types in compact view, idempotent roundtrip, source isolation.

Also includes Sprint 10 plan, GUI/installer polish, and Emacs integration fixes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Bill
2026-02-12 16:01:56 +00:00
parent c36fd92045
commit 976161dc4a
36 changed files with 2999 additions and 69 deletions

View File

@@ -118,7 +118,9 @@ inline void EditorState::registerCommands() {
int col = 0;
if (parseLineColInput(arg, line, col)) {
if (active()) {
int totalLines = countLines(active()->editBuf);
int totalLines = 1 + (int)std::count(active()->editBuf.begin(),
active()->editBuf.end(),
'\n');
if (totalLines > 0) line = std::max(1, std::min(line, totalLines));
col = std::max(1, col);
jumpTo(active(), line - 1, col - 1);
@@ -207,7 +209,7 @@ inline void EditorState::registerCommands() {
[this]() { runActiveFile(true); });
}
inline void EditorState::executeCommand(const std::string& id, const std::string& arg = {}) {
inline void EditorState::executeCommand(const std::string& id, const std::string& arg) {
auto it = commandHandlers.find(id);
if (it == commandHandlers.end()) return;
it->second(arg);