gabriel / musehub public
feat BREAKING KD-6b feat/kd-6b #1 / 1
aaronrene · 12 days ago · Jul 10, 2026 · Diff

feat(KD-6b): MuseHub vault UI per frozen §KD-6a

Implement knowtation_view adapter (in-process MCP + gabriel-muse stdio fallback), ui_vault routes, vault landing/note/search templates, KD-2 harmony diff on proposals, vault intel strip, and seven-tier + Playwright tests against knowtation-vault-smoke.

sha256:c04414e7e3b812ff02f351d9792c79837b7841133a864f98fcaeff53a2a4afad sha
+247 ~40 symbols
26 changed · 1048 in snapshot files
sha256:e83f7900257268e72e19a53e983b416cc99f572860d6479ea772b23ea3778760 snapshot
+247
symbols added
~40
symbols modified
26
files changed
1048
files in snapshot
0
dead code introduced
Semantic Changes 287 symbols
+ _VALID_MODES variable variable _VALID_MODES L45–45
+ _adapter_for function function _adapter_for L58–59
+ _require_vault_gate function function _require_vault_gate L48–55
+ create_note_proposal function async_function create_note_proposal L338–390
+ APIRouter import import APIRouter L9–9
+ AsyncSession import import AsyncSession L12–12
+ Depends import import Depends L9–9
+ Form import import Form L9–9
+ HTTPException import import HTTPException L9–9
+ JSONObject import import JSONObject L39–39
+ JSONResponse import import JSONResponse L11–11
+ KnowtationViewAdapter import import KnowtationViewAdapter L29–29
+ MusehubRepo import import MusehubRepo L27–27
+ PathGrammarError import import PathGrammarError L29–29
+ Query import import Query L9–9
+ RedirectResponse import import RedirectResponse L11–11
+ Request import import Request L9–9
+ SEARCH_LIMIT import import SEARCH_LIMIT L28–28
+ SlugParam import import SlugParam L24–24
+ StarletteResponse import import StarletteResponse L13–13
+ TokenClaims import import TokenClaims L25–25
+ VaultUIState import import VaultUIState L29–29
+ _breadcrumbs import import _breadcrumbs L17–17
+ _load_vault_intel_strip import import _load_vault_intel_strip L17–17
+ _og_tags import import _og_tags L17–17
+ _read_note_bytes import import _read_note_bytes L17–17
+ annotations import import annotations L3–3
+ asyncio import import asyncio L5–5
+ frontmatter_panel_html import import frontmatter_panel_html L29–29
+ get_db import import get_db L26–26
+ hashlib import import hashlib L6–6
+ http_status import import http_status L10–10
+ is_htmx import import is_htmx L23–23
+ is_vault_domain_active import import is_vault_domain_active L29–29
+ limiter import import limiter L28–28
+ logging import import logging L7–7
+ optional_token import import optional_token L25–25
+ render_note_html import import render_note_html L29–29
+ resolve_repo_root import import resolve_repo_root L29–29
+ resolve_repo_with_nav import import resolve_repo_with_nav L15–15
+ templates import import templates L16–16
+ validate_note_path import import validate_note_path L29–29
+ logger variable variable logger L41–41
+ note_detail_page function async_function note_detail_page L66–177
+ router variable variable router L43–43
+ vault_graph_fragment function async_function vault_graph_fragment L252–294
+ vault_memory_fragment function async_function vault_memory_fragment L301–331
+ vault_search_page function async_function vault_search_page L185–245
+ __all__ variable variable __all__ L20–36
+ KnowtationViewAdapter import import KnowtationViewAdapter L3–3
+ KnowtationViewResult import import KnowtationViewResult L3–3
+ PathGrammarError import import PathGrammarError L17–17
+ VaultUIState import import VaultUIState L4–4
+ compute_harmony_diff import import compute_harmony_diff L6–6
+ frontmatter_panel_html import import frontmatter_panel_html L11–11
+ harmony_diff_html import import harmony_diff_html L6–6
+ is_vault_domain_active import import is_vault_domain_active L5–5
+ map_mcp_reason import import map_mcp_reason L4–4
+ render_note_html import import render_note_html L11–11
+ render_wikilinks import import render_wikilinks L11–11
+ resolve_repo_root import import resolve_repo_root L18–18
+ split_frontmatter import import split_frontmatter L11–11
+ structured_delta_to_view_model import import structured_delta_to_view_model L6–6
+ validate_note_path import import validate_note_path L17–17
+ KnowtationViewAdapter class class KnowtationViewAdapter L37–312
+ __init__ method method __init__ L40–45
+ _bootstrap_mcp_imports method method _bootstrap_mcp_imports L66–90
+ _init_mcp method method _init_mcp L47–63
+ _parse_resource_response method method _parse_resource_response L129–156
+ _parse_tool_response method method _parse_tool_response L96–127
+ attest_read method method attest_read L280–281
+ call_tool method method call_tool L158–203
+ dead method method dead L274–275
+ get_note method method get_note L259–260
+ history method method history L268–272
+ impact method method impact L262–266
+ load_intel_strip method method load_intel_strip L296–312
+ mounted method method mounted L93–94
+ prime method method prime L277–278
+ propose method method propose L283–294
+ read_resource method method read_resource L205–241
+ search method method search L245–257
+ KnowtationViewResult class class KnowtationViewResult L23–34
+ __post_init__ method method __post_init__ L32–34
+ Any import import Any L9–9
+ JSONObject import import JSONObject L17–17
+ VaultUIState import import VaultUIState L11–11
+ annotations import import annotations L3–3
+ dataclass class import dataclass L8–8
+ field import import field L8–8
+ find_gabriel_muse_root import import find_gabriel_muse_root L12–12
+ json import import json L5–5
+ logging import import logging L6–6
+ map_mcp_reason import import map_mcp_reason L11–11
+ pathlib import import pathlib L7–7
+ read_repo_domain import import read_repo_domain L12–12
+ stdio_jsonrpc import import stdio_jsonrpc L12–12
+ logger variable variable logger L19–19
+ VaultUIState class class VaultUIState L8–21
+ _MCP_REASON_MAP variable variable _MCP_REASON_MAP L24–36
+ StrEnum import import StrEnum L5–5
+ annotations import import annotations L3–3
+ map_mcp_reason function function map_mcp_reason L39–43
+ _KNOWTATION_SLUG variable variable _KNOWTATION_SLUG L8–8
+ JSONObject import import JSONObject L5–5
+ annotations import import annotations L3–3
+ is_vault_domain_active function function is_vault_domain_active L11–23
+ _op_kind function function _op_kind L24–25
+ _op_label function function _op_label L11–21
+ compute_harmony_diff function function compute_harmony_diff L86–94
+ harmony_diff_html function function harmony_diff_html L56–83
+ Any import import Any L6–6
+ JSONObject import import JSONObject L8–8
+ annotations import import annotations L3–3
+ html_mod import import html_mod L5–5
+ structured_delta_to_view_model function function structured_delta_to_view_model L28–53
+ _FRONTMATTER_RE variable variable _FRONTMATTER_RE L11–11
+ _WIKILINK_RE variable variable _WIKILINK_RE L12–12
+ _resolve_wikilink function function _resolve_wikilink L32–54
+ frontmatter_panel_html function function frontmatter_panel_html L79–97
+ Any import import Any L7–7
+ _markdown import import _markdown L9–9
+ annotations import import annotations L3–3
+ html_mod import import html_mod L5–5
+ re import import re L6–6
+ render_note_html function function render_note_html L100–113
+ render_wikilinks function function render_wikilinks L57–76
+ split_frontmatter function function split_frontmatter L15–29
+ PathGrammarError class class PathGrammarError L10–16
+ __init__ method method __init__ L13–16
+ _NOTE_SUFFIXES variable variable _NOTE_SUFFIXES L7–7
+ annotations import import annotations L3–3
+ pathlib import import pathlib L5–5
+ validate_note_path function function validate_note_path L19–29
+ annotations import import annotations L3–3
+ pathlib import import pathlib L5–5
+ settings import import settings L7–7
+ resolve_repo_root function function resolve_repo_root L10–13
+ find_gabriel_muse_root function function find_gabriel_muse_root L16–25
+ Any import import Any L11–11
+ annotations import import annotations L3–3
+ json import import json L5–5
+ logging import import logging L6–6
+ os import import os L7–7
+ pathlib import import pathlib L8–8
+ subprocess import import subprocess L9–9
+ sys import import sys L10–10
+ logger variable variable logger L13–13
+ read_repo_domain function function read_repo_domain L28–37
+ stdio_jsonrpc function function stdio_jsonrpc L40–79
+ article@41 section article@41 L41–43
+ aside@27 section aside@27 L27–39
+ aside@45 section aside@45 L45–95
+ form: Propose edit section form: Propose edit L81–94
+ rsplit('/', 1)[-1] }} section h1: {{ note.frontmatter.title or note.path.rsplit('/', 1)[-1] }} L16–16
+ h2: History section h2: History L60–60
+ h2: Links section h2: Links L47–47
+ h2: Outline section h2: Outline L31–31
+ h2: Propose edit section h2: Propose edit L82–82
+ h2: Provenance section h2: Provenance L73–73
+ rsplit('/', 1)[-1] }} section header: {{ note.frontmatter.title or note.path.rsplit('/', 1)[-1] }} L15–20
+ input[path] section input[path] L83–84
+ input[title] section input[title] L84–84
+ section: History section section: History L59–70
+ section: Links section section: Links L46–57
+ section: Outline section section: Outline L30–37
+ section: Provenance section section: Provenance L72–79
+ h2: Dead notes section h2: Dead notes L47–47
+ h2: Recent memory section h2: Recent memory L36–36
+ h2: Resume here section h2: Resume here L20–20
+ section: Dead notes section section: Dead notes L46–49
+ section: Recent memory section section: Recent memory L35–42
+ section[Resume here] section section[Resume here] L19–28
+ form@17 section form@17 L17–26
+ h1: Vault search section h1: Vault search L15–15
+ input[project] section input[project] L24–25
+ input[q] section input[q] L18–19
~ tests/test_kd6_vault_ui.py .py 55 symbols added
+ SMOKE_NOTE variable variable SMOKE_NOTE L33–33
+ SMOKE_ROOT variable variable SMOKE_ROOT L32–32
+ TestVaultIntegration class class TestVaultIntegration L168–220
+ _require_mcp method method _require_mcp L170–173
+ test_adapter_get_note_and_impact method method test_adapter_get_note_and_impact L188–193
+ test_adapter_search_lexical method method test_adapter_search_lexical L182–186
+ test_adapter_vault_resource method method test_adapter_vault_resource L175–180
+ test_intel_strip_loader method method test_intel_strip_loader L195–199
+ test_propose_stub method method test_propose_stub L201–220
+ TestVaultUnit class class TestVaultUnit L97–159
+ test_degraded_banner_logic method method test_degraded_banner_logic L139–141
+ test_frontmatter_split_and_panel_no_script method method test_frontmatter_split_and_panel_no_script L125–132
+ test_gate_active_for_knowtation_scoped_id method method test_gate_active_for_knowtation_scoped_id L98–99
+ test_gate_inactive_for_code_domain method method test_gate_inactive_for_code_domain L101–103
+ test_harmony_view_model_from_delta method method test_harmony_view_model_from_delta L146–159
+ test_markdown_xss_sanitised method method test_markdown_xss_sanitised L134–137
+ test_mcp_reason_mapping method method test_mcp_reason_mapping L143–144
+ test_path_grammar_rejects_non_note method method test_path_grammar_rejects_non_note L110–112
+ test_path_grammar_rejects_traversal method method test_path_grammar_rejects_traversal L105–108
+ test_wikilink_resolves_and_broken_class class method test_wikilink_resolves_and_broken_class L114–123
+ _seed_knowtation_repo function async_function _seed_knowtation_repo L48–88
+ AsyncClient import import AsyncClient L12–12
+ AsyncSession import import AsyncSession L13–13
+ KnowtationViewAdapter import import KnowtationViewAdapter L15–15
+ KnowtationViewResult import import KnowtationViewResult L15–15
+ PathGrammarError import import PathGrammarError L30–30
+ VaultUIState import import VaultUIState L15–15
+ annotations import import annotations L3–3
+ asyncio import import asyncio L5–5
+ compute_harmony_diff import import compute_harmony_diff L15–15
+ datetime import import datetime L8–8
+ frontmatter_panel_html import import frontmatter_panel_html L15–15
+ harmony_diff_html import import harmony_diff_html L15–15
+ is_vault_domain_active import import is_vault_domain_active L15–15
+ map_mcp_reason import import map_mcp_reason L15–15
+ patch import import patch L9–9
+ pathlib import import pathlib L6–6
+ pytest import import pytest L11–11
+ render_note_html import import render_note_html L15–15
+ render_wikilinks import import render_wikilinks L15–15
+ secrets import import secrets L7–7
+ split_frontmatter import import split_frontmatter L15–15
+ structured_delta_to_view_model import import structured_delta_to_view_model L15–15
+ timezone import import timezone L8–8
+ validate_note_path import import validate_note_path L15–15
+ smoke_root function function smoke_root L42–45
+ test_get_note_hash_matches_bytes function function test_get_note_hash_matches_bytes L384–393
+ test_html_never_contains_hub_port function function test_html_never_contains_hub_port L438–445
+ test_note_path_traversal_400 function async_function test_note_path_traversal_400 L419–434
+ test_playwright_vault_landing_and_note function function test_playwright_vault_landing_and_note L295–347
+ test_search_lexical_under_2s function function test_search_lexical_under_2s L402–410
+ test_search_scores_bounded function function test_search_scores_bounded L372–380
+ test_search_top_k_clamp function function test_search_top_k_clamp L356–363
+ test_vault_routes_gate_non_vault_404 function async_function test_vault_routes_gate_non_vault_404 L229–255
+ test_vault_search_json_shape function async_function test_vault_search_json_shape L259–291
+ _load_vault_intel_strip function async_function _load_vault_intel_strip L244–255
+ _read_note_bytes function async_function _read_note_bytes L258–278
~ musehub/api/routes/musehub/ui_proposals.py .py 5 symbols added, 4 symbols modified
+ _read_note_bytes import import _read_note_bytes L23–23
+ _resolve_repo_domain import import _resolve_repo_domain L22–22
+ compute_harmony_diff import import compute_harmony_diff L29–29
+ harmony_diff_html import import harmony_diff_html L29–29
+ is_vault_domain_active import import is_vault_domain_active L29–29
~ musehub/api/routes/musehub/ui_repo.py .py 4 symbols added, 5 symbols modified
+ KnowtationViewAdapter import import KnowtationViewAdapter L31–31
+ _load_vault_intel_strip import import _load_vault_intel_strip L24–24
+ is_vault_domain_active import import is_vault_domain_active L31–31
+ resolve_repo_root import import resolve_repo_root L31–31
~ musehub/templates/musehub/pages/proposal_detail.html .html 3 symbols added, 4 symbols modified
+ h2: Section-aware diff section h2: Section-aware diff L366–366
+ h3: h3 section h3: h3 L371–371
+ section@380 section section@380 L380–414
Files Changed
+18 ~8
1048 in snapshot
← Older Oldest on feat/kd-6b
All commits
Newer → Latest on feat/kd-6b

0 comments

No comments yet. Be the first to start the discussion.

To add a comment, use the Muse CLI: muse hub commit comment sha256:c04414e7e3b812ff02f351d9792c79837b7841133a864f98fcaeff53a2a4afad --body "your comment"