Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
714 commits
Select commit Hold shift + click to select a range
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
51d7583
fix: Gate profile email changes on password, not every save
aaronlippold Jun 12, 2026
af30152
feat: Land OIDC sign-out on /users/signed_out with correct fallback
aaronlippold Jun 12, 2026
a41f50d
docs: Rewrite SSO setup guide operator-first with provider table
aaronlippold Jun 12, 2026
d6dcf2f
docs: Add multi-provider OIDC ADR (multi-link identities)
aaronlippold Jun 13, 2026
be83f52
feat: Add multi-provider OIDC registry (Settings.oidc.providers)
aaronlippold Jun 13, 2026
e75ed0f
feat: Register an OIDC strategy per provider with per-provider buttons
aaronlippold Jun 14, 2026
7c279b8
feat: Add identities table for multi-link provider accounts
aaronlippold Jun 14, 2026
60c7ab0
feat: Rewrite from_omniauth to identity-first with cold-match block
aaronlippold Jun 14, 2026
83258f6
feat: Backfill identities from existing non-local users
aaronlippold Jun 14, 2026
ac06732
feat: Wire jwt_bearer private key loading for login.gov auth
aaronlippold Jun 14, 2026
b6f3c40
feat: Resolve OIDC logout per provider from session
aaronlippold Jun 14, 2026
331db01
feat: Make CSP and health check multi-provider OIDC aware
aaronlippold Jun 14, 2026
480ea9c
feat: Add User identity mutation API — link/unlink/can_unlink
aaronlippold Jun 14, 2026
2ab55e3
refactor: Replace upsert_identity with link_identity! in from_omniauth
aaronlippold Jun 14, 2026
f25c72a
refactor: Thin identity controllers — link/unlink use model API
aaronlippold Jun 14, 2026
56c58b2
feat: Add Connected Accounts profile section and admin view
aaronlippold Jun 14, 2026
4dab840
feat: Add provider rename rake task + rubocop task exclusion
aaronlippold Jun 14, 2026
6c8bfba
feat: Polish Connected Accounts with Add Account dropdown
aaronlippold Jun 14, 2026
f37149f
fix: Update OpenAPI schema + contract tests for identity fields
aaronlippold Jun 14, 2026
1e33e6a
feat: Add Register with provider buttons to registration tab
aaronlippold Jun 14, 2026
daad80d
feat: Add per-provider logos with proper aspect ratios
aaronlippold Jun 14, 2026
a819bbd
docs: Add multi-provider OIDC + Login.gov to .env.example
aaronlippold Jun 14, 2026
849f6b8
refactor: DRY provider buttons into shared partial
aaronlippold Jun 14, 2026
9ce696f
fix: Replace provider logos with official dark-mode-aware SVGs
aaronlippold Jun 14, 2026
54e27ec
refactor: Redesign login page layout — centered, balanced, polished
aaronlippold Jun 14, 2026
22c47ba
fix: Strengthen login card visibility with shadow + border
aaronlippold Jun 14, 2026
2cff8d3
chore: Add provider-logo class to button partial images
aaronlippold Jun 14, 2026
22aca0d
feat: Allow SSO users to set a local password (GitLab pattern)
aaronlippold Jun 14, 2026
a5a4a83
feat: Stack provider logos above text in login/register buttons
aaronlippold Jun 14, 2026
3760016
revert: Return provider buttons to inline logo + text layout
aaronlippold Jun 14, 2026
eda6ad2
feat: Add Link Existing Account flow on cold-match conflict
aaronlippold Jun 14, 2026
dd665ec
feat: Add Link Existing Account form to login page
aaronlippold Jun 14, 2026
55f4988
docs: Add Login.gov setup guide + multi-provider env var docs
aaronlippold Jun 14, 2026
3b89c47
fix: Update specs for multi-provider registry (oidc → okta)
aaronlippold Jun 15, 2026
a363376
fix: Move fields-hidden alert above Status + add rule histories
aaronlippold Jun 16, 2026
d940afc
refactor: Rename Activity/History/Comment History labels
aaronlippold Jun 16, 2026
4878e82
feat: Add SRG info with version currency to comment views
aaronlippold Jun 16, 2026
2119a0f
feat: Add VuePropsHelper + HAML serialization standard
aaronlippold Jun 16, 2026
5843ca5
feat: Add VersionCurrency — is_latest dots on all list pages
aaronlippold Jun 16, 2026
734299e
docs: Add DISA Library Service ADR + v2.x roadmap
aaronlippold Jun 16, 2026
623c52d
fix: Update UserProfile unlink tests for identity-based model
aaronlippold Jun 16, 2026
a731ed6
docs: SPA spike report + updated roadmap
aaronlippold Jun 16, 2026
0d8258e
fix: Use configured Devise unlock strategy in test environment
aaronlippold Jul 9, 2026
a80edde
feat: Add JSON support to Devise auth flows
aaronlippold Jul 9, 2026
7582af0
docs: Add OpenAPI specs + contract tests for Devise auth flows
aaronlippold Jul 9, 2026
2557cf3
chore(deps): Update 10 gems with security patches
aaronlippold Jul 9, 2026
9245cfd
fix: Log swallowed exceptions in the catch-all error handler
aaronlippold Jul 10, 2026
c706448
fix: Self-delete 500 — skip session_limitable on destroyed records
aaronlippold Jul 10, 2026
5092b87
feat: Require re-authentication and last-admin guard on self-delete
aaronlippold Jul 10, 2026
db40a68
feat: Enforce project admin continuity at the membership layer
aaronlippold Jul 10, 2026
df9e0ef
feat: Block user deletion when sole project admin
aaronlippold Jul 10, 2026
e5d9d6d
fix: Add JSON response path to project access request creation
aaronlippold Jul 10, 2026
94f4041
feat: Add latest-benchmark endpoints — SRGs, STIGs, components
aaronlippold Jul 10, 2026
b9b08fb
feat: Add benchmark stats endpoints — rule counts and SRG usage
aaronlippold Jul 10, 2026
8e88a28
feat: Add component summary endpoint with comment-phase state
aaronlippold Jul 10, 2026
3f57ef5
docs: Document GET /api/projects in OpenAPI with contract tests
aaronlippold Jul 10, 2026
969778a
feat: Add dashboard endpoints — stats, workflow state, triage summary
aaronlippold Jul 10, 2026
7f300cf
docs: Add SRG Component authoring ADR
aaronlippold Jul 11, 2026
790f535
test: Make sync-metadata timestamp assertion load-independent
aaronlippold Jul 11, 2026
e96c34a
test: Freeze time in login and comment throttle specs
aaronlippold Jul 11, 2026
0f22662
fix: Re-apply Settings defaults on reload! to stop seed-order flakes
aaronlippold Jul 11, 2026
c1e0634
test: Convert wall-clock timestamp assertions to bounds pattern
aaronlippold Jul 12, 2026
3d6d9fc
test: Quiet ambient backend-suite noise
aaronlippold Jul 12, 2026
b642946
test: Extract with_settings_env shared reload helper
aaronlippold Jul 12, 2026
ef8320f
refactor: Remove component sync/merge engine from #731
wdower Jul 12, 2026
4887a9c
Merge origin/master into merge-removal CI branch
wdower Jul 12, 2026
7ef2830
fix: Restore #731 Gemfile.lock + drop merge tests from validator spec
wdower Jul 12, 2026
761cfa5
docs: Reframe SRG ADR as generalized XCCDF authoring + add user workflow
wdower Jul 12, 2026
43e5921
Merge chore/731-remove-merge-engine: split out component sync/merge
wdower Jul 12, 2026
780fe67
fix: Serialize collections in deterministic canonical order
aaronlippold Jul 13, 2026
efb1f70
test: Make settings defaults deterministic; drop source-grep spec
aaronlippold Jul 13, 2026
bf3f97e
docs: Add dual-version XCCDF export ADR — 1.1.4 and 1.2
aaronlippold Jul 13, 2026
023e0bb
Merge origin branch: ADR v6 + merge-engine split to own PR
aaronlippold Jul 13, 2026
587a8b8
fix: Recount rules_count when a rule is soft-deleted
aaronlippold Jul 13, 2026
1bfb3c5
docs: SRG ADR v7 — resolve all five review items + backups
aaronlippold Jul 13, 2026
570000f
docs: Align ADR remaining sections with Design C relocation
aaronlippold Jul 13, 2026
f5afc4f
docs: ADR v7.1 — five code-verified mechanics fixes from review
aaronlippold Jul 13, 2026
845d58b
docs: ADR v7.2 — migration-plan hardening from schema review
aaronlippold Jul 13, 2026
81b3ea4
docs: ADR v7.3 — collision review sizes the real blast radius
aaronlippold Jul 13, 2026
6423533
docs: ADR v7.4 — consistency pass reconciles doc with its fixes
aaronlippold Jul 13, 2026
8b228ac
docs: ADR erratum — backup serializer joins the scoping-site list
aaronlippold Jul 13, 2026
25eb80c
feat: Surface satisfied-by parent context across all rule views
aaronlippold Jul 13, 2026
cd8b42e
refactor: Unify comment rendering on CommentItem and CommentList
aaronlippold Jul 13, 2026
833804a
feat: Add SRG authoring storage seam — schema + SrgRule expansion
aaronlippold Jul 14, 2026
5bce6c6
chore: Note Vue 3 migration debt on CommentList updateRow
aaronlippold Jul 14, 2026
df04852
chore: Remove internal tracker and design-doc references from source
aaronlippold Jul 14, 2026
a253402
feat: Add SRG status model backend — registry, vocabulary, scoping
aaronlippold Jul 14, 2026
da7fe34
chore: Use synthetic tracker-id examples in lint-rule fixtures
aaronlippold Jul 14, 2026
55bb664
chore: Remove remaining internal-process references from comments
aaronlippold Jul 14, 2026
6a53a2e
chore: Remove internal task-number markers from comments
aaronlippold Jul 14, 2026
ac0d160
refactor: Delete dead RuleNavigator and RuleEditorHeader
aaronlippold Jul 14, 2026
e3ceb7d
docs: Record SRG lifecycle and publisher governance decisions
aaronlippold Jul 14, 2026
853f338
feat: Add three-state field config keyed by document type
aaronlippold Jul 14, 2026
a942762
feat: Make sidebar status filters kind-aware
aaronlippold Jul 14, 2026
c97b5ae
feat: Ask What are you authoring? at component creation
aaronlippold Jul 14, 2026
0637eb8
chore(deps): pin mitre/devise-security fork at 54a79d0
aaronlippold Jul 16, 2026
c71eebe
refactor: drop legacy flat rules_by_status mirror
aaronlippold Jul 16, 2026
c033aaf
feat: kind-aware rule editor and three-state field config
aaronlippold Jul 16, 2026
2856e1f
feat: centralize API error responses (RFC 9457) and conceal resources
aaronlippold Jul 16, 2026
48e3974
docs(openapi): shared error refs, 403/404 truth, disclosure policy
aaronlippold Jul 16, 2026
ad65170
feat(seeds): API test users and seed-pipeline CI
aaronlippold Jul 16, 2026
0165b19
chore(deps): adopt strong_migrations for lock-safe migrations
aaronlippold Jul 17, 2026
24f6dd9
test: de-brittle the largest_rule_id parameterization guard
aaronlippold Jul 17, 2026
bdf2824
feat: add multi-parent SRG derivation schema
aaronlippold Jul 18, 2026
7cf645b
docs: add SRG triage parity design — kind-aware public comment
aaronlippold Jul 18, 2026
b0d035e
docs: map SRG kind-seam completion scope and amend the ADR
aaronlippold Jul 18, 2026
52042d0
fix: enforce comment duplicate guard and decoration for SRG kind
aaronlippold Jul 18, 2026
b085379
fix: select the primary key in the based_on association scope
aaronlippold Jul 18, 2026
1b81370
feat: build the component parent-set model layer
aaronlippold Jul 18, 2026
44e3b22
feat: honor the full parent set in currency and the revision guard
aaronlippold Jul 18, 2026
d8fd037
feat: build the requirement import machinery over declared parents
aaronlippold Jul 19, 2026
15356b2
feat: accept declared source SRGs at component creation
aaronlippold Jul 20, 2026
f6ce0d4
feat: build the multi-parent creation flow source picker
aaronlippold Jul 20, 2026
97ad77c
feat: build relocation records — marker lifecycle and backlog API
aaronlippold Jul 20, 2026
ccc5c77
docs: record the Container single-parent lineage decision
aaronlippold Jul 20, 2026
71a1b83
feat: build the relocation marker UI — badge, backlog, intake prompt
aaronlippold Jul 20, 2026
bd86da5
refactor: delete dead RuleCommandBar
aaronlippold Jul 20, 2026
c9e9336
feat: build the relocation executor — dry-run, transaction, tombstone
aaronlippold Jul 21, 2026
add201e
docs: record the relocation landed-numbering decision
aaronlippold Jul 21, 2026
4a2c953
docs: record the relocation adjudication workflow decision
aaronlippold Jul 21, 2026
b670a4a
feat: build relocation adjudication — accept, decline, authz recut
aaronlippold Jul 21, 2026
7ab3dc9
feat: carry landed_rule_id in the relocation accept response
aaronlippold Jul 22, 2026
69b94e0
fix: refresh:rule insert pushed undefined for modern rule payloads
aaronlippold Jul 22, 2026
3c44b21
feat: build the adjudication UI — preview accept, rationale decline
aaronlippold Jul 22, 2026
ff17d22
feat: surface relocation state read-only on the component view page
aaronlippold Jul 22, 2026
acf6f0d
docs: record terminology decisions — family banned, DISA verbs
aaronlippold Jul 23, 2026
c2cc937
refactor: sweep family from the vocabulary — SRG-only language
aaronlippold Jul 23, 2026
55b4058
feat: add the Destination SRG picker over a destinations endpoint
aaronlippold Jul 23, 2026
00b828c
docs: align OpenAPI wording and document the destinations path
aaronlippold Jul 23, 2026
29397b3
fix: review notifications crash on authored SRG requirements
aaronlippold Jul 24, 2026
c47d2c8
feat: require justification when an authored requirement is NA
aaronlippold Jul 24, 2026
6f40499
docs: tell the truth about the rule update request surface
aaronlippold Jul 24, 2026
cf751c7
feat: create a requirement complete in one call, for both kinds
aaronlippold Jul 24, 2026
c2fd914
fix: an API token can only ever be minted for the signed-in account
aaronlippold Jul 24, 2026
42f55fc
docs: tell the whole truth in the requirement write contract
aaronlippold Jul 25, 2026
8568e0f
fix: a component-less project can be backed up without crashing
aaronlippold Jul 25, 2026
51066a9
feat: carry project metadata through both creation paths
aaronlippold Jul 25, 2026
7e4415e
feat: create a component complete in one call, for both kinds
aaronlippold Jul 25, 2026
4b2637c
feat: manage a user's Slack member ID from the admin surface
aaronlippold Jul 25, 2026
0a62cf2
refactor: delete dead params methods, pin revert and lock surfaces
aaronlippold Jul 25, 2026
5c6ce50
fix: narrow the bulk lock surface to the keys it actually uses
aaronlippold Jul 25, 2026
391e718
feat: one kind-aware component copy path for duplicate and overlay
aaronlippold Jul 26, 2026
2c0b267
test: pin slack_user_id in the user blueprint admin view
aaronlippold Jul 26, 2026
24e645d
feat: mint derived identifiers at release
aaronlippold Jul 26, 2026
993c2b0
feat: copy released SRG requirements into catalog rows
aaronlippold Jul 26, 2026
70ca40b
fix: guard the XCCDF satisfies emission for authored SRG requirements
aaronlippold Jul 26, 2026
c6afc77
feat: extract the XCCDF version profile — version-agnostic formatter
aaronlippold Jul 26, 2026
c610d06
feat: publish SRG components as schema-validated XCCDF
aaronlippold Jul 27, 2026
6ed508f
feat: emit the nine MAC profiles in the published SRG XCCDF
aaronlippold Jul 28, 2026
029ab60
feat: centralize SRG header rules, enforce row-XML consistency
aaronlippold Jul 28, 2026
cf8cd46
docs: sweep the last banned wording from comments and spec prose
aaronlippold Jul 28, 2026
3b01277
fix: number generated requirements with deterministic local ordinals
aaronlippold Jul 28, 2026
8f4f9dc
refactor: single-home the working-convention published identifiers
aaronlippold Jul 28, 2026
870fb7b
feat: attach released SRG components to the catalog
aaronlippold Jul 28, 2026
d8ec10a
feat: centralize the relocation destination vocabulary
aaronlippold Jul 29, 2026
1e45f72
feat: release SRG components through the catalog-attaching endpoint
aaronlippold Jul 29, 2026
2f8ce0a
fix: backup export keeps imported review attribution
aaronlippold Jul 29, 2026
209c35f
feat: seed the three DISA core SRGs and recognize them at import
aaronlippold Jul 30, 2026
b710142
feat: carry Container review comments onto the APP-core redo
aaronlippold Jul 31, 2026
f073727
fix: serve the SRG identifier for authored requirements
aaronlippold Aug 1, 2026
057045f
feat: show requirement identity on the not-applicable screen
aaronlippold Aug 1, 2026
f19765e
feat: reach comments and requirement status from the sidebar
aaronlippold Aug 1, 2026
153c316
refactor: let a requirement answer for its own SRG identifier
aaronlippold Aug 2, 2026
9b56842
refactor: define the sidebar display toggles in one registry
aaronlippold Aug 2, 2026
61ce905
fix: size the editor sidebar so identifiers fit on one line
aaronlippold Aug 2, 2026
48d9a93
test: cover every row site in the icon-strip assertion
aaronlippold Aug 2, 2026
f6980b0
perf: stop fetching requirement data one row at a time
aaronlippold Aug 2, 2026
3e5f74c
fix: bind requirement ids instead of building SQL by hand
aaronlippold Aug 2, 2026
1623f86
Merge master into the triage branch — CVE refresh and toolchain
aaronlippold Aug 2, 2026
c3b1b83
fix: carry every source SRG through the backup round-trip
aaronlippold Aug 8, 2026
6cbb073
fix: route disposition export queries through the kind seam
aaronlippold Aug 8, 2026
b44d23b
test: restore every Settings key the banner specs mutate
aaronlippold Aug 8, 2026
cf6e11d
fix: kind-route the in-component find search
aaronlippold Aug 8, 2026
f09ed17
fix: guard compare to STIG kinds and diff authored history
aaronlippold Aug 8, 2026
c2fd6d8
fix: take one bulk destroy path for both document kinds
aaronlippold Aug 8, 2026
7dad504
chore: acknowledge the Rails 8.0 EOL warning while 8.1 lands
aaronlippold Aug 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"
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"
}
48 changes: 44 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 @@ -63,6 +60,36 @@ VULCAN_OIDC_REDIRECT_URI=http://localhost:3000/users/auth/oidc/callback
# from the issuer's /.well-known/openid-configuration endpoint
# VULCAN_OIDC_DISCOVERY=true

# =============================================================================
# MULTI-PROVIDER OIDC (Optional — N simultaneous providers)
# =============================================================================
# Set VULCAN_OIDC_PROVIDERS to enable multiple OIDC providers simultaneously.
# Each key becomes a tab on the login page and a callback route.
# When unset, the legacy single-provider vars above are used (backward compat).
#
# VULCAN_OIDC_PROVIDERS=okta,login_gov
#
# Per-provider vars follow the pattern VULCAN_OIDC_<KEY>_<FIELD>:
#
# --- Okta ---
# VULCAN_OIDC_OKTA_ISSUER_URL=https://your-domain.okta.com/oauth2/default
# VULCAN_OIDC_OKTA_CLIENT_ID=your_okta_client_id
# VULCAN_OIDC_OKTA_CLIENT_SECRET=your_okta_client_secret
# VULCAN_OIDC_OKTA_REDIRECT_URI=http://localhost:3000/users/auth/okta/callback
# VULCAN_OIDC_OKTA_TITLE=Okta
#
# --- Login.gov (uses private_key_jwt, no client secret) ---
# VULCAN_OIDC_LOGIN_GOV_ISSUER_URL=https://idp.int.identitysandbox.gov
# VULCAN_OIDC_LOGIN_GOV_CLIENT_ID=urn:gov:gsa:openidconnect.profiles:sp:sso:your-org:vulcan
# VULCAN_OIDC_LOGIN_GOV_CLIENT_AUTH_METHOD=jwt_bearer
# VULCAN_OIDC_LOGIN_GOV_PRIVATE_KEY_PATH=/path/to/login_gov_private.pem
# VULCAN_OIDC_LOGIN_GOV_ACR_VALUES=urn:acr.login.gov:auth-only
# VULCAN_OIDC_LOGIN_GOV_TITLE=Login.gov
#
# Provider keys must be lowercase snake_case (a-z, 0-9, underscores).
# Each provider can have its own logo at app/assets/images/<key>-logo.{svg,png}.
# See docs/deployment/auth/ for provider-specific setup guides.

# =============================================================================
# AUTHENTICATION OPTIONS
# =============================================================================
Expand Down Expand Up @@ -159,6 +186,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: 5 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Verbatim upstream XCCDF documents (DISA-published SRGs/STIGs seeded as-is).
# They contain trailing whitespace as published; whitespace checks must not
# flag or alter them — byte fidelity is the requirement.
db/seeds/srgs/*.xml -whitespace
db/seeds/stigs/*.xml -whitespace
Loading
Loading