Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
436 commits
Select commit Hold shift + click to select a range
0dee9fe
test: migrate 10/13 test files from raw axios to domain API mocks
aaronlippold May 26, 2026
ee01240
test: migrate CommentComposerModal from raw axios mocks
aaronlippold May 26, 2026
290f7ad
test: migrate final 2 test files from raw axios mocks
aaronlippold May 26, 2026
240283f
fix: XSS in exportProjectData URL params + document unlinkIdentity
aaronlippold May 26, 2026
90340c7
Add component sync schema + SnapshotManager (480.7)
wdower May 26, 2026
88cae7b
Batch search N+1 queries via GROUP BY (73z.9)
wdower May 26, 2026
6f263a6
Cap blueprint_render_options reaction summary at 100 reviews (73z.8)
wdower May 26, 2026
76ef712
Use in-memory rules for status_counts/releasable/reviews (73z.7)
wdower May 26, 2026
b085983
Move comments via Review#move_to_rule! with provenance (05f.10)
wdower May 26, 2026
38d4443
Add JS test for move-to-rule admin action submit (05f.10)
wdower May 26, 2026
a1fd0f1
Name parent control in soft-redirect success toast (05f.6)
wdower May 27, 2026
6be8290
Rename based_on_same_srg to /related + explicit field allowlist (aik)
wdower May 27, 2026
90a5906
Restructure compare to /api/components/compare with envelope (oxz)
wdower May 27, 2026
866951b
Switch /components/history to GET + snake_case keys (dyd)
wdower May 27, 2026
c9ba868
chore: split beads board — v2 production gets vulcan_v2 DB
aaronlippold May 27, 2026
86bee3d
feat: restore OpenAPI 3.2 spec + contract tests + JSON responses
aaronlippold May 27, 2026
9b7b5a9
feat: restore DiffViewer stepper UX + FilterDropdown disabled
aaronlippold May 27, 2026
ce40fc4
fix: restore code quality — public method, per_page 100, tests
aaronlippold May 27, 2026
7f8a8cb
perf: runtime-balanced parallel tests + composite indexes
aaronlippold May 27, 2026
57cd8a1
feat: extract CommentAuthorLine shared component
aaronlippold May 28, 2026
5967515
feat: OpenAPI user admin endpoints + multi-file split with Redocly CLI
aaronlippold May 28, 2026
defd49f
feat: add BvConfig global size defaults across all 21 pack files
aaronlippold May 28, 2026
bf1c9e4
docs: enrich all OpenAPI schemas, parameters, and responses
aaronlippold May 28, 2026
b309a63
fix: GET /users JSON response includes admin-needed fields
aaronlippold May 28, 2026
20abed6
feat: add 7 missing endpoint specs to OpenAPI + 4 contract tests
aaronlippold May 28, 2026
4f5f67c
docs: enrich System, Search, Users, Benchmarks OpenAPI paths (20 files)
aaronlippold May 28, 2026
cc64138
docs: enrich Projects + Memberships OpenAPI paths (10 files)
aaronlippold May 28, 2026
20aa82f
docs: enrich Components OpenAPI paths (13 files)
aaronlippold May 28, 2026
af56086
Add markdown preprocessor to indent code fences in list items
wdower May 28, 2026
beaab67
Add bulk-triage backend + BulkTriageBar component
wdower May 28, 2026
2d7d4a7
Wire bulk-triage multi-select into comment table + accordion
wdower May 29, 2026
c496b87
Default imported top-level comments to pending triage_status
wdower May 29, 2026
2eea14f
fix: controller best-practice fixes for OpenAPI contract compliance
aaronlippold May 29, 2026
4fff47c
feat: enrich seed data for OpenAPI contract test coverage
aaronlippold May 29, 2026
ec982bb
feat: rewrite 10 wrong schemas + create 16 new schemas from live Blue…
aaronlippold May 29, 2026
4475621
fix: correct all path $refs + add missing paths + DRY shared parameters
aaronlippold May 29, 2026
922b60a
test: add 102 OpenAPI contract tests across 7 domain files
aaronlippold May 29, 2026
e2ad68d
feat: add Personal Access Token authentication (backend)
aaronlippold May 30, 2026
7a9e2e6
refactor: canonical JSON responses — Toast value object + structured …
aaronlippold May 30, 2026
059f217
feat: add Personal Access Token management UI
aaronlippold May 30, 2026
119885c
feat: add Schemathesis API testing + seed-backup audit infrastructure
aaronlippold May 30, 2026
bef221f
docs: add PAT OpenAPI spec + recover uncommitted Session-17 schemas
aaronlippold May 30, 2026
a47cf3c
chore: lint/security compliance for PAT + Toast session work
aaronlippold May 30, 2026
2f6c0e1
fix: API 401 regression + StigRuleBlueprint vendor_comments
aaronlippold May 31, 2026
289901b
test: fix 24 failures from PAT/Toast session — array matchers + auth …
aaronlippold May 31, 2026
97fd222
chore: visible parallel test failures + Schemathesis noise reduction
aaronlippold May 31, 2026
c0d0f44
Add admin merge-comments — consolidate duplicates into a survivor
wdower May 31, 2026
f1d6280
Inherit parent comment's triage-bg tint into reply cards
wdower May 31, 2026
97fb69d
Fix RuboCop offenses across PAT + contract + JSON-error specs
wdower May 31, 2026
bfce2ec
Pending-segment legibility stripe + 100% bar normalization
wdower Jun 1, 2026
3cbf1a9
fix: ComponentBlueprint :index missing fields used by ComponentCard (…
aaronlippold Jun 1, 2026
ea50b33
chore: align ports to registry — 5435 for Vulcan DB, update docs
aaronlippold Jun 1, 2026
6837b49
Tint the rule title when a comment targets the overall requirement
wdower Jun 1, 2026
6121c95
Add VitePress docs for bulk triage + merge comments
wdower Jun 1, 2026
447542a
Add VitePress docs for soft-redirect, provenance, move-comment
wdower Jun 1, 2026
bcdec1d
Add VitePress docs for commenter email + sidebar collapse
wdower Jun 1, 2026
171fd8e
Add project-scoped triage response templates
wdower Jun 2, 2026
5bd277b
Add VitePress docs for triage response templates
wdower Jun 2, 2026
ce02969
Default triage filter to 'all' so bulk actions stay visible
wdower Jun 2, 2026
e794cb6
feat: add upgrade path infrastructure — version manifest, preflight, …
aaronlippold Jun 2, 2026
4e55e32
fix: standardize database names and ports — prevent dev/test collision
aaronlippold Jun 2, 2026
b5a60f5
feat: add custom RuboCop cop + ESLint rule for tracker ID hygiene
aaronlippold Jun 2, 2026
198f0c4
chore: strip tracker IDs from source comments + fix broken auto-corre…
aaronlippold Jun 2, 2026
6be00f8
refactor: replace 3 hand-built comment row serializers with CommentRo…
aaronlippold Jun 2, 2026
3da3e9d
fix: importer drop_invalid_reviews deletes children before parents (F…
aaronlippold Jun 2, 2026
0f9f505
feat: bake Container SRG Test dataset into seeds via real importer
aaronlippold Jun 2, 2026
8bf9595
docs: strict OpenAPI lint + operation descriptions + tokenAuth global…
aaronlippold Jun 2, 2026
31b4927
docs: VitePress documentation — 7 new pages, 10 updated pages, sharp fix
aaronlippold Jun 2, 2026
447ca1e
feat: migrate HTTP client from axios to ky — supply chain safety
aaronlippold Jun 2, 2026
c865f27
refactor: standardize API modules — naming, DRY, test coverage
aaronlippold Jun 2, 2026
2cecc17
feat: JSDoc on API modules + OpenAPI route audit + stateful Links
aaronlippold Jun 2, 2026
d7cd14b
feat: Layer 1-3 OpenAPI testing + deadlock fix + coverage reporting
aaronlippold Jun 2, 2026
548333c
refactor: Rack 3.1 deprecation fix + design system audit + variable e…
aaronlippold Jun 2, 2026
36da6d2
fix: notification link, prop warnings, scrollIntoView, test fixtures
aaronlippold Jun 2, 2026
9353b53
feat: Scalar API docs + token sort + spacing audit
aaronlippold Jun 2, 2026
0710611
fix: Scalar API docs CSP + same-origin auth + CSRF injection
aaronlippold Jun 3, 2026
b7cd5be
fix: dark mode foundation — three-tier bg hierarchy + active state + …
aaronlippold Jun 3, 2026
f884558
fix: form field spacing — form-row + consistent padding + sidebar div…
aaronlippold Jun 3, 2026
599ce93
refactor: SRG info uses b-form-group label-cols instead of manual row…
aaronlippold Jun 3, 2026
8fb9660
fix: triage split-pane dark mode — three-tier bg + panel borders
aaronlippold Jun 3, 2026
26396e1
fix: triage split-pane shared panel pattern — padding + three-tier bg…
aaronlippold Jun 3, 2026
a556ebf
Merge upstream — Aaron's 23 commits (dark mode, ky, Scalar, design sy…
wdower Jun 3, 2026
0ff1934
In-app verification fixes: bulk filter, projectId, reply tint, docs nav
wdower Jun 3, 2026
e249896
Fix RuboCop offenses in incoming merged work
wdower Jun 3, 2026
7a77883
feat: design system foundation — CSS variables, PanelLayout, zebra st…
aaronlippold Jun 3, 2026
aef9d54
fix: migrate layouts to PanelLayout + fix 3 pre-existing test failures
aaronlippold Jun 3, 2026
742212a
chore: fix RuboCop offenses — string quotes + grep over select
aaronlippold Jun 3, 2026
b91d238
fix: design system enforcement + bulk triage UX polish + docs rewrite
aaronlippold Jun 3, 2026
4cfdb5a
fix: add InfoTooltip to Apply + Merge buttons in bulk triage bar
aaronlippold Jun 3, 2026
5bb0544
feat: add triage response template management UI + reverse OpenAPI co…
aaronlippold Jun 3, 2026
81384e6
feat: add swagcov for OpenAPI route coverage + template contract tests
aaronlippold Jun 3, 2026
df2ec5a
feat: add PATCH operations to 4 OpenAPI path specs
aaronlippold Jun 3, 2026
ad8ffa3
chore: switch to fork gems for OAS 3.2 support + remove swagcov monke…
aaronlippold Jun 3, 2026
f493852
Honor active filter on bulk triage and merge — drop auto-switch
wdower Jun 3, 2026
84e3e90
Match page background on triage inner content roots in dark mode
wdower Jun 3, 2026
7c482fe
Update ResponseTemplateDropdown spec for b-dropdown rewrite
wdower Jun 3, 2026
a364bcb
Fix RuboCop offenses in incoming spec files
wdower Jun 3, 2026
90bc08a
feat: add UserBadge component + b-media comment threads + app-wide in…
aaronlippold Jun 3, 2026
aec26b9
fix: restructure navbar with proper Bootstrap-Vue components + respon…
aaronlippold Jun 3, 2026
a552e3d
feat: add commenter_email to reply endpoint + declarative seed threads
aaronlippold Jun 3, 2026
b4d8bdc
Ignore bd recovery artifacts and local tool caches
wdower Jun 3, 2026
6ef3c70
Fix lint offenses in incoming spec and seed files
wdower Jun 3, 2026
115d0cb
fix: dim non-matching section comments in dedup banner
aaronlippold Jun 3, 2026
6803404
fix: remove reply triage-status background inheritance from parent
aaronlippold Jun 3, 2026
a411f0c
fix: migrate hand-built alert divs to b-alert components
aaronlippold Jun 3, 2026
6315160
fix: navbar dropdown viewport boundary + login toggle right-alignment
aaronlippold Jun 3, 2026
67701cf
feat: add SeedContext class + infrastructure wrapper
aaronlippold Jun 3, 2026
e7d88c2
refactor: migrate comment threads to YAML + DRY memberships
aaronlippold Jun 3, 2026
6c546a5
feat: install Pinia 2.x + createVulcanApp helper
aaronlippold Jun 3, 2026
31bcfad
docs: add frontend architecture + state management guides
aaronlippold Jun 3, 2026
22d376c
feat: add comment store, composables, and compound components
aaronlippold Jun 4, 2026
a8433a0
feat: add CommentList renderless wrapper component
aaronlippold Jun 4, 2026
cad2500
refactor: migrate CommentDedupBanner to CommentItem + composable
aaronlippold Jun 4, 2026
8194eb3
refactor: migrate comment consumers to composables + CommentItem
aaronlippold Jun 4, 2026
1b92167
docs: comment system reference implementation plan
aaronlippold Jun 4, 2026
8d7ab58
docs: add Pinia + composable testing guide
aaronlippold Jun 4, 2026
3468b03
feat: complete Pinia store + composable system for comments
aaronlippold Jun 4, 2026
3ecb3f2
Fix UserBadge popover ID collision and undersize navbar avatar
wdower Jun 4, 2026
b6a3fc3
fix: normalize on ingest + composables delegate to store
aaronlippold Jun 4, 2026
0cee481
fix: resolve all 16 expert review findings
aaronlippold Jun 4, 2026
edae4e0
refactor: delete ReactionToggleMixin — all consumers on composable
aaronlippold Jun 4, 2026
d4f346f
fix: restore createVulcanApp test additions lost in rebase
aaronlippold Jun 4, 2026
57d2268
ManageTemplatesModal: required-field pattern + correct editor height
wdower Jun 4, 2026
843a179
Docs: make Public Comment Review the Comment Triage primer
wdower Jun 4, 2026
7348db7
feat: section comment action bar + useCommentIconHost composable
aaronlippold Jun 4, 2026
10f79aa
fix: moment.js deprecation warning + modal close-on-backdrop
aaronlippold Jun 4, 2026
12ece56
feat: add full DISA V4R1 guide to in-app DISA Guide with 3-panel layout
aaronlippold Jun 4, 2026
37e2fce
fix: move CALLOUT_VARIANTS above private + add note type
aaronlippold Jun 4, 2026
046c3df
fix: V4R1 pandoc cleanup + callout accuracy + NA artifact bug
aaronlippold Jun 4, 2026
432714d
fix: TOC hash navigation — sticky sidebars + native scroll
aaronlippold Jun 4, 2026
7e75f98
fix: h3 heading background band for section separation
aaronlippold Jun 4, 2026
0221d0e
feat: dark mode toggle in DISA guide header + h4 field heading style
aaronlippold Jun 4, 2026
dfa6fb4
fix: HAML structure — javascript block outside template tree
aaronlippold Jun 4, 2026
ee1a278
fix: move theme toggle to JS file — CSP blocks inline scripts
aaronlippold Jun 4, 2026
0a6d2f9
feat: centralize theme state in Pinia useThemeStore
aaronlippold Jun 4, 2026
98aee66
fix: cross-bundle theme sync via MutationObserver on data-bs-theme
aaronlippold Jun 4, 2026
8c298b7
feat: convert DISA guide to Vue page with theme toggle
aaronlippold Jun 4, 2026
ac9600e
feat: Pinia theme store + Resources navbar dropdown
aaronlippold Jun 4, 2026
20e9645
fix: toast + alert dark mode via DRY @each variant tint loop
aaronlippold Jun 4, 2026
0f02aaf
fix: suppress v-html lint warning — content sanitized server-side
aaronlippold Jun 4, 2026
4e73813
fix: update brakeman ignore fingerprint for send_file
aaronlippold Jun 4, 2026
4f35db1
feat: migrate 5 comment consumers to Pinia store + composables
aaronlippold Jun 4, 2026
3d47f3a
refactor: DRY store helpers + consolidate triageService into store
aaronlippold Jun 4, 2026
d34bf2c
fix: reopen callback fight on terminal triage statuses (#735)
aaronlippold Jun 4, 2026
2cab264
fix: autosave cascade — guard against rule switch during timer
aaronlippold Jun 4, 2026
54733e5
fix: navbar Pinia setup + UnifiedRuleForm NA fields + lint
aaronlippold Jun 4, 2026
3c06c3a
docs: migration roadmap + verified patterns + ADNM rake task
aaronlippold Jun 4, 2026
8bfbc58
feat: Review defensive callback + intent registry (v2-05f.68.1)
aaronlippold Jun 4, 2026
f349878
feat: DB CHECK constraints for Review FK consistency (v2-05f.68.2)
aaronlippold Jun 4, 2026
db98f26
fix: Rule#update_inspec_code — update_column + remove skip flag
aaronlippold Jun 4, 2026
ba3bbfd
fix: Membership cascade + Component callback hygiene (v2-05f.68.4)
aaronlippold Jun 4, 2026
e10e322
fix: Callback stabilization — expert review findings
aaronlippold Jun 5, 2026
07f5332
feat: test-prof global refind:true + RuboCop cop + climate_control
aaronlippold Jun 5, 2026
115b819
test: Callback stabilization tests + parametric shared examples
aaronlippold Jun 5, 2026
1a71b67
refactor: Split 4 monolith specs into 35 domain files
aaronlippold Jun 5, 2026
5c7f1fa
docs: Testing guide — test-prof, parallel safety, spec organization
aaronlippold Jun 5, 2026
1b3425d
Plan v2-480.1: MergeAnalyzer + rake CLI implementation roadmap
wdower Jun 5, 2026
0942501
fix: RuleForm fixtext — show child's own text, not parent's
aaronlippold Jun 5, 2026
c1e67fa
test: Regression guard — no custom status getter/setter on Rule
aaronlippold Jun 5, 2026
204a6ed
test: Fill coverage gaps — fixtext delegation + reopen bypass
aaronlippold Jun 5, 2026
5509cf5
docs: Add Claude-pace estimates to MergeAnalyzer plan + recalibrate
aaronlippold Jun 5, 2026
7f787ab
docs: Expert review of MergeAnalyzer plan — 61 findings, 11 cards
aaronlippold Jun 5, 2026
fbc021e
docs: Add expert review callout to MergeAnalyzer plan
aaronlippold Jun 5, 2026
5da00bc
docs: Fully integrate expert review into MergeAnalyzer plan
aaronlippold Jun 5, 2026
d88b312
Unify backup serializer timestamps at iso8601(6) — v2-480.12
wdower Jun 5, 2026
95aa9c8
Add rule_satisfactions FK constraints (2-pass) — v2-480.13
wdower Jun 5, 2026
69945df
fix: UserBlueprint admin view + eliminate raw .to_json leaks (security)
aaronlippold Jun 5, 2026
c8827c0
fix: Remove dead comments route + delete 6 unused Jbuilder templates
aaronlippold Jun 5, 2026
a414ee2
feat: Unlink lockout + initiate_link endpoint + ADNM rake task tests
aaronlippold Jun 5, 2026
0e73641
docs: Release roadmap + API completeness analysis + test account safety
aaronlippold Jun 5, 2026
a985064
feat: Remove Turbolinks + install Vue Router 3
aaronlippold Jun 5, 2026
02db175
feat: Pinia ruleSelection store + event bus migration
aaronlippold Jun 5, 2026
ccfacc8
chore: Fix 2 RuboCop autocorrect offenses from pre-push
aaronlippold Jun 5, 2026
b42fefb
feat: Filter UX — additive defaults + count + pills
aaronlippold Jun 6, 2026
5f0dbac
refactor: Split RuleNavigator + extract AlsoSatisfiesModal
aaronlippold Jun 6, 2026
dc809d6
feat: Viewport-locked editor layout with b-card panels
aaronlippold Jun 6, 2026
aae73c0
feat: Pin sidebar header + toolbar above scroll regions
aaronlippold Jun 6, 2026
dec8afd
feat: Add CommentStatusChip — condensed comment period indicator
aaronlippold Jun 6, 2026
ef518b1
feat: Chrome condensation — breadcrumbs + toggleable filter bar
aaronlippold Jun 6, 2026
0fd3383
feat: Toolbar reorg — overflow menu + 3-zone layout + tooltips
aaronlippold Jun 6, 2026
2984c10
feat: Add tooltips to RuleActionsToolbar buttons
aaronlippold Jun 6, 2026
81f34b0
feat: Add tooltips to CommentModal buttons + RuleActionsToolbar
aaronlippold Jun 6, 2026
edbc01b
fix: Edit mode scroll — add vulcan-editor-layout to Rules.vue root
aaronlippold Jun 6, 2026
d9d9ded
refactor: DRY dark mode variant overrides — @each loops per BS5.3
aaronlippold Jun 6, 2026
8a48856
chore: Fix Prettier indentation in RulesCodeEditorView template
aaronlippold Jun 6, 2026
d317b2c
test: Fix shared context issues — naming, dead vars, create!, collision
aaronlippold Jun 6, 2026
842d62d
test: Fix global Audited mutation — scoped without_auditing blocks
aaronlippold Jun 6, 2026
380bce3
test: Fix stale satisfied_by key assertion — add component_prefix
aaronlippold Jun 6, 2026
e07b1a3
test: Remove heavyweight shared context from comment_phase spec
aaronlippold Jun 6, 2026
b9b9d59
test: Rename lock specs to components_lock_* — correct namespace
aaronlippold Jun 6, 2026
bd2ff37
test: add fixtures + factory traits for merge analyzer specs — v2-480.1
wdower Jun 6, 2026
6e2136c
feat(merge): ReviewMatcher composite-key partition — v2-480.1
wdower Jun 6, 2026
57a4f69
feat(merge): MergeInput normalizes JSON archive + spreadsheet — v2-480.1
wdower Jun 6, 2026
9aa2fb1
feat(merge): Strategy with per-entity defaults — v2-480.1
wdower Jun 6, 2026
5ea5a4f
refactor(rule): extract MERGEABLE_FIELDS constant — v2-480.1
wdower Jun 6, 2026
eecaf18
feat(merge): RuleFieldDiffer via hash comparison — v2-480.1
wdower Jun 6, 2026
830d1c8
feat(merge): RuleThreeWay per-field 3-way resolver — v2-480.1
wdower Jun 6, 2026
6165c17
feat(merge): MergePlan + MergeResult + partition invariant — v2-480.1
wdower Jun 6, 2026
b762f52
feat(merge): Analyzer assembles MergePlan + preconditions — v2-480.1
wdower Jun 6, 2026
2974326
feat(sync): rake sync:diff + sync:preview CLI — v2-480.1
wdower Jun 6, 2026
d0c2b21
test(perf): merge analyzer 500/5000 benchmark — v2-480.1
wdower Jun 6, 2026
fcdaed0
test: Extract srg_model_base — DRY shared context for reviews + rules
aaronlippold Jun 6, 2026
91eae55
test: Regroup 7 misplaced test blocks into correct domain files
aaronlippold Jun 6, 2026
65cb18e
test: Remove redundant rubocop:disable + dead let_it_be + stale refs
aaronlippold Jun 6, 2026
d3cf0d7
test: Fix parallel safety — Review.last → scoped queries + remove ensure
aaronlippold Jun 6, 2026
534a7ef
test: Add Review callback coverage — triage_status + redirect + replies
aaronlippold Jun 6, 2026
da1d727
test: Add Review.bulk_triage model-level unit tests — 5 untested paths
aaronlippold Jun 6, 2026
abbf365
test: Fix RSpec/IndexedLet cop — rename indexed let vars
aaronlippold Jun 6, 2026
71bb97f
test: Add valid?(:import_integrity) context tests — verify scoping
aaronlippold Jun 6, 2026
4549eaf
test: Fix RSpec/DescribeMethod cop — nest describe inside RSpec.describe
aaronlippold Jun 6, 2026
443b723
test: Add Component#overlay + #duplicate new_srg + import failure tests
aaronlippold Jun 6, 2026
f1926dd
test: Add Component member search + validation edge cases
aaronlippold Jun 6, 2026
a5bc527
test: Add Review edge case coverage — scopes + accessor + sync
aaronlippold Jun 6, 2026
5052f16
test: Add Component amoeba + comment_period boundary tests
aaronlippold Jun 6, 2026
32c6845
test: Cover skipped v2-8ea.9 ACs — no more deferred gaps
aaronlippold Jun 6, 2026
cb6c9ee
test: Cover skipped v2-8ea.13 ACs — name delegation + merge + FK
aaronlippold Jun 6, 2026
4757247
test: Cover skipped v2-8ea.15 ACs — amoeba + admin + metadata
aaronlippold Jun 6, 2026
4271c98
feat: Add SPA auth endpoints — GET /me + POST login + DELETE logout
aaronlippold Jun 6, 2026
5e6a14d
feat: Add GET /api/settings — public pre-auth UI config
aaronlippold Jun 6, 2026
2732afa
feat: Add effective_permissions to project/component JSON
aaronlippold Jun 6, 2026
cfd5654
fix: Add effective_permissions to OpenAPI schemas + contract tests
aaronlippold Jun 6, 2026
9f8892b
feat: Add GET /api/navigation — app shell data for SPA
aaronlippold Jun 6, 2026
1372cdc
fix: Centralize review serialization on ReviewBlueprint
aaronlippold Jun 6, 2026
665a35c
docs: ADR for API filtering concern — pagy + has_scope
aaronlippold Jun 6, 2026
18c2534
feat: Add ApiFilterable concern with pagy + has_scope
aaronlippold Jun 7, 2026
59d6777
fix: Replace MAX(version) string sort with numeric SUBSTRING parsing
aaronlippold Jun 7, 2026
007dabd
refactor: Migrate render_as_hash to render_as_json
aaronlippold Jun 7, 2026
4c438d0
fix: Add commenter_email + auth coverage + schema fixes
aaronlippold Jun 7, 2026
7d44af8
chore: Add OpenAPI bundle staleness check + remove dead overcommit
aaronlippold Jun 7, 2026
e7ac60c
feat: Integrate Scalar API docs with Vulcan design system
aaronlippold Jun 7, 2026
ac18be3
refactor: Migrate render_as_hash in Blueprint nested calls
aaronlippold Jun 7, 2026
1d604fe
chore: Exclude HAML files from rubocop — parser cannot handle them
aaronlippold Jun 7, 2026
bdc26a1
fix: Eliminate brakeman SQL injection warning in VersionSortable
aaronlippold Jun 7, 2026
d1ec351
chore: Fix Gemfile lint + lefthook openapi --quiet flag
aaronlippold Jun 7, 2026
a11363d
test: Migrate spec files to render_as_json string keys
aaronlippold Jun 7, 2026
6dc1545
feat: Add ProjectAccessRequestBlueprint — replace hand-built hashes
aaronlippold Jun 7, 2026
8f5703b
feat: Add AuditBlueprint — replace VulcanAudit#format in controllers
aaronlippold Jun 7, 2026
db6f2a9
refactor: Replace current_user.slice with UserBlueprint in layout
aaronlippold Jun 7, 2026
95813d4
fix: Use string key for consent_config required field
aaronlippold Jun 7, 2026
9494d71
feat: Add usePermissions composable + roleGteTo utility
aaronlippold Jun 7, 2026
bae1688
feat: Root components provide permissions from Blueprint data
aaronlippold Jun 7, 2026
f9cfccf
chore: Delete EmptyObjectMixin — dead code, zero consumers
aaronlippold Jun 7, 2026
2ffa786
feat: Add useDateFormat composable + begin mixin migration
aaronlippold Jun 7, 2026
0c5f678
feat: Add useAuthToken composable — extract from FormMixin
aaronlippold Jun 7, 2026
51cbe7c
feat: Add 4 utility composables from mixins
aaronlippold Jun 7, 2026
4e81048
fix: Update jwt 3.2.0 + puma 7.2.1 — resolve 3 CVEs
aaronlippold Jun 7, 2026
1c5b96e
fix: Stabilize upgrade:verify + admin:bootstrap tests
aaronlippold Jun 7, 2026
ce9e18d
fix: Add bundler/setup to legacy_db_renamer
aaronlippold Jun 7, 2026
9053f75
test: Fix missed render_as_json string key migrations
aaronlippold Jun 8, 2026
a4382a3
wip: Scalar agent investigation + openapi route aliases
aaronlippold Jun 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
70 changes: 70 additions & 0 deletions .beads/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Dolt database (managed by Dolt, not git)
dolt/
embeddeddolt/

# Runtime files
bd.sock
bd.sock.startlock
sync-state.json
last-touched
.exclusive-lock

# Daemon runtime (lock, log, pid)
daemon.*

# Push state (runtime, per-machine)
push-state.json

# Lock files (various runtime locks)
*.lock

# Credential key (encryption key for federation peer auth — never commit)
.beads-credential-key

# Local version tracking (prevents upgrade notification spam after git ops)
.local_version

# Worktree redirect file (contains relative path to main repo's .beads/)
# Must not be committed as paths would be wrong in other clones
redirect

# Sync state (local-only, per-machine)
# These files are machine-specific and should not be shared across clones
.sync.lock
export-state/
export-state.json

# Ephemeral store (SQLite - wisps/molecules, intentionally not versioned)
ephemeral.sqlite3
ephemeral.sqlite3-journal
ephemeral.sqlite3-wal
ephemeral.sqlite3-shm

# Dolt server management (auto-started by bd)
dolt-server.pid
dolt-server.log
dolt-server.lock
dolt-server.port
dolt-server.activity

# Corrupt backup directories (created by bd doctor --fix recovery)
*.corrupt.backup/

# Backup data (auto-exported JSONL, local-only)
backup/

# Per-project environment file (Dolt connection config, GH#2520)
.env

# Legacy files (from pre-Dolt versions)
*.db
*.db?*
*.db-journal
*.db-wal
*.db-shm
db.sqlite
bd.db
# NOTE: Do NOT add negation patterns here.
# They would override fork protection in .git/info/exclude.
# Config files (metadata.json, config.yaml) are tracked by git by default
# since no pattern above ignores them.
81 changes: 81 additions & 0 deletions .beads/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# Beads - AI-Native Issue Tracking

Welcome to Beads! This repository uses **Beads** for issue tracking - a modern, AI-native tool designed to live directly in your codebase alongside your code.

## What is Beads?

Beads is issue tracking that lives in your repo, making it perfect for AI coding agents and developers who want their issues close to their code. No web UI required - everything works through the CLI and integrates seamlessly with git.

**Learn more:** [github.com/steveyegge/beads](https://github.com/steveyegge/beads)

## Quick Start

### Essential Commands

```bash
# Create new issues
bd create "Add user authentication"

# View all issues
bd list

# View issue details
bd show <issue-id>

# Update issue status
bd update <issue-id> --claim
bd update <issue-id> --status done

# Sync with Dolt remote
bd dolt push
```

### Working with Issues

Issues in Beads are:
- **Git-native**: Stored in Dolt database with version control and branching
- **AI-friendly**: CLI-first design works perfectly with AI coding agents
- **Branch-aware**: Issues can follow your branch workflow
- **Always in sync**: Auto-syncs with your commits

## Why Beads?

✨ **AI-Native Design**
- Built specifically for AI-assisted development workflows
- CLI-first interface works seamlessly with AI coding agents
- No context switching to web UIs

🚀 **Developer Focused**
- Issues live in your repo, right next to your code
- Works offline, syncs when you push
- Fast, lightweight, and stays out of your way

🔧 **Git Integration**
- Automatic sync with git commits
- Branch-aware issue tracking
- Dolt-native three-way merge resolution

## Get Started with Beads

Try Beads in your own projects:

```bash
# Install Beads
curl -sSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash

# Initialize in your repo
bd init

# Create your first issue
bd create "Try out Beads"
```

## Learn More

- **Documentation**: [github.com/steveyegge/beads/docs](https://github.com/steveyegge/beads/tree/main/docs)
- **Quick Start Guide**: Run `bd quickstart`
- **Examples**: [github.com/steveyegge/beads/examples](https://github.com/steveyegge/beads/tree/main/examples)

---

*Beads: Issue tracking that moves at the speed of thought* ⚡
57 changes: 57 additions & 0 deletions .beads/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# Beads Configuration File
# This file configures default behavior for all bd commands in this repository
# All settings can also be set via environment variables (BD_* prefix)
# or overridden with command-line flags

# Issue prefix for this repository (used by bd init)
# If not set, bd init will auto-detect from directory name
# Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc.
# issue-prefix: ""

# Use no-db mode: JSONL-only, no Dolt database
# When true, bd will use .beads/issues.jsonl as the source of truth
# no-db: false

# Enable JSON output by default
# json: false

# Feedback title formatting for mutating commands (create/update/close/dep/edit)
# 0 = hide titles, N > 0 = truncate to N characters
# output:
# title-length: 255

# Default actor for audit trails (overridden by BEADS_ACTOR or --actor)
# actor: ""

# Export events (audit trail) to .beads/events.jsonl on each flush/sync
# When enabled, new events are appended incrementally using a high-water mark.
# Use 'bd export --events' to trigger manually regardless of this setting.
# events-export: false

# Multi-repo configuration (experimental - bd-307)
# Allows hydrating from multiple repositories and routing writes to the correct database
# repos:
# primary: "." # Primary repo (where this database lives)
# additional: # Additional repos to hydrate from (read-only)
# - ~/beads-planning # Personal planning repo
# - ~/work-planning # Work planning repo

# JSONL backup (periodic export for off-machine recovery)
# Auto-enabled when a git remote exists. Override explicitly:
# backup:
# enabled: false # Disable auto-backup entirely
# interval: 15m # Minimum time between auto-exports
# git-push: false # Disable git push (export locally only)
# git-repo: "" # Separate git repo for backups (default: project repo)

# Integration settings (access with 'bd config get/set')
# Non-secret keys (stored in the database):
# - jira.url, jira.project
# - linear.team_id
# - github.org, github.repo
#
# Secret keys (stored in this file but prefer env vars to avoid git exposure):
# - linear.api_key → use LINEAR_API_KEY env var instead
# - github.token → use GITHUB_TOKEN env var instead

sync.remote: "git+https://github.com/mitre/vulcan.git"
Empty file added .beads/interactions.jsonl
Empty file.
925 changes: 925 additions & 0 deletions .beads/issues.jsonl

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions .beads/metadata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"database": "dolt",
"backend": "dolt",
"dolt_mode": "server",
"dolt_database": "vulcan_v2",
"project_id": "cb49a1de-7945-4a6b-9c30-2cca1bdbe6dc"
}
18 changes: 14 additions & 4 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,12 @@
#
# DATABASE_PORT=5432
# DATABASE_HOST=127.0.0.1
# DATABASE_NAME=vulcan_development # dev + production only; test is hardcoded (vulcan_test)
# POSTGRES_PORT=5432
#
# macOS with Kerberos/GSSAPI connection errors (corporate networks):
# DATABASE_GSSENCMODE=disable
#
# Worktree isolation: suffix appended to database names in database.yml
# Each worktree gets its own database (e.g., vulcan_vue_development_v2)
# DB_SUFFIX=_v2
#
# App server port (Puma):
# PORT=3000

Expand Down Expand Up @@ -159,6 +156,19 @@ VULCAN_CONSENT_TTL=0
# VULCAN_PASSWORD_MIN_NUMBER=2
# VULCAN_PASSWORD_MIN_SPECIAL=2

# =============================================================================
# API TOKENS — Personal Access Tokens for programmatic API access
# =============================================================================
# Enable/disable the PAT feature entirely. When false, token management
# endpoints return 404 and Authorization: Token headers are ignored.
VULCAN_API_TOKENS_ENABLED=true
# Maximum number of active (non-revoked) tokens per user
# VULCAN_API_TOKENS_MAX_PER_USER=20
# Maximum token lifetime in days (enforced on creation)
# VULCAN_API_TOKENS_MAX_LIFETIME_DAYS=365
# Auto-revoke tokens unused for this many days (rake api_tokens:revoke_idle)
# VULCAN_API_TOKENS_AUTO_REVOKE_IDLE_DAYS=90

# =============================================================================
# SLACK INTEGRATION (Optional)
# =============================================================================
Expand Down
6 changes: 6 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
const rulesDirPlugin = require("eslint-plugin-rulesdir");

rulesDirPlugin.RULES_DIR = "eslint-rules";

module.exports = {
env: {
browser: true,
es6: true,
node: true,
},
plugins: ["rulesdir"],
extends: ["plugin:vue/recommended", "prettier", "plugin:prettier/recommended"],
ignorePatterns: [
"docs/.vitepress/cache/**",
Expand All @@ -16,6 +21,7 @@ module.exports = {
"no-console": "warn",
"no-return-await": "warn",
"no-throw-literal": "warn",
"rulesdir/comment-tracker": "error",
"vue/require-default-prop": "off",
"vue/prop-name-casing": "off",
"vue/multi-word-component-names": "off",
Expand Down
5 changes: 3 additions & 2 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,10 @@ jobs:
env:
GITHUB_DEPLOY: "true" # Tell VitePress to use / base for custom domain
run: |
# DO NOT install main dependencies - they cause Vue 2/3 conflict
# Docs have their own package.json with Vue 3 deps (isolated from
# the Rails app's Vue 2). Install only docs deps in CI.
cd docs
yarn install
yarn install --frozen-lockfile
yarn build

- name: Upload artifact
Expand Down
10 changes: 8 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,17 @@ AGENT-STATUS/
/app/assets/builds/*
!/app/assets/builds/.keep
.beads/recovery-context.md
.beads/recovery-prompt.md
.beads/dolt-backup*

# Beads / Dolt files (added by bd init)
.dolt/
*.db
.beads-credential-key
# Beads auto-exports the entire issues database to issues.jsonl on each
# bd write — local-only artifact, not meant for git.
# Beads auto-exports to issues.jsonl on each bd write.
# The .beads/ copy is tracked for team visibility.
issues.jsonl
!.beads/issues.jsonl

# Local build / tool caches (yarn, corepack, node) when running outside Docker
/.cache/
Loading
Loading