Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
317 commits
Select commit Hold shift + click to select a range
7d17126
fix(coverage): instrument all Playwright specs
seonghobae Aug 18, 2026
f2ef71d
test(ci): require actionable coverage diagnostics
seonghobae Aug 18, 2026
8326c47
fix(ci): print exact coverage misses without relaxing gate
seonghobae Aug 18, 2026
6811d21
test(coverage): exercise real API edge paths
seonghobae Aug 18, 2026
6c8be41
test(coverage): make rate-window edge deterministic
seonghobae Aug 18, 2026
309b6eb
test(coverage): await webhook retry completion
seonghobae Aug 18, 2026
77dd1c1
test(coverage): repair Stripe edge fixture syntax
seonghobae Aug 18, 2026
b2a8099
test(coverage): lock whole-source instrumentation
seonghobae Aug 18, 2026
4336dde
test(ci): lock whole-source server coverage
seonghobae Aug 18, 2026
012bae1
test(webhooks): exercise one-retry outcomes deterministically
seonghobae Aug 18, 2026
0d7b0f6
test(api): cover hosted provider failure boundaries
seonghobae Aug 18, 2026
a5cae95
test(api): execute hosted provider edge coverage
seonghobae Aug 18, 2026
eaf75a8
test(api): exercise production branch alternatives
seonghobae Aug 18, 2026
936520d
test(api): execute branch coverage cases
seonghobae Aug 18, 2026
8e93da0
test(ci): retain branch coverage suite in API graph
seonghobae Aug 18, 2026
97eba0c
test(auth): keep branch coverage aligned with token version contract
seonghobae Aug 18, 2026
197788d
test(api): cover residual production control branches
seonghobae Aug 18, 2026
25c64d3
test(api): execute residual branch coverage
seonghobae Aug 18, 2026
6d01ad7
test(api): cover hosted OIDC fallback branches
seonghobae Aug 18, 2026
420c87a
test(api): execute hosted OIDC fallback coverage
seonghobae Aug 18, 2026
51e12fa
test(api): respect non-null fallback fixtures
seonghobae Aug 18, 2026
af7ede2
test(api): use reachable empty MIME fixture
seonghobae Aug 18, 2026
1173760
test(api): await observable webhook settlement
seonghobae Aug 18, 2026
b640af5
test(api): cover residual public branch behavior
seonghobae Aug 18, 2026
0e7ce22
test(api): model multipart filename semantics accurately
seonghobae Aug 18, 2026
2fa8393
test(api): reject stale tokens for deleted accounts
seonghobae Aug 18, 2026
adb8086
fix(api): remove unreachable coverage fallbacks
seonghobae Aug 18, 2026
6dd2ef2
test(api): always restore webhook fetch stub
seonghobae Aug 18, 2026
3ce9a8b
test(auth): cover valid JWT version mismatch
seonghobae Aug 18, 2026
c7c1e60
test(auth): cover post-verification revocation race
seonghobae Aug 18, 2026
73fd1cd
fix(perf): restore module preload contract
seonghobae Aug 18, 2026
d497eae
test(coverage): require served-source identity evidence
seonghobae Aug 18, 2026
62be9bf
fix(coverage): bind browser evidence to served source
seonghobae Aug 18, 2026
44dc7f8
fix(coverage): verify served bytes against checkout
seonghobae Aug 18, 2026
2e4f0c2
test(auth): preserve statement surface in revocation fault
seonghobae Aug 18, 2026
ae62f22
test(coverage): reject production-script interception
seonghobae Aug 18, 2026
0d44eec
fix(coverage): test exact served production bytes
seonghobae Aug 18, 2026
4e692d6
merge(develop): preserve adaptive attribution in exact-head CI repair
seonghobae Aug 18, 2026
1cb030c
test(e2e): probe subtree range without rewriting app source
seonghobae Aug 18, 2026
9909729
test(e2e): serve CSP-safe subtree probe
seonghobae Aug 18, 2026
a43f699
test(e2e): require shipped subtree-range test seam
seonghobae Aug 18, 2026
8c94d56
test(e2e): exercise subtree ranges through drag behavior
seonghobae Aug 18, 2026
ca69395
test(ci): require browser coverage failure diagnostics
seonghobae Aug 18, 2026
5a0d3f0
fix(ci): diagnose the failing browser coverage report
seonghobae Aug 18, 2026
67a4bb5
test(ci): require actual browser coverage diagnostics path
seonghobae Aug 19, 2026
2dee0a7
fix(ci): diagnose the emitted browser coverage report
seonghobae Aug 19, 2026
b7392b9
test(browser): exercise cloud planning and governance workflows
seonghobae Aug 19, 2026
c60a1b6
fix(ci): preserve exact browser coverage failure evidence
seonghobae Aug 19, 2026
85f212b
test(e2e): stabilize cloud workflow assertions
seonghobae Aug 19, 2026
b4345c7
fix(ui): keep cloud modal controls reachable
seonghobae Aug 19, 2026
685240d
test(ci): require browser diagnostics after failed e2e
seonghobae Aug 19, 2026
895a334
fix(ci): preserve browser coverage after failed e2e
seonghobae Aug 19, 2026
54d806a
test(ci): bound Playwright runtime installation
seonghobae Aug 19, 2026
7f0a053
fix(ci): bound Playwright runtime installation
seonghobae Aug 19, 2026
62af467
test(ci): allow unrelated bounded workflow steps
seonghobae Aug 19, 2026
71c65e8
test(browser): cover residual planner production behavior
seonghobae Aug 19, 2026
368ca0c
test(cloud): cover residual buyer-visible governance paths
seonghobae Aug 19, 2026
2029921
test(dnd): exercise real dragover before subtree drop
seonghobae Aug 19, 2026
a25bf0f
test(browser): exercise residual behavior through public UI seams
seonghobae Aug 19, 2026
9fe375b
test(dnd): poll persisted subtree order
seonghobae Aug 19, 2026
27fb997
test(css): keep modal scrolling with modal styles
seonghobae Aug 19, 2026
a4c3ea5
test(css): scope modal scrolling contract
seonghobae Aug 19, 2026
541d7f1
refactor(css): keep toast stylesheet toast-scoped
seonghobae Aug 19, 2026
f4f090c
refactor(css): centralize modal overflow styles
seonghobae Aug 19, 2026
4b2caf9
fix(ui): preserve disabled sync and modal close behavior
seonghobae Aug 19, 2026
5b798a8
test(ui): require modal close controls
seonghobae Aug 19, 2026
33dc688
test(e2e): wait for cloud modals to close
seonghobae Aug 19, 2026
f2b9a9b
fix(ui): close team modals from nested controls
seonghobae Aug 19, 2026
de2444e
fix(ui): target the actual team close control
seonghobae Aug 19, 2026
15d5536
test(static): require linked stylesheets on every serve path
seonghobae Aug 19, 2026
df0c13a
fix(static): ship modal close hit-testing on every runtime
seonghobae Aug 19, 2026
4fd4a05
test(ci): reject apt-dependent Playwright installs
seonghobae Aug 19, 2026
30b690d
fix(ci): avoid apt mirror dependency for Playwright
seonghobae Aug 19, 2026
2842fde
test(ci): align exact-head contract with bounded browser install
seonghobae Aug 19, 2026
cd20200
fix(ci): harden current coverage failure contracts
seonghobae Aug 19, 2026
405d3ca
test(browser): exercise empty-plan recovery actions
seonghobae Aug 19, 2026
c8c9d22
test(browser): cover hierarchy collapse and row editing
seonghobae Aug 19, 2026
6a8b1c4
test(browser): exercise residual text safety helpers
seonghobae Aug 19, 2026
9783dfa
fix(test): keep residual helper probe executable
seonghobae Aug 19, 2026
819e0d9
fix(test): remove unreachable module-scope helper probe
seonghobae Aug 19, 2026
6d94a4d
test(ci): reject duplicate unbounded cloud browser install
seonghobae Aug 19, 2026
cf3228e
fix(ci): reuse bounded cloud browser install
seonghobae Aug 19, 2026
41643dc
test(api): preserve unnamed attachment metadata
seonghobae Aug 19, 2026
e6e1ab2
test(api): reject empty attachment filenames honestly
seonghobae Aug 19, 2026
c26e46d
ci(codeql): pin current v4.37.7 evidence actions
seonghobae Aug 19, 2026
000731d
merge(billing): reconcile trusted checkout root with protected develop
seonghobae Aug 19, 2026
4c0592d
fix(stack): preserve protected develop in billing reconciliation
seonghobae Aug 19, 2026
67ebed7
test(codeql): require default workflow exact-head supply chain
seonghobae Aug 19, 2026
5fd2897
fix(codeql): bind default analysis to exact contributor head
seonghobae Aug 19, 2026
8fb1e6a
test(codeql): fix exact-head contract reference
seonghobae Aug 19, 2026
e88ea32
test(e2e): exercise aria-disabled empty actions by keyboard
seonghobae Aug 19, 2026
1d8db1f
test(browser): exercise residual planner fault boundaries
seonghobae Aug 19, 2026
1e89c62
test(cloud): exercise residual SaaS failure boundaries
seonghobae Aug 19, 2026
d1a3fc4
test(ci): require exact-head property fuzz evidence
seonghobae Aug 19, 2026
96d9fac
test(ci): register protected fuzz checkout regression
seonghobae Aug 19, 2026
662cfb2
fix(ci): bind property fuzz to exact contributor head
seonghobae Aug 19, 2026
465a26b
test(ci): require modern immutable fuzz runtime
seonghobae Aug 19, 2026
4c284d6
fix(ci): modernize protected fuzz action runtime
seonghobae Aug 19, 2026
00563cd
docs(ci): preserve fuzz runtime provenance
seonghobae Aug 19, 2026
d0acb5e
test(changelog): preserve published release notes
seonghobae Aug 19, 2026
34eb45f
fix(changelog): restore published release history
seonghobae Aug 19, 2026
1aad503
test(cloud): make stale-version conflict deterministic
seonghobae Aug 19, 2026
2a5ff72
test(browser): cover secure UUID compatibility fallback
seonghobae Aug 19, 2026
b77d81c
test(cloud): cover buyer-visible team and account boundaries
seonghobae Aug 19, 2026
e465e30
test(cloud): scope member removal assertion to roster
seonghobae Aug 19, 2026
721b509
test(browser): exercise defensive production boundaries
seonghobae Aug 19, 2026
cec680d
fix(test): keep drag event payload in browser context
seonghobae Aug 19, 2026
510f7fd
test(browser): exercise commercial cloud boundaries
seonghobae Aug 20, 2026
169a394
test(browser): correct offline cloud expectation
seonghobae Aug 20, 2026
45e1fdc
test(browser): prove secure-id failure is fail-closed
seonghobae Aug 20, 2026
4d39ff6
test(coverage): reproduce remaining browser trust boundaries
seonghobae Aug 20, 2026
5cf6e91
fix(browser): close exact coverage gaps at causal boundaries
seonghobae Aug 20, 2026
df0a648
fix(stack): restore complete browser planner after coverage repair at…
seonghobae Aug 20, 2026
e250878
fix(browser): validate file-picker handles before sync
seonghobae Aug 20, 2026
1a33ef7
chore(browser): remove unapplied file-picker adapter
seonghobae Aug 20, 2026
9add5ca
fix(stack): reconcile exact-head controls with protected dependency bump
seonghobae Aug 20, 2026
da14bb4
fix(stack): reconcile billing root with current develop
seonghobae Aug 20, 2026
07e93b2
test(browser): prove failed file writes do not retain sync authority
seonghobae Aug 20, 2026
958387a
fix(sync): commit JSON file authority only after durable write
seonghobae Aug 20, 2026
f49fc33
test(browser): cover invalid file picker shapes
seonghobae Aug 20, 2026
124a6da
test(browser): cover exact-head interaction residuals
seonghobae Aug 20, 2026
b37abec
test(browser): cover stale insertion anchor recovery
seonghobae Aug 20, 2026
196227d
test(ci): require CodeQL on stacked pull requests
seonghobae Aug 20, 2026
eb05b38
fix(ci): run CodeQL on stacked pull requests
seonghobae Aug 20, 2026
058c2cd
test(ci): tolerate trigger rationale comments
seonghobae Aug 20, 2026
c183216
docs(ci): reconcile exact-head evidence authority
seonghobae Aug 20, 2026
e0319de
docs(changelog): correct CodeQL stacked-PR evidence
seonghobae Aug 20, 2026
0ffb077
test(ci): exercise browser defensive fallback contracts
seonghobae Aug 20, 2026
6eacc1a
fix(ci): remove unreachable browser coverage fallbacks
seonghobae Aug 20, 2026
b80d502
fix(stack): reconcile billing root with Playwright develop update
seonghobae Aug 20, 2026
3a426cf
fix(stack): inherit protected Playwright 1.62.1 in exact-head controls
seonghobae Aug 20, 2026
8dc44d6
test(ci): fix CodeQL contract success marker
seonghobae Aug 20, 2026
63110a3
test(ci): cover remaining browser production paths
seonghobae Aug 20, 2026
36a4c91
test(ci): isolate browser coverage server ports
seonghobae Aug 20, 2026
1a4e55b
test(e2e): target stable root-task control
seonghobae Aug 20, 2026
f55f3b1
test(coverage): reject omitted production modules
seonghobae Aug 20, 2026
b148e66
fix(coverage): include every production runtime module
seonghobae Aug 20, 2026
e4fa739
merge(billing): carry trusted checkout repair into exact coverage
seonghobae Aug 20, 2026
e4c471b
test(ci): require direct browser coverage dependencies
seonghobae Aug 20, 2026
a220d8d
fix(ci): declare browser coverage tool dependencies
seonghobae Aug 20, 2026
3f4b590
fix(ci): lock browser coverage tool dependencies
seonghobae Aug 20, 2026
a371e06
fix(ci): preserve reviewed dependency lock metadata
seonghobae Aug 20, 2026
39a48bf
fix(stack): remove unrelated billing slice from CI controls
seonghobae Aug 20, 2026
fce3925
test(ci): reproduce product guard regressions in coverage branch
seonghobae Aug 20, 2026
54bb312
fix(ci): preserve shipped defensive product guards
seonghobae Aug 20, 2026
4d9a916
fix(ci): keep server coverage behavior-neutral
seonghobae Aug 20, 2026
1f6531c
chore(ci): remove overlapping buyer-surface changes
seonghobae Aug 20, 2026
d295fc3
test(ci): reproduce uncovered server entrypoint
seonghobae Aug 20, 2026
096d225
test(ci): register server entrypoint regression
seonghobae Aug 20, 2026
0782f6f
fix(ci): execute and close the server entrypoint under coverage
seonghobae Aug 20, 2026
107cd45
test(server): reject whitespace-only port configuration
seonghobae Aug 21, 2026
106bda4
fix(server): fail closed on whitespace-only port values
seonghobae Aug 21, 2026
bc41066
test(ci): require OSV introduced findings to fail closed
seonghobae Aug 21, 2026
2371285
fix(ci): fail OSV on introduced vulnerabilities
seonghobae Aug 21, 2026
d908ce3
test(ci): isolate OSV evidence from PR-controlled paths
seonghobae Aug 21, 2026
ebe1c97
fix(ci): isolate OSV evidence from PR-controlled symlinks
seonghobae Aug 21, 2026
6c897fd
test(ci): fail closed on incomplete OSV scans
seonghobae Aug 21, 2026
cbcad7e
fix(ci): fail closed when OSV scans abort
seonghobae Aug 21, 2026
863bdba
test(ci): require OSV SARIF upload after finding failure
seonghobae Aug 21, 2026
1c96b92
fix(ci): upload OSV SARIF on vulnerability findings
seonghobae Aug 21, 2026
d1fdd01
fix(ci): repair balanced-match lock integrity
seonghobae Aug 21, 2026
740e98a
fix(ci): preserve package lock metadata
seonghobae Aug 21, 2026
fb8408c
test(ci): guard package lock registry metadata
seonghobae Aug 21, 2026
75ff15a
test(ci): run package lock metadata regression
seonghobae Aug 21, 2026
8c4cb4c
fix(ci): restore canonical lock registry metadata
seonghobae Aug 21, 2026
f6d9877
test(ci): reject corrupted lock license metadata
seonghobae Aug 21, 2026
c684ff0
fix(ci): restore yargs-parser lock license metadata
seonghobae Aug 21, 2026
9e84f48
test(ci): require non-publishing CodeQL database mode
seonghobae Aug 21, 2026
9c05326
fix(ci): disable required CodeQL database uploads
seonghobae Aug 21, 2026
a401e0c
test(ci): reject duplicate CodeQL required check names
seonghobae Aug 21, 2026
acc09f8
fix(ci): disambiguate CodeQL protected checks
seonghobae Aug 21, 2026
431f010
test(ci): require coverage from every Playwright page
seonghobae Aug 21, 2026
89ad7f9
fix(ci): capture coverage from secondary Playwright pages
seonghobae Aug 21, 2026
4cba725
test(ci): reject stale advanced CodeQL publisher
seonghobae Aug 21, 2026
c14ac41
fix(ci): retire disabled advanced CodeQL publisher
seonghobae Aug 21, 2026
bcad2b6
test(ci): make stacked CodeQL contract single-authority
seonghobae Aug 21, 2026
9c5d7e1
test(ci): reject unused CodeQL write permission
seonghobae Aug 21, 2026
19140bb
fix(ci): drop unused CodeQL write authority
seonghobae Aug 21, 2026
273674e
docs(ci): make CodeQL authority code-current
seonghobae Aug 21, 2026
ee8bb7e
docs(ci): make CodeQL changelog single-authority
seonghobae Aug 21, 2026
96af111
test(ci): reject ambiguous failed OSV scan evidence
seonghobae Aug 21, 2026
c3e631b
fix(ci): fail closed on ambiguous OSV scan failures
seonghobae Aug 21, 2026
e7adced
test(ci): require complete coverage failure diagnostics
seonghobae Aug 21, 2026
5e4f57a
fix(ci): continue coverage failure diagnostics
seonghobae Aug 21, 2026
7f2b24b
test(ci): run coverage diagnostics workflow contract
seonghobae Aug 21, 2026
4b96b14
test(ci): keep OSV out of CodeQL code-scanning ownership
seonghobae Aug 21, 2026
83de84c
fix(ci): keep OSV evidence out of CodeQL scanning
seonghobae Aug 21, 2026
355d85b
test(ci): align OSV contract with CodeQL-only ownership
seonghobae Aug 21, 2026
9c12035
test(ci): require clean OSV contributor scan tree
seonghobae Aug 21, 2026
6dcec94
fix(ci): sanitize OSV contributor scan tree
seonghobae Aug 21, 2026
2304fb6
fix(ui): keep non-Gantt modal controls reachable
seonghobae Aug 21, 2026
b737ad9
test(ci): require exact-head dependency review evidence
seonghobae Aug 21, 2026
6f86462
test(ci): register dependency review evidence contract
seonghobae Aug 21, 2026
95a15bc
fix(ci): bind dependency review to exact live revisions
seonghobae Aug 21, 2026
12a0c11
test(server): cover nullable audit and live billing boundaries
seonghobae Aug 21, 2026
c20fff8
fix(server): make strict coverage reflect reachable contracts
seonghobae Aug 21, 2026
728a891
test(api): normalize sqlite row prototype in audit assertion
seonghobae Aug 21, 2026
e83add7
fix(web): preload production modules
seonghobae Aug 21, 2026
bd1ce35
fix(ui): preserve delegated modal close targets
seonghobae Aug 21, 2026
cd11b25
fix(sync): commit file handle only after durable write
seonghobae Aug 21, 2026
18bc414
revert: preserve existing app commentary before focused autosave repair
seonghobae Aug 21, 2026
92468f0
fix(sync): retain autosave authority only after successful write
seonghobae Aug 21, 2026
b44c238
test: exercise browser analytics coverage boundaries
seonghobae Aug 21, 2026
88b025b
test: cover demo billing checkout boundary
seonghobae Aug 21, 2026
5b469e8
test(ci): reproduce browser coverage failure masking
seonghobae Aug 21, 2026
00a614e
test(ci): run browser failure precedence regression
seonghobae Aug 21, 2026
44abe3d
fix(ci): preserve browser test failure authority
seonghobae Aug 21, 2026
e76f259
fix(ci): keep Playwright failure primary in coverage collector
seonghobae Aug 21, 2026
081ef40
test(ci): bind coverage contract to failure precedence guard
seonghobae Aug 21, 2026
541bbfb
test(ci): cover exact analytics browser boundaries
seonghobae Aug 21, 2026
2cf753a
test(ci): retain checkout redirect coverage on failed navigation
seonghobae Aug 21, 2026
112a017
test(ci): cover corrupt persisted date recovery
seonghobae Aug 21, 2026
ddc48f4
test(coverage): exercise browser invariant boundaries
seonghobae Aug 21, 2026
c86a9a7
test(ci): reject stale live-base dependency evidence
seonghobae Aug 21, 2026
165d6fd
fix(ci): reject diverged dependency baselines
seonghobae Aug 21, 2026
94a8d16
test(coverage): exercise module-private invariant branches
seonghobae Aug 21, 2026
b806e77
test(e2e): bind helper coverage to exact app breakpoint
seonghobae Aug 21, 2026
7066fcd
test(e2e): avoid debugger pause race in coverage probe
seonghobae Aug 21, 2026
1f44e23
test(e2e): cover editor fallback through real events
seonghobae Aug 21, 2026
37901a0
fix(browser): remove unreachable window guard
seonghobae Aug 21, 2026
18b7b7b
test(e2e): restore module-scoped invariant coverage
seonghobae Aug 21, 2026
535dd31
test(ci): reject duplicate unit and API execution
seonghobae Aug 21, 2026
9e72573
fix(ci): avoid duplicate unit and API suites
seonghobae Aug 21, 2026
a73e8be
fix(ci): bound manual fuzz iteration input
seonghobae Aug 22, 2026
c3a326a
test(ci): require CodeQL v4.37.8 pin
seonghobae Aug 25, 2026
365f092
ci: preserve CodeQL v4.37.8 on exact-head workflow
seonghobae Aug 25, 2026
0d50f4e
test(ci): align exact-head CodeQL contract with v4.37.8
seonghobae Aug 25, 2026
55520ec
test(ci): require OSV v2.5.1 pin
seonghobae Aug 25, 2026
9744fdb
ci: preserve OSV v2.5.1 on exact-head scan
seonghobae Aug 25, 2026
180ad6c
test(ci): require singular live-base resolution
seonghobae Aug 25, 2026
ca81000
ci: enforce singular live-base resolution
seonghobae Aug 25, 2026
adcaedb
test(ci): require exact-head OSV code-scanning evidence
seonghobae Aug 25, 2026
166f129
test(ci): align OSV exact-head code-scanning contract
seonghobae Aug 25, 2026
18a4ef3
fix(ci): restore exact-head OSV code-scanning evidence
seonghobae Aug 25, 2026
9d3784a
test(ci): reject OSV code-scanning publication
seonghobae Aug 25, 2026
7e13a54
fix(ci): keep OSV SARIF out of CodeQL-only analysis
seonghobae Aug 25, 2026
e57f8b6
test(ci): align OSV exact-head contract with CodeQL-only policy
seonghobae Aug 25, 2026
70358e8
test(ci): require complete browser suite in protected gate
seonghobae Aug 28, 2026
f949e00
fix(ci): run complete browser suite in required gate
seonghobae Aug 28, 2026
135117e
test(e2e): stabilize invariant probe outside coverage lane
seonghobae Aug 28, 2026
85c99c8
test(ci): pin OSV analysis configuration identity
seonghobae Aug 29, 2026
09be4ae
test(ci): execute OSV configuration identity regression
seonghobae Aug 29, 2026
1a230a0
test(ci): align OSV contract with protected configuration identity
seonghobae Aug 29, 2026
7779ed2
fix(ci): preserve OSV analysis configuration identity
seonghobae Aug 29, 2026
e08dbb3
test(ci): require substantive exact-head OSV analysis identity
seonghobae Aug 29, 2026
42614e1
fix(ci): restore exact-head OSV code-scanning identity
seonghobae Aug 29, 2026
7cb8b09
test(ci): align OSV exact-head workflow contract with GHAS
seonghobae Aug 29, 2026
79a0488
test(ci): align OSV fail-closed contract with exact-head GHAS
seonghobae Aug 29, 2026
c6b782a
test(ci): restore CodeQL-only OSV ownership regression
seonghobae Aug 29, 2026
e28b5ca
fix(ci): keep OSV read-only under CodeQL-only scanning
seonghobae Aug 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions .github/workflows/codeql-required.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: CodeQL Required

on:
# No base-branch filter: stacked PRs target feature branches, and their
# exact contributor heads still require CodeQL evidence before integration.
pull_request:
push:
branches: ["develop", "master"]
schedule:
- cron: "15 2 * * 6"

permissions:
contents: read

concurrency:
group: codeql-required-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
analyze:
name: Analyze (${{ matrix.language }})
Comment thread
seonghobae marked this conversation as resolved.
runs-on: ubuntu-latest
permissions:
contents: read
strategy:
fail-fast: false
matrix:
language:
- javascript-typescript
- python
steps:
- name: Checkout exact revision
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
persist-credentials: false

- name: Verify exact checkout
env:
EXPECTED_CHECKOUT_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
run: |
set -euo pipefail
actual_sha="$(git rev-parse HEAD)"
test "$actual_sha" = "$EXPECTED_CHECKOUT_SHA"

- name: Initialize CodeQL
uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8
with:
languages: ${{ matrix.language }}

- name: Perform CodeQL analysis
uses: github/codeql-action/analyze@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8
with:
category: "/language:${{ matrix.language }}"
upload: never
upload-database: false
45 changes: 0 additions & 45 deletions .github/workflows/codeql.yml

This file was deleted.

80 changes: 64 additions & 16 deletions .github/workflows/dependency-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,47 @@ jobs:
dependency-review:
runs-on: ubuntu-latest
steps:
- name: Checkout
- name: Checkout exact revision
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
persist-credentials: false

- name: Verify exact checkout
env:
EXPECTED_CHECKOUT_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
shell: bash
run: |
set -euo pipefail
actual_sha="$(git rev-parse HEAD)"
test "$actual_sha" = "$EXPECTED_CHECKOUT_SHA"

- name: Resolve current protected base revision
id: resolve_live_base
if: github.event_name == 'pull_request'
env:
BASE_REF: ${{ github.event.pull_request.base.ref }}
shell: bash
run: |
set -euo pipefail
test -n "$BASE_REF"

result="$(git ls-remote --exit-code origin "refs/heads/$BASE_REF")"
Comment thread
seonghobae marked this conversation as resolved.
mapfile -t live_base_matches <<<"$result"
test "${#live_base_matches[@]}" -eq 1
read -r live_base_sha live_base_ref extra <<<"${live_base_matches[0]}"
test "$live_base_ref" = "refs/heads/$BASE_REF"
test -z "${extra:-}"
printf '%s\n' "$live_base_sha" | grep -Eq '^[0-9a-f]{40}$'
Comment thread
seonghobae marked this conversation as resolved.

echo "Resolved refs/heads/$BASE_REF to $live_base_sha for dependency comparison"
echo "base_sha=$live_base_sha" >>"$GITHUB_OUTPUT"

- name: Check dependency review support
id: dependency_review_support
env:
GH_TOKEN: ${{ github.token }}
BASE_SHA: ${{ github.event.pull_request.base.sha }}
BASE_SHA: ${{ steps.resolve_live_base.outputs.base_sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
REPOSITORY: ${{ github.repository }}
shell: bash
Expand All @@ -38,35 +69,52 @@ jobs:
exit 0
fi

test -n "$BASE_SHA"
test -n "$HEAD_SHA"

api_url="${GITHUB_API_URL:-https://api.github.com}"
relationship_file="$(mktemp)"
response_file="$(mktemp)"
status="$(
curl -fsS -o "$response_file" -w '%{http_code}' \
trap 'rm -f "$relationship_file" "$response_file"' EXIT

relationship_http_status="$(
curl -sS -o "$relationship_file" -w '%{http_code}' \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${GH_TOKEN}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"${api_url}/repos/${REPOSITORY}/dependency-graph/compare/${BASE_SHA}...${HEAD_SHA}" \
|| true
"${api_url}/repos/${REPOSITORY}/compare/${BASE_SHA}...${HEAD_SHA}"
)"
if [ "$relationship_http_status" != "200" ]; then
echo "::error::Live-base ancestry evidence is unavailable (HTTP ${relationship_http_status})."
exit 1
fi

if [ "$status" = "200" ]; then
echo "supported=true" >>"$GITHUB_OUTPUT"
exit 0
comparison_status="$(jq -er '.status' "$relationship_file")"
if [ "$comparison_status" != "ahead" ] && [ "$comparison_status" != "identical" ]; then
echo "::error::Exact contributor head does not contain the resolved live protected base (status: ${comparison_status}). Refresh the branch before interpreting dependency differences."
exit 1
fi
Comment thread
devin-ai-integration[bot] marked this conversation as resolved.

if [ "$status" = "403" ] || [ "$status" = "404" ]; then
echo "::warning::Dependency review is unavailable for ${REPOSITORY}; skipping dependency-review hard gate."
echo "supported=false" >>"$GITHUB_OUTPUT"
exit 0
status="$(
curl -sS -o "$response_file" -w '%{http_code}' \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${GH_TOKEN}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"${api_url}/repos/${REPOSITORY}/dependency-graph/compare/${BASE_SHA}...${HEAD_SHA}"
)"

if [ "$status" != "200" ]; then
echo "::error::Dependency review comparison evidence is unavailable (HTTP ${status})."
exit 1
fi

Comment thread
devin-ai-integration[bot] marked this conversation as resolved.
Comment thread
devin-ai-integration[bot] marked this conversation as resolved.
Comment thread
seonghobae marked this conversation as resolved.
echo "::error::Dependency review support check failed with HTTP ${status}."
cat "$response_file"
exit 1
echo "supported=true" >>"$GITHUB_OUTPUT"

- name: Dependency review
if: steps.dependency_review_support.outputs.supported == 'true'
uses: actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5.0.0
with:
base-ref: ${{ steps.resolve_live_base.outputs.base_sha }}
head-ref: ${{ github.event.pull_request.head.sha }}
Comment thread
seonghobae marked this conversation as resolved.
fail-on-severity: moderate
comment-summary-in-pr: on-failure
22 changes: 14 additions & 8 deletions .github/workflows/fuzz.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,18 @@ jobs:
- name: Checkout repository
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
persist-credentials: false

- name: Verify exact checkout
env:
EXPECTED_CHECKOUT_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
run: |
actual_sha="$(git rev-parse HEAD)"
test "$actual_sha" = "$EXPECTED_CHECKOUT_SHA"

- name: Set up Node.js
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: '22.13.0'
cache: 'npm'
Expand All @@ -49,14 +57,12 @@ jobs:
- name: Select iteration budget
id: budget
shell: bash
env:
EVENT_NAME: ${{ github.event_name }}
INPUT_FUZZ_RUNS: ${{ github.event.inputs.fuzz_runs }}
run: |
if [ "${{ github.event_name }}" = "schedule" ]; then
echo "runs=200000" >> "$GITHUB_OUTPUT"
elif [ -n "${{ github.event.inputs.fuzz_runs }}" ]; then
echo "runs=${{ github.event.inputs.fuzz_runs }}" >> "$GITHUB_OUTPUT"
else
echo "runs=20000" >> "$GITHUB_OUTPUT"
fi
runs="$(bash scripts/ci/select_fuzz_budget.sh "$EVENT_NAME" "$INPUT_FUZZ_RUNS")"
printf 'runs=%s\n' "$runs" >> "$GITHUB_OUTPUT"

- name: Run property fuzz targets
env:
Expand Down
Loading
Loading