**Git Commit Tracking** - Automatically capture git commit hash when claims/observations are ingested - Store in assertion metadata for temporal context and audit trails - Graceful degradation in non-git environments - Solves double-commit problem by capturing hash at ingestion time **Implementation** - walker/git.rs: get_current_commit_hash() utility function - bridge.rs: Accept optional git_commit parameter in all conversion functions - episteme/local: Store project_root, capture git hash during ingestion - 5 new tests for git hash tracking + metadata validation - All 1162 aphoria tests passing **Documentation Overhaul** - README: Added Observations vs Claims distinction, git tracking, dashboard - CLI Reference: New sections for git integration and ignore/exclusion system - Comprehensive ignore documentation: .aphoriaignore, inline comments, 4 methods - Enhanced verification engine docs with matching capabilities - DOCUMENTATION_UPDATES.md: Complete audit summary **Dashboard Separation** - Moved Aphoria-specific UI from stemedb-dashboard to aphoria-dashboard - Clean separation of concerns: StemeDB for core, Aphoria for security - Added dashboard documentation and setup guides Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
6.0 KiB
Dashboard Sync Guide
This document explains how to sync shared code between StemeDB Dashboard and Aphoria Dashboard.
Architecture Decision
Both dashboards use the Copy with Documentation approach:
- Shared infrastructure is copied, not abstracted into a monorepo package
- This minimizes build complexity and allows independent versioning
- Controlled divergence is acceptable with documented sync procedures
Shared Components
Shared Code (Keep in Sync)
These files should be kept synchronized between dashboards:
UI Components (src/components/ui/)
badge.tsxbutton.tsxcard.tsxdate-picker.tsxinput.tsxseparator.tsxsheet.tsxtabs.tsx
Shared Components (src/components/shared/)
confirmation-dialog.tsxapi-status.tsxerror-state.tsx
Reusable Layout Components (src/components/layout/)
header.tsxtheme-toggle.tsx
Note: Do NOT sync sidebar.tsx - each dashboard has its own navigation.
Library Code (src/lib/)
api/client.ts- API client (has both StemeDB + Aphoria methods)api/types.ts- Type definitionsapi/index.ts- API exportsutils.ts- Utilitiesformat.ts- Formatting helperstypes.ts- Type definitionsconstants.ts- Constantsauth/api-key.ts- API key handling
Base Configuration
globals.css- TailwindCSS globalscomponents.json- shadcn/ui config
Dashboard-Specific Code (Do NOT Sync)
StemeDB Dashboard Only
src/app/skeptic/,src/app/layered/,src/app/sources/,src/app/quarantine/,src/app/circuit/,src/app/audit/src/components/skeptic/,src/components/layered/,src/components/sources/,src/components/quarantine/,src/components/circuit/,src/components/audit/src/components/layout/sidebar.tsx(6 routes)package.json(port 18188)
Aphoria Dashboard Only
src/app/scans/,src/app/claims/,src/app/corpus/src/components/scans/,src/components/claims/,src/components/corpus/src/components/layout/sidebar.tsx(3 routes)package.json(port 18189)
Sync Procedures
When to Sync
You need to sync when:
- Adding new shadcn/ui components - Add to both dashboards
- Updating API types - Update
lib/api/types.tsin both - Changing API client methods - Update
lib/api/client.tsin both - Modifying shared utilities - Update
lib/utils.ts,lib/format.ts, etc. - Changing globals.css - Update in both
How to Sync
Option 1: Manual Copy (Recommended)
# Sync UI components
cp -r stemedb-dashboard/src/components/ui/* aphoria-dashboard/src/components/ui/
# Sync shared components
cp -r stemedb-dashboard/src/components/shared/* aphoria-dashboard/src/components/shared/
# Sync layout components (except sidebar)
cp stemedb-dashboard/src/components/layout/header.tsx aphoria-dashboard/src/components/layout/
cp stemedb-dashboard/src/components/layout/theme-toggle.tsx aphoria-dashboard/src/components/layout/
# Sync lib directory
cp -r stemedb-dashboard/src/lib/* aphoria-dashboard/src/lib/
# Sync globals.css
cp stemedb-dashboard/src/app/globals.css aphoria-dashboard/src/app/
Option 2: rsync Script
Create a script sync-dashboards.sh:
#!/bin/bash
set -e
SRC="applications/stemedb-dashboard/src"
DEST="applications/aphoria-dashboard/src"
echo "Syncing shared code from StemeDB to Aphoria Dashboard..."
# Sync UI components
rsync -av --delete "$SRC/components/ui/" "$DEST/components/ui/"
# Sync shared components
rsync -av --delete "$SRC/components/shared/" "$DEST/components/shared/"
# Sync layout components (exclude sidebar)
rsync -av --exclude="sidebar.tsx" "$SRC/components/layout/" "$DEST/components/layout/"
# Sync lib directory
rsync -av --delete "$SRC/lib/" "$DEST/lib/"
# Sync globals.css
rsync -av "$SRC/app/globals.css" "$DEST/app/"
echo "Sync complete!"
Option 3: Reverse Sync (Aphoria → StemeDB)
If you make changes in Aphoria Dashboard first:
# Reverse direction
SRC="applications/aphoria-dashboard/src"
DEST="applications/stemedb-dashboard/src"
# Same rsync commands but reversed
Sync Checklist
After syncing, verify:
- Both dashboards build without errors
- No import errors in browser console
- Shared components render correctly in both dashboards
- API calls work in both dashboards
- UI components match in both dashboards
Dependency Version Management
Keep Aligned
Both package.json files should have matching versions for:
nextreactreact-domtailwindcss@tailwindcss/postcsslucide-reactclass-variance-authorityclsxtailwind-merge- All other shared dependencies
Update Strategy
When updating dependencies:
- Update
package.jsonin both dashboards - Run
npm installin both - Test both dashboards
- Commit both at the same time
Future: Monorepo Packages
If code drift becomes problematic, consider refactoring to:
applications/
├── packages/
│ ├── dashboard-shared/ # Shared UI components, lib, utils
│ │ ├── src/
│ │ │ ├── components/
│ │ │ ├── lib/
│ │ │ └── index.ts
│ │ └── package.json
│ └── dashboard-api/ # Shared API client
│ ├── src/
│ │ └── client.ts
│ └── package.json
├── stemedb-dashboard/
│ ├── package.json # Depends on dashboard-shared
│ └── src/
└── aphoria-dashboard/
├── package.json # Depends on dashboard-shared
└── src/
This would:
- Eliminate manual syncing
- Enforce shared component consistency
- Add build complexity (workspace setup)
- Require version management between packages
Decision Point: If syncing more than once a week, migrate to monorepo.
Questions?
If you're unsure whether to sync a file:
- Is it in the Shared Code list above? → Sync it
- Is it in the Dashboard-Specific list? → Don't sync it
- Not sure? → Check if it's used by both dashboards. If yes, sync it.