Skip to content

feat: markdown export, briefing polish, and Reports-tree snapshot freshness - #63

Merged
scscodes merged 4 commits into
mainfrom
develop
Jul 7, 2026
Merged

feat: markdown export, briefing polish, and Reports-tree snapshot freshness#63
scscodes merged 4 commits into
mainfrom
develop

Conversation

@scscodes

@scscodes scscodes commented Jul 7, 2026

Copy link
Copy Markdown
Owner

Three small features deepening the surfaces shipped in v2.14.0, plus a post-review cleanup pass.

Markdown export (all three report webviews)

  • MD joins JSON/CSV as a third export format through the existing serializeReport chokepoint; builders mirror each CSV's sections and caps
  • New ↓ MD quick-save (to .meridian/artifacts/) and Copy MD buttons; copy routes through the existing security.clipboard.autoCopy policy — no new clipboard surface
  • ADR 020 latest/ contract untouched

Session Briefing polish

  • head.detached and analytics.unavailable flag cards get real actions (Open Source Control / Open Git Analytics — the latter self-heals the missing slice); the four inert flags documented as deliberate
  • Renders two computed-but-dropped slices: Top Contributors chips and pulse recorded/not-recorded hint

Reports-tree snapshot freshness

  • Rows show coarse "5m ago"-style freshness from .meridian/latest/ mtimes, redrawn via a new onLatestSnapshotWrite hook (mtime-only consumer — never parses the JSON)
  • New meridian.latest.reveal command (view title + palette) surfaces the snapshot dir to humans

Hardening

  • Post-simplify cleanups: shared latest-path helpers, single EXPORT_FORMATS registry, typed ReportId→kind map, honest manifest-test whitelist buckets

Tests: 360 → 417, all green (tsc, vitest, lint manifest checks, bundle).

scscodes and others added 4 commits July 7, 2026 14:08
- FLAG_UI: head.detached -> Open Source Control; analytics.unavailable ->
  Open Git Analytics (self-healing); four remaining ids documented as
  deliberately inert (no honest action exists)
- Activity: render topContributors as chip row (aggregator-capped, already
  in CSV, previously dropped)
- Pulse: hint now shows recorded / not recorded (10-min throttle) from
  p.appended

Presentation-only; no contract or host changes (ADR 011 additive rule).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- serializeReport gate widens to json|csv|md; abstract reportToMarkdown
  compile-enforced across all three webview providers
- gitReportToMd beside gitReportToCsv; hygiene + briefing builders inline in
  their providers, mirroring each CSV's section structure and caps
- mdEscape (pipes, backticks, newlines) + reportMdHeader in report-labels
- "MD" quick-save and "Copy MD" buttons on all three webview toolbars; copy
  routes through copyWithPolicy (security.clipboard.autoCopy) — no new
  clipboard surface
- Save-as QuickPick gains Markdown; md writes join .meridian/artifacts/
  (retention-governed, ADR 019); ADR 020 latest/ contract untouched
- Tests: builder escaping against real serializer output; export test
  extended for md quick-save, unknown-format reject, and both copy paths

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- latest-snapshot.ts: onLatestSnapshotWrite(cb) hook, notified inside the
  queue post-rename with the written kind; listener errors swallowed; module
  stays vscode-free
- ReportsTreeProvider: onDidChangeTreeData + refresh(); async getChildren
  stats the three latest/ snapshot mtimes (hygiene row -> hygieneAnalytics)
  into coarse relative-age descriptions via pure formatRelativeAge; no
  workspace -> no descriptions
- tree-setup: snapshot-write hook drives reportsTree.refresh() (disposable);
  new meridian.latest.reveal command (reveal latest/ in Explorer, or info
  message when no snapshots exist)
- package.json: command contributed to commands, commandPalette
  (workspace-open when), and the Reports view title; manifest whitelist
  updated
- Docs: ADR 020 internal mtime-only consumer note; FEATURES.md Reports-view
  and export-toolbar (MD/Copy MD, from previous commit) touch-ups

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Export latestDirPath/latestSnapshotPath so tree and reveal command share
the writer's path encoding; type Reports-tree map as ReportId->kind.
Centralize export-format facts in one EXPORT_FORMATS registry.
Restore manifest-test whitelist semantics via presentation-utility bucket.
Dedupe git-report test fixture into tests/fixtures; single-pass mdEscape.
@scscodes scscodes changed the title Develop feat: markdown export, briefing polish, and Reports-tree snapshot freshness Jul 7, 2026
@scscodes
scscodes merged commit 9806b2a into main Jul 7, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant