Skip to content

Releases: OpenDIKW/dikw-web

dikw-web v0.8.10

Choose a tag to compare

@github-actions github-actions released this 05 Jul 07:09
ab87419

Changed

  • dikw-core verification pin single-sourced in scripts/live-core/harness.mjs.
    live-integration.yml no longer sets a DIKW_CORE_VERSION env — CI/nightly falls
    back to the harness's DEFAULT_CORE_VERSION, the same value local runs use — and
    bump-dikw-core.yml now edits (and reads the current pin from) only the harness
    file. This unjams the auto-bump loop discovered while bumping to core 0.6.5 (#150):
    a bump commit that edited a workflow file was doubly blocked — GitHub rejects such
    a push from a PAT without the Workflows permission, and the gate-integrity
    required check flags any .github/workflows/** edit without a maintainer's
    gate-change label. With the pin out of the workflow file, future auto-bump PRs
    need neither. The DIKW_CORE_VERSION env override still works everywhere;
    docs/integration-verification.md no longer hardcodes the pin value (one less
    thing to drift per bump).

dikw-web v0.8.9

Choose a tag to compare

@github-actions github-actions released this 29 Jun 15:00
b2df975

Added

  • Automated watch-CI + fix (dikw-web-watch-ci skill) + loop observability
    (scripts/loop-log.mjs).
    Turns delivery-loop step 8 from prose into a bounded,
    self-logging loop: watch gh pr checks --watch, route a real failure to the
    fresh-context fixer, rerun the one known flake (graph.spec.ts Pixi) at most
    once
    , always pull the review prose before merge, and merge explicitly (never
    --auto, which outraces the review) — gated by MAX_ROUNDS = 3 and a same-failure
    circuit breaker. Each transition is appended as a structured JSON line to a gitignored
    .loop-log.jsonl (node scripts/loop-log.mjs <event> [detail]) so an
    autonomous/background run is diagnosable after the fact (runaway / stuck / flake /
    silent death). Wires into dikw-web-delivery-workflow step 9 and CLAUDE.md. See
    docs/adr/0005-delivery-loop-hardening.md.

dikw-web v0.8.8

Choose a tag to compare

@github-actions github-actions released this 29 Jun 14:53
e5eb85f

Changed

  • dikw-web-verify-frontend gains a measured perf + a11y pass (Step 2.5). The
    frontend-verify skill previously eyeballed the docs/ui-checklist.md a11y / contrast
    / perf items. It now uses the already-installed chrome-devtools-mcp: lighthouse_audit
    for accessibility + best-practices (the tool excludes performance), plus a
    performance_start_trace/stop_trace for Web Vitals, scored to a rubric — a11y
    ≥ 0.9
    with no new violation, CLS ≤ 0.1 (cross-checking the perf.spec.ts gate),
    LCP recorded as a soft budget — turning the qualitative items into numbers.
    Locally-measured, not a new CI gate (Lighthouse + trace timing is runner-dependent).
    The #graph Pixi route audits a11y normally but skips the background-tab perf trace.
    See docs/adr/0005-delivery-loop-hardening.md.

dikw-web v0.8.7

Choose a tag to compare

@github-actions github-actions released this 29 Jun 14:40
3b886a7

Added

  • Reward-hacking gate (gate-integrity CI job / npm run check:gate). A
    deterministic check the in-loop agent cannot fool, hardening the delivery loop
    against an agent weakening the verification to make a check go green.
    scripts/check-gate-integrity.mjs diffs the branch against its merge base and
    fails the PR if a coverage threshold was lowered, the coverage exclude list
    grew, a bundle budget was raised, e2e retries were raised, a test was
    deleted/disabled or stripped of assertions, or the gate/CI machinery itself
    (the script, .github/workflows/**, fixer.md's forbidden list) was edited.
    The good direction (raising a threshold, adding tests) is always allowed; a
    deliberate weakening is allowed only when a maintainer adds the visible
    gate-change PR label. Until now "don't weaken the tests" was prose only in
    CLAUDE.md / docs/review-rubric.md / fixer.md — the weakest defense. The job
    is PR-scoped and a required status check. See
    docs/adr/0005-delivery-loop-hardening.md.

dikw-web v0.8.6

Choose a tag to compare

@github-actions github-actions released this 29 Jun 13:27
3091af2

Fixed

  • Flaky graph e2e (graph.spec.ts > renders a nonblank Pixi graph canvas) —
    root-caused, not retried away.
    In React StrictMode's dev double-invoke, the
    graph mounts two createPixiGraphEngine() inits concurrently. The canvas was
    attached via mount.replaceChildren(app.canvas) inside the async factory,
    outside the effect's active guard, so a slower-resolving stale init could
    clobber the live engine's canvas and then empty the mount when its destroy()
    fired — leaving data-ready="true" over a canvas-less stage. GraphCanvas now
    attaches the canvas only inside the active guard (the engine exposes a
    canvas getter), so the discarded init never touches the DOM. Production
    rendering is unchanged (no StrictMode double-invoke there → single attach). The
    spec also gates on data-render-count >= 1 before reading the canvas contract.
  • Flaky Mermaid disclosure clicks (wiki.spec.ts, theme.spec.ts). A bare
    getByText("flowchart") also matched the <style> Mermaid injects (its CSS
    mentions flowchart), so once any diagram had rendered the locator resolved to
    two nodes and .click() threw a Playwright strict-mode violation. Both specs
    now scope to the <summary> element (locator("summary", { hasText: … })).

dikw-web v0.8.5

Choose a tag to compare

@github-actions github-actions released this 28 Jun 02:46
86c429f

Fixed

  • Chat agent tool calls fail (fetch failed) in a proxied dev/live setup.
    dikw-core has no CORS, so the browser keeps serverUrl at the default and
    routes its /v1 reads through the same-origin Vite proxy (VITE_DIKW_PROXY_TARGET
    → the real, dynamically-ported core). But the sidecar's /agent core calls run
    server-side and bypassed that proxy — they dialed the default port the
    browser sent (http://127.0.0.1:8765), where nothing listens, so every agent
    tool (retrieve_knowledge, dikw_health, …) returned fetch failed and the
    chat could not read the knowledge base. The sidecar now mirrors the Vite
    /v1 proxy
    : agentSidecarPlugin injects the Vite-resolved
    VITE_DIKW_PROXY_TARGET (honoring .env.local, not just a shell export, and
    warning on a malformed value) and applyDevProxyTarget (server/agent/http.ts)
    routes the default core URL to it. Dev-only by construction — the standalone
    production sidecar injects no target, so it always dials the configured
    Server URL verbatim; a custom, directly-reachable serverUrl is also left
    untouched. Unit guards: server/agent/http.test.ts "applyDevProxyTarget…" +
    the injected-target handler test; server/agent/vitePlugin.test.ts
    "resolveDevProxyTarget…".

Changed

  • live:verify agent↔core check now reproduces the real browser path.
    scripts/live-core/verify-agent.mjs previously POSTed /agent with the live
    core's real dynamic URL, bypassing the proxy the browser depends on — so it
    passed even while the actual chat was broken. It now sends the default core
    URL (like the browser) and asserts a core tool reached status:"succeeded"
    (not merely that one was invoked — a fetch failed call still emits a
    tool_event). This catches the bug above: it fails against a sidecar that can't
    reach core and passes once the proxy is mirrored.

dikw-web v0.8.4

Choose a tag to compare

@github-actions github-actions released this 27 Jun 14:53
9de778d

Fixed

  • Hero metric value is the documented 27px, not a drifted 30px. A
    token-migration override silently pinned .metric-card__value to 30px over the
    27px base rule, contradicting DESIGN.md §3 (which documents the hero-number as
    27px twice). Dropped the override so the documented size ships.

  • Three sans-uppercase "eyebrows" now use the mono label voice
    (Mono-Only-Uppercase).
    .wiki-info-grid dt (every sibling field label was
    already mono), .wiki-preview__header, and MB-Web's .mb-lab bilingual column
    header (the twin of the workbench's mono .bi-colhead span) were sans uppercase
    — the exact AI "eyebrow" tell the type system forbids. Routed onto the mono
    label role at the shared 0.04em tracking.

  • Three mono labels declared a font-weight: 600 no-op. IBM Plex Mono ships
    only 400/500, so 600 silently rendered as 500 and diverged from the canonical
    label weight: .bi-colhead span, .import-step__marker, .trace-invocation__dur
    now declare 500 (no visual change — they already rendered at 500).

  • User Markdown table headers render verbatim. .markdown-table-wrap th no
    longer force-uppercases the author's header row (a content-fidelity breach — a
    header like pH/mRNA was mangled — and a sans-eyebrow tell). The row stays
    distinct by weight + surface, not case. The label role's "table heads" remain
    the workbench's own data-table column labels (mono uppercase); DESIGN.md §3 now
    spells out the distinction.

  • .wisdom-dialog__header h2 rides the title role. It was an untokenized
    font-size: 17px that inherited the UA bold 700; now sans 600 with the title
    tracking, byte-for-byte parity with its sibling .wisdom-card h2.

  • .markdown-chart__caption is on the role ladder (body-sm 13px), not an
    off-scale 0.85em.

    e2e guards: typography.spec.ts "type-system rules hold on sweep-unreachable
    surfaces (workbench)" + "MB-Web column labels use the mono uppercase voice" —
    these inject the auth/hover/MB/state-gated surfaces the passive invariant sweeps
    can't render, so the rules are now guarded there too.

dikw-web v0.8.3

Choose a tag to compare

@github-actions github-actions released this 27 Jun 13:50
2f2168f

Fixed

  • AI-translate dual columns fill the reader pane. The bilingual view's root
    inherits .markdown-body's single-column max-width: 72ch, so the source /
    translation columns crushed into one measure on the left and left the pane's
    right half empty. .bilingual-cols now overrides that cap — it fills the reader
    width (each column gets its own measure) and, past two measures on an ultra-wide
    pane, caps and centers. Below 1100px, where the pairs collapse to one stacked
    column, the cap reverts to the single-column 72ch so a stacked paragraph never
    runs past a comfortable line length. e2e guards: bilingual.spec.ts
    "dual-column view fills the reader pane…" + "…restores the single-column measure
    when columns stack…".
  • DESIGN.md typography frontmatter matched to the implementation. The
    machine-readable typography: block still named the pre-v0.8.0 families (Source
    Serif 4 / Inter Tight / JetBrains Mono) and carried swapped weights (display 500,
    label 600) — contradicting the shipped IBM Plex superfamily and the §3 prose
    table (display 600, label 500). Frontmatter families, weights, and the stray
    §3 "JetBrains Mono" mention now read IBM Plex.

Changed

  • MB-Web radii and colors consolidated onto the shared tokens. src/mb/mb.css
    kept a parallel light + dark palette whose values already duplicated the
    workbench tokens. Differently-named locals (--ac / --acb / --border / …)
    now alias their styles.css equivalent and same-named ones (--bg / --surface
    / --text / …) inherit the global values, so the parallel dark block is gone;
    the off-scale radii snapped to the 4 / 6 / 7 / 8 / 999 scale (cards 8px; the
    badge / chip / filter / toast / sync pills fully round); the note highlighter
    yellows became named --mb-mark / --mb-mark-staged tokens. Only the few
    genuinely MB-specific literals with no shared equivalent (answer-blue, on-accent
    foreground, AA-darkened faint, hover wash) stay local. Zero-visual-change for
    colors; verified in the browser across library, reader, and notes in light + dark.

dikw-web v0.8.2

Choose a tag to compare

@github-actions github-actions released this 27 Jun 09:42
b12804b

Fixed

  • Settings appearance copy no longer mixes languages. The zh-CN 外观 subtitle
    read "System 会跟随操作系统偏好" — the English enum label System inside Chinese
    chrome, breaking the single-language-chrome rule. Now "「跟随系统」会随操作系统的明暗
    偏好自动切换。".
  • Editorial / responsive heading sizes snapped onto the role ladder. The tail the
    0.8.1 small-text pass left — .wiki-preview-card h2 (19 → title 17),
    .import-done-banner__headline (20 → title 17), .wisdom-popover__title h2
    (15.5 → body 15), and the responsive .metric-card__value downscales (24 / 26 → 22,
    the reader-h2 editorial step) — is now on the ladder.

Changed

  • MB-Web type migrated onto the role tokens. src/mb/mb.css dropped its
    self-contained half-step scale (11.5 / 12.5 / 13.5 / 14.5 …); 59 of its 60
    font-size declarations now resolve to --type-* (label / body-sm / body / title)
    by nearest role, made available by the app-wide styles.css import. The one kept
    literal is .mb-r-title (22px), the paper-reader title. MB-Web radii/colors remain a tracked
    follow-up (DESIGN.md §3). Verified in the browser across the library, reader, and
    notes views.

dikw-web v0.8.1

Choose a tag to compare

@github-actions github-actions released this 27 Jun 08:41
3937b5b

Fixed

  • Small-text ladder closed (post-v0.8.0 scale consolidation). A residual 12px
    tier crammed between label (11) and body-sm (13), plus stray 14 / 16 sizes
    beside body (15) / title (17), survived the v0.8.0 pass. All 46 12px sites
    now snap to body-sm (dense metadata — IDs, paths, durations, pills, table cells,
    hints, segmented controls) or label (the uppercase label voice). The off-scale
    outliers resolve too: .page-header__description (14 → body-sm),
    .settings-panel__header h2 (16 → title, matching every other panel title), the
    import section-head titles + .section-title (14 → body), .answer-text
    (16 → body), and the reader markdown table header/cell inversion (th 12 / td 14 →
    both body-sm). The small-text band (11–17) on every workbench route now lands
    on the {11, 13, 15, 17} run — no 12px tier, no stray 14 / 16. A few editorial /
    responsive heading sizes outside that band (preview-card 19, done-banner 20,
    wisdom-popover 15.5, responsive metric 24 / 26) are a pre-existing tail and a
    tracked follow-up (DESIGN.md §3).
  • Inline / block code (0.92em) and KaTeX math are documented as deliberate
    em-relative off-ladder exemptions; a new no UI text renders off the role scale e2e invariant guards the ladder across
    overview / base / import / chat / settings / tasks / wisdom.

Notes

  • MB-Web (src/mb/mb.css) keeps its own half-step subsystem scale for now;
    migrating it onto the --type-* role tokens is a tracked follow-up (DESIGN.md §3).