Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
538 commits
Select commit Hold shift + click to select a range
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
6bf42b5
test: Fix remaining render_as_json string key migrations
aaronlippold Jun 8, 2026
507fdcd
fix: Standardize Settings integer types + add type contract test
aaronlippold Jun 8, 2026
2439dd4
fix: Disable auditing in test env — eliminate parallel deadlocks
aaronlippold Jun 8, 2026
60227f8
fix: Add network reachability guard to Okta OIDC integration tests
aaronlippold Jun 8, 2026
c5b94f2
fix: Restore authenticate_scope! for Devise edit/update/destroy
aaronlippold Jun 8, 2026
8ab53f0
chore: Update devise-security to 65683e9 — nil record guard
aaronlippold Jun 8, 2026
b3d0705
feat: Load Scalar API docs from registry + CSP update
aaronlippold Jun 9, 2026
32119b2
chore: Add OpenAPI registry publish to release workflow + Node 24
aaronlippold Jun 9, 2026
8b01ed6
feat: Add vitepress-openapi auto-generated API reference
aaronlippold Jun 9, 2026
0c010ea
chore: Add openapi:docs command + CI workflow + documentation updates
aaronlippold Jun 9, 2026
0129174
bd: clear sync.remote
wdower Jun 7, 2026
6955818
bd: update sync.remote
wdower Jun 7, 2026
15461bd
fix(merge): RuleFieldDiffer reads locked_fields correctly — v2-dqx
wdower Jun 7, 2026
5539f6b
feat(rule): NESTED_MERGEABLE_ASSOCIATIONS schema — v2-dqx
wdower Jun 7, 2026
1670b83
feat(merge): NestedAssociationDiffer service — v2-dqx
wdower Jun 7, 2026
295eba6
feat(merge): VirtualRule exposes nested associations — v2-dqx
wdower Jun 7, 2026
1a357ba
feat(merge): wire NestedAssociationDiffer into Analyzer — v2-dqx
wdower Jun 8, 2026
4b0dacb
test(merge): rake-CLI regression for locked-section bypass — v2-dqx
wdower Jun 8, 2026
63abe6d
fix(merge): analyzer skips comment_phase precondition — v2-dqx
wdower Jun 8, 2026
9b9780b
feat(merge): MergeApplier skeleton + sync event lifecycle — v2-480.8
wdower Jun 8, 2026
f30e5cc
feat(merge): snapshot + archive hash + apply precondition — v2-480.8
wdower Jun 8, 2026
187aa6a
feat(merge): apply rule auto-merged field changes — v2-480.8
wdower Jun 8, 2026
fb7de56
feat(merge): skip conflicts with explicit log row — v2-480.8
wdower Jun 8, 2026
ac6d3ca
refactor(merge): MergePlan stores partition records — v2-480.8
wdower Jun 8, 2026
e10587d
feat(merge): import only_theirs reviews via ReviewBuilder — v2-480.8
wdower Jun 8, 2026
1fd9b7f
feat(merge): review field updates + dual-write commentable — v2-480.8
wdower Jun 8, 2026
62291c2
feat(merge): apply only_theirs satisfactions via upsert_all — v2-480.8
wdower Jun 8, 2026
9f1a342
feat(merge): apply only_theirs memberships at viewer tier — v2-480.8
wdower Jun 8, 2026
980aae8
feat(merge): quarantine invalid records — v2-480.8
wdower Jun 8, 2026
f443eed
feat(merge): VulcanAudit correlation scope — v2-480.8
wdower Jun 8, 2026
f3c5900
feat(merge): stamp component sync metadata on apply — v2-480.8
wdower Jun 8, 2026
2471867
test(merge): integration round-trip via Analyzer + Applier — v2-480.8
wdower Jun 8, 2026
9a98623
test(perf): MergeApplier 500-write benchmark — v2-480.8
wdower Jun 8, 2026
2e223c2
feat(merge): one-pending-sync-per-component invariant — v2-480.30
wdower Jun 8, 2026
4c2c003
feat(merge): advisory lock + reload-locked precondition — v2-480.30
wdower Jun 8, 2026
91b876d
feat(merge): log_review_insert maps to actual Review.id — v2-480.31
wdower Jun 8, 2026
92ba525
perf(merge): eager_load helper + memoize rule_id_map — v2-480.32
wdower Jun 8, 2026
04e2822
feat(merge): savepoint quarantine + buffered drain — v2-480.27
wdower Jun 8, 2026
53f1a0c
feat(merge): import review reactions on insert path — v2-480.28
wdower Jun 8, 2026
6889d7a
feat(merge): archive_hash replay protection — v2-480.29
wdower Jun 8, 2026
4ffeb2f
feat(merge): apply_new_rules imports only_theirs rules — v2-480.24
wdower Jun 8, 2026
a356ed9
fix(merge): remap addressed_by_rule_id via rule_id_map — v2-480.25
wdower Jun 8, 2026
5459ebf
feat(merge): bump backup_format_version to 1.1 — v2-480.26
wdower Jun 8, 2026
d411c96
fix(merge): route nested FieldChanges to nested records — v2-480.23
wdower Jun 8, 2026
f13ba2d
fix(merge): move severity_override_guidance to Severity — v2-480.33
wdower Jun 8, 2026
a9c2bd0
feat(merge): surface nested one-sided records in plan log — v2-480.34
wdower Jun 8, 2026
b501cb4
feat(merge): surface collisions + add ceilings — v2-480.35
wdower Jun 9, 2026
73a71bb
feat(merge): atomic snapshot + retention + scoped repair — v2-480.38
wdower Jun 9, 2026
9782aa5
feat(merge): persist failure_diagnostics on sync events — v2-480.36
wdower Jun 9, 2026
b6b9f49
feat(merge): plumb actor + bulk-insert review audit rows — v2-480.37
wdower Jun 9, 2026
4e4c094
docs(merge): component meta is preserved, not merged — v2-480.41
wdower Jun 9, 2026
f18bb04
feat(merge): review skip audit + status state machine — v2-480.40
wdower Jun 9, 2026
c138cc6
refactor(merge): MergePlan exposes frozen accessors — v2-480.42
wdower Jun 9, 2026
50f6341
feat(merge): central verb map + Review::MERGEABLE_FIELDS — v2-480.39
wdower Jun 9, 2026
00e9c6e
feat(import): manifest validator merge-mode warning — v2-480.9
wdower Jun 9, 2026
ca10569
feat(merge): signed-archive gate — v2-480.9
wdower Jun 9, 2026
1e115b7
feat(merge): MergeOrchestrator service — v2-480.9
wdower Jun 9, 2026
070d3fe
feat(merge): MergeJob wraps Orchestrator on ActiveJob — v2-480.9
wdower Jun 9, 2026
941bafb
feat: Add DISA guide migration rake task
aaronlippold Jun 9, 2026
77677f0
feat: Update DISA Vendor STIG Process Guide to V4R3
aaronlippold Jun 9, 2026
e492fc0
feat: Add native HTML element dark mode variables
aaronlippold Jun 9, 2026
4a4cfb8
chore: Untrack .beads/interactions.jsonl
aaronlippold Jun 9, 2026
58e8126
fix: Blank VulnDiscussion + Severity for NA, Check/Fix for ADNM
aaronlippold Jun 9, 2026
1f6140a
refactor: Regroup component specs by domain + fix shared context
aaronlippold Jun 9, 2026
fd9c0c9
test: Add auth tests for 9 component controller actions
aaronlippold Jun 9, 2026
8e6dd57
test: Add auth rejection tests for 8 partial-coverage actions
aaronlippold Jun 9, 2026
d33064c
feat: Add Phase 1 composables — mixin migration prep
aaronlippold Jun 9, 2026
b19b3a0
fix: Eliminate all unit suite stderr noise — six root causes
aaronlippold Jun 9, 2026
ecf215a
test: Pin single-Vue-copy invariant for the vitest Vue alias
aaronlippold Jun 10, 2026
ca10a67
test: Assert navigation and window.open side effects in specs
aaronlippold Jun 10, 2026
d8ac385
refactor: Migrate shared/ components off non-Alert mixins
aaronlippold Jun 10, 2026
7cc353b
refactor: Migrate project/ components off non-Alert mixins
aaronlippold Jun 10, 2026
35ad7bb
fix: Float navbar utility dropdowns over content at all widths
aaronlippold Jun 10, 2026
11ddc8e
fix: Wrap ComponentCard action toolbar cleanly at narrow widths
aaronlippold Jun 10, 2026
b6f0426
refactor: Migrate permissions cluster to inject — delete dead components
aaronlippold Jun 11, 2026
87520cc
refactor: Remove dead FormMixin imports from components/
aaronlippold Jun 11, 2026
a8b6a45
refactor: Migrate real authenticityToken consumers to useAuthToken
aaronlippold Jun 11, 2026
6e1d509
refactor: Migrate ComponentComments to composables — delete dead modal
aaronlippold Jun 11, 2026
e4fc833
refactor: Migrate ProjectComponent off non-Alert mixins
aaronlippold Jun 11, 2026
a579fd9
fix: Point navbar DISA guide link at the process guide page
aaronlippold Jun 11, 2026
83cfb7d
test: Fix merge engine spec failures — auditing opt-in + fixture shape
aaronlippold Jun 11, 2026
97facb9
fix: Convert project_metadata.data to jsonb — parity with components
aaronlippold Jun 11, 2026
c59f3dc
fix: Reload on expired-session 401 — surface Devise flash + return-to
aaronlippold Jun 11, 2026
f9db29d
docs: Add Bootstrap tier-wiring design + evidence appendix
aaronlippold Jun 11, 2026
b461f70
refactor: Migrate rules/ components off non-Alert mixins
aaronlippold Jun 11, 2026
b6f83c6
chore: Remove tracker card IDs from code and test comments
aaronlippold Jun 11, 2026
f3a8e28
chore: Enforce zero-warning ESLint on spec/javascript
aaronlippold Jun 11, 2026
436f6dd
chore: Remove tracker card IDs from Ruby code and specs
aaronlippold Jun 11, 2026
b0d5074
fix: Match current board prefix in tracker-ID lint rules
aaronlippold Jun 11, 2026
3ccd6d7
chore: Remove bare card-ID fragments from comments
aaronlippold Jun 11, 2026
6599aef
refactor: Migrate users/triage/projects/navbar off non-Alert mixins
aaronlippold Jun 11, 2026
d5027c9
fix: Use ky's pre-parsed error.data for HTTP error bodies in baseApi
aaronlippold Jun 11, 2026
7636ed0
feat: Add useToast composable with cross-pack Toaster event bridge
aaronlippold Jun 11, 2026
d4e38c4
refactor: Migrate all AlertMixin consumers to useToast
aaronlippold Jun 11, 2026
b40f754
fix: Wire missing toast handler in Projects refresh error path
aaronlippold Jun 11, 2026
cc85743
refactor: Delete mixins directory — composables migration complete
aaronlippold Jun 11, 2026
072bcfa
refactor: Derive comment-period help card from triageVocabulary
aaronlippold Jun 11, 2026
80f6ead
fix: Redirect sign-out to the sign-in page so the flash survives
aaronlippold Jun 11, 2026
7406264
fix: Make navbar sign-out a navigational DELETE so Devise can flash
aaronlippold Jun 11, 2026
775ec5c
test: Cover the Projects refresh error handler wiring
aaronlippold Jun 11, 2026
3af4ab2
feat(merge): SyncController + merge/status routes — v2-480.9
wdower Jun 10, 2026
b584335
refactor(merge): align Phase 2c with card — import_backup?merge=true
wdower Jun 13, 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"
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
13 changes: 11 additions & 2 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ on:
- main
paths:
- 'docs/**'
- 'doc/openapi.yaml'
- 'doc/openapi/**'
- '.github/workflows/docs.yml'
workflow_dispatch:

Expand Down Expand Up @@ -38,13 +40,20 @@ jobs:
- name: Setup Pages
uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0

- name: Install root dependencies (for redocly CLI)
run: yarn install --frozen-lockfile

- name: Generate OpenAPI JSON for docs
run: yarn openapi:docs

- name: Install and build docs
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
22 changes: 22 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,25 @@ jobs:
image: mitre/vulcan:${{ steps.meta.outputs.version }}
artifact-name: image.spdx.json
dependency-snapshot: true

# ─── OPENAPI REGISTRY PUBLISH ───
openapi-publish:
runs-on: ubuntu-24.04
timeout-minutes: 5
permissions:
contents: read
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 1

- name: Publish OpenAPI spec to Scalar registry
run: |
npx @scalar/cli auth login --token "$SCALAR_TOKEN"
npx @scalar/cli registry publish doc/openapi.yaml \
--namespace mitre \
--slug vulcan \
--version "${{ github.event.release.tag_name }}" \
--force
env:
SCALAR_TOKEN: ${{ secrets.SCALAR_REGISTRY_TOKEN }}
12 changes: 10 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,19 @@ 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
# interactions.jsonl is session-local chat history — not shared
.beads/interactions.jsonl

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