Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
190 commits
Select commit Hold shift + click to select a range
9df9b4e
test: :white_check_mark: Add unit tests to get to 80% coverage
thkruz Jan 3, 2026
a21954f
feat: :sparkles: Add operations log management and UI
thkruz Jan 4, 2026
8761943
feat: :sparkles: Implement dynamic antenna options in UI
thkruz Jan 4, 2026
7728907
fix: :bug: fix issue where asset tree remains locked on restart/continue
thkruz Jan 4, 2026
f45712e
refactor: :recycle: Support multi-instance in ACU and OMT adapters
thkruz Jan 4, 2026
faeec38
feat: :sparkles: Add simulated time management and UI updates
thkruz Jan 4, 2026
4394a75
fix: :bug: fix beacon frequency not being set from target satellite
thkruz Jan 4, 2026
dd51143
test: :white_check_mark: add unit tests
thkruz Jan 4, 2026
c470aee
test: :white_check_mark: add additional tests for OMTModule and Modal…
thkruz Jan 4, 2026
3146497
feat: :sparkles: configure Playwright for end-to-end testing
thkruz Jan 4, 2026
7274821
feat: :sparkles: add developer menu and access control
thkruz Jan 4, 2026
22b8d81
feat: :sparkles: add logging level configuration
thkruz Jan 4, 2026
b115eb3
refactor: :recycle: replace console.log with Logger.info
thkruz Jan 4, 2026
111a81a
feat: :sparkles: add tab-active condition for objectives
thkruz Jan 4, 2026
05501cf
feat: :sparkles: add loopback control and input power display
thkruz Jan 4, 2026
67ea569
test: :white_check_mark: automate e2e testing of scenario 1
thkruz Jan 4, 2026
df81eed
docs: :memo: add retrospective for Scenario 1 E2E test
thkruz Jan 4, 2026
2f73c10
feat: :sparkles: add NICE Framework codes to Objective
thkruz Jan 4, 2026
eceb701
feat: :sparkles: support prefix matching for tab selection
thkruz Jan 4, 2026
a5aa6fd
feat: :sparkles: add Scenario 2 objectives and tests
thkruz Jan 6, 2026
761eec1
feat: :sparkles: enhance color gradient for amplitude visualization
thkruz Jan 6, 2026
0d7f9be
chore: :wrench: add TODO for origin validation in messaging
thkruz Jan 6, 2026
4d14787
feat: :sparkles: add support for new BUC conditions
thkruz Jan 8, 2026
9f73821
feat: :sparkles: add character support in quiz management
thkruz Jan 8, 2026
474b36f
feat: :sparkles: add encryption and payload adapters
thkruz Jan 8, 2026
58fd3b4
style: :art: update LED classes for alarm indicators
thkruz Jan 8, 2026
ef3c135
style: :art: update LED classes for alarm indicators
thkruz Jan 8, 2026
b7d0642
feat: :sparkles: add signal status indicator to filter adapter
thkruz Jan 8, 2026
5c1b812
style: :art: update LED classes for alarm indicators
thkruz Jan 8, 2026
9c21756
feat: :sparkles: add preserveOptionOrder to quiz options
thkruz Jan 8, 2026
2e6092d
feat: :sparkles: add tx-modem-not-transmitting condition
thkruz Jan 8, 2026
2078219
feat: :sparkles: add geosynchronous orbit support
thkruz Jan 8, 2026
0e94118
feat: :sparkles: add DegreesPerSecond type and document tsc usage
thkruz Jan 10, 2026
625cb89
feat: :sparkles: add ephemeris error simulation for satellite tracking
thkruz Jan 10, 2026
ba23c86
refactor: :recycle: step-track as program-track optimization layer
thkruz Jan 10, 2026
08e3098
feat: :sparkles: add crypto module, fault injection, and FEC conditions
thkruz Jan 10, 2026
9625650
refactor: :recycle: replace encryption adapter with TX/RX payload ada…
thkruz Jan 10, 2026
940a865
fix: :bug: remove step-track mode reference from dashboard
thkruz Jan 10, 2026
1d73661
docs: :memo: add scenario development guide
thkruz Jan 10, 2026
9cb9509
feat: :sparkles: expand NATS campaign scenarios with new objectives
thkruz Jan 10, 2026
c0b3821
feat: :sparkles: add TTS fallback and indicator support
thkruz Jan 10, 2026
f132d5e
refactor: :recycle: implement hysteresis for channel status
thkruz Jan 10, 2026
de31a14
test: :white_check_mark: update tests for BUC and HPA modules
thkruz Jan 10, 2026
af2ab11
chore: :wrench: update prerequisite scenario IDs for nats
thkruz Jan 10, 2026
868cc26
feat: :sparkles: add TTS enable/disable functionality
thkruz Jan 10, 2026
a4e8dc2
remove: :fire: Delete old retrospective documents
thkruz Jan 11, 2026
9984b24
chore: :wrench: add .archive to .gitignore
thkruz Jan 11, 2026
f75fef0
docs: :memo: add Git commit guidelines to CLAUDE.md
thkruz Jan 11, 2026
c25eeaa
docs: :memo: update commit message format instructions
thkruz Jan 11, 2026
06cc67c
feat(coupler): :sparkles: add engineering mode and enable toggles
thkruz Jan 11, 2026
f0ce4f6
feat(lnb): :sparkles: add sticky ref lock fault with power-cycle clear
thkruz Jan 11, 2026
04b44ec
fix(spectrum-analyzer): :bug: disable TX tap by default to avoid conf…
thkruz Jan 11, 2026
3e9f9bb
feat(rx-analysis): :sparkles: add tap point selection card with adapter
thkruz Jan 11, 2026
7c05323
fix(hpa): :bug: change overdrive status badge from danger to warning
thkruz Jan 11, 2026
fc1b625
feat(dev-menu): :sparkles: add unlock all scenarios toggle and DEVELO…
thkruz Jan 11, 2026
e551f37
feat(pages): :sparkles: support DEVELOPER_MODE and UNLOCK_ALL_SCENARI…
thkruz Jan 11, 2026
7b3001f
fix(objectives): :bug: handle step-track as program-track with optimi…
thkruz Jan 11, 2026
10d5594
feat(campaigns): :sparkles: expand NATS scenarios with payload object…
thkruz Jan 11, 2026
a3d83c4
test(e2e): :white_check_mark: add RX/TX payload verification objectives
thkruz Jan 11, 2026
58cfcb0
docs: :fire: remove outdated documentation files
thkruz Jan 11, 2026
50675c7
docs: :sparkles: add NATS campaign documentation
thkruz Jan 11, 2026
317eab0
docs: :sparkles: add BOA campaign universe guide
thkruz Jan 11, 2026
341d699
docs: :memo: add NICE framework and platform guides
thkruz Jan 11, 2026
c3d11f4
docs: :memo: add development retrospective
thkruz Jan 11, 2026
ef12915
docs: :recycle: restructure scenario development guide
thkruz Jan 11, 2026
64f7908
test(default-spectrum-analyzer): :white_check_mark: update tap A defa…
thkruz Jan 11, 2026
3bd00ad
feat(engineering-mode): :sparkles: add engineering mode service
thkruz Jan 11, 2026
0bf2761
feat(header): :sparkles: add engineering mode toggle button
thkruz Jan 11, 2026
88519fd
feat(spectrum-analyzer): :recycle: reorganize controls with engineeri…
thkruz Jan 11, 2026
4d1458b
feat(dev-menu): :sparkles: add force engineering button toggle
thkruz Jan 11, 2026
fc6abae
refactor(tap-point-adapter): :recycle: remove engineering mode toggle UI
thkruz Jan 11, 2026
65e5c96
feat(scenario1): :sparkles: add tap points configuration step
thkruz Jan 11, 2026
ac80481
fix(satellites): :wrench: adjust beacon power and polarization
thkruz Jan 11, 2026
873eb21
fix(omt): :bug: calculate effective polarization before cross-pol check
thkruz Jan 11, 2026
2372143
feat(omt-adapter): :sparkles: add status badge and engineering mode c…
thkruz Jan 11, 2026
048a33c
feat(ops-log): :sparkles: add manual log entry input
thkruz Jan 11, 2026
2d60d20
feat(ops-log): :sparkles: add automatic event logging for equipment
thkruz Jan 11, 2026
42e939c
style(scenario-image): :art: adjust height and min-height
thkruz Jan 11, 2026
77a7bae
style(draggable-html-box): :art: adjust iframe max-height
thkruz Jan 11, 2026
f97ef6e
test(omt-adapter): :white_check_mark: update fault LED to status badge
thkruz Jan 11, 2026
2763230
feat(global-command-bar): :sparkles: add scenario info display
thkruz Jan 11, 2026
b2fa4cc
style(global-command-bar): :art: simplify scenario info display
thkruz Jan 11, 2026
77ae43e
test(global-command-bar): :white_check_mark: remove AOS label test
thkruz Jan 11, 2026
4424d0b
refactor(header, modal-login, modal-profile): :recycle: remove SoundM…
thkruz Jan 19, 2026
da7f351
refactor(scenario1): :recycle: update LNB verification steps
thkruz Jan 19, 2026
6c704a3
remove: :fire: delete unused character image
thkruz Jan 19, 2026
fd11f30
refactor(scenario2): :recycle: update RF safety briefing text
thkruz Jan 19, 2026
a9af433
refactor(dialog-history-box): :recycle: use CharacterNames for charac…
thkruz Jan 19, 2026
d71252e
style(objective-failed-modal): :art: add z-index to modal container
thkruz Jan 19, 2026
02a0deb
feat(dev-menu): :sparkles: add uncomplete last objective button
thkruz Jan 19, 2026
00dbd10
refactor(scenario3): :recycle: update explanations and titles
thkruz Jan 19, 2026
65ad2df
feat(condition-types): :sparkles: add satellite selection condition
thkruz Jan 19, 2026
418acdc
feat(objectives-manager): :sparkles: add uncomplete last objective fe…
thkruz Jan 19, 2026
134990b
feat(scenario4): :sparkles: add transmitters and update explanation
thkruz Jan 19, 2026
50db4cf
fix(scenarios): :bug: update missionBriefUrl for campaigns
thkruz Jan 20, 2026
1aad5b9
refactor(objectives-manager): :recycle: update satellite ID handling
thkruz Jan 20, 2026
923f724
style(objectives-manager): :art: format code for readability
thkruz Jan 20, 2026
094827a
feat(scenario6): :sparkles: add amplitude specs and RBW setting
thkruz Jan 20, 2026
03a6dde
refactor(dialog-history-box): :recycle: update character name in tests
thkruz Jan 20, 2026
1c5042a
test(e2e): :white_check_mark: add error handling for E2E tests
thkruz Jan 20, 2026
430873e
fix(buc-module-core): :bug: handle inactive RF output when unpowered
thkruz Jan 20, 2026
b819357
refactor(buc-adapter, tx-chain-tab): :recycle: update LO frequency ra…
thkruz Jan 20, 2026
f4500d0
refactor(scenario-specs): :recycle: update quiz objectives and answers
thkruz Jan 20, 2026
d76556c
refactor(scenario2-specs): :recycle: reorder import statements
thkruz Jan 20, 2026
1764ff2
fix(simulation-helpers): :bug: correct query selector indentation
thkruz Jan 20, 2026
b33ed8c
refactor(satellites): :recycle: update RF frequencies for SES-10
thkruz Jan 20, 2026
9c3b62d
refactor(scenario6): :recycle: update RF and IF frequencies
thkruz Jan 20, 2026
06f1df8
refactor(rx-payload-adapter): :recycle: reorder imports and update st…
thkruz Jan 20, 2026
dde887e
fix(scenario1): :bug: correct span value and explanation
thkruz Jan 20, 2026
efd56ad
fix(buc-module-core): :bug: add alarm for loopback mode
thkruz Jan 20, 2026
f31f86c
fix(scenario7): :bug: update BUC loopback troubleshooting details
thkruz Jan 20, 2026
f586657
fix(scenario1): :bug: update quiz objectives and remove auto type
thkruz Jan 20, 2026
9f52aca
fix(scenario2): :bug: add 'click-tab' objective and update answer
thkruz Jan 20, 2026
583b476
fix(dashboard-tab): :bug: collect alarms from equipment
thkruz Jan 20, 2026
1deaff9
fix(scenario7): :bug: update frequency and amplitude details
thkruz Jan 20, 2026
1597f0a
fix(scenario7): :bug: update BUC troubleshooting details
thkruz Jan 20, 2026
5658789
fix(buc-adapter): :bug: update LO frequency clamping value
thkruz Jan 20, 2026
0b3084d
fix(scenario3): :bug: update traffic control navigation text
thkruz Jan 24, 2026
8a22e6d
fix(real-time-spectrum-analyzer): :bug: adjust min amplitude calculation
thkruz Jan 24, 2026
e77b486
fix(ground-stations): :bug: update minGain to -100 dB
thkruz Jan 24, 2026
689cffc
fix(objectives-manager): :bug: add buc gain condition check
thkruz Jan 24, 2026
2da7a3b
fix(scenario7): :bug: update BUC gain and loopback logic
thkruz Jan 24, 2026
453631d
fix(buc-module): :bug: enforce output power saturation limit
thkruz Jan 25, 2026
9de510f
fix(hpa-module): :bug: update P1dB and max output power
thkruz Jan 25, 2026
db68556
fix(tx-chain-tab): :bug: update back-off label to Max Output Power
thkruz Jan 25, 2026
e51d2a0
fix(scenario7): :bug: update maintain condition logic
thkruz Jan 25, 2026
f9094ab
feat(events): :sparkles: add hint system events and interfaces
thkruz Jan 26, 2026
ed44ba9
feat(objectives): :sparkles: add hint support to objective types
thkruz Jan 26, 2026
a112a6e
feat(user-account): :sparkles: add hintPenalties to progress tracking
thkruz Jan 26, 2026
afcf41f
feat(modal): :sparkles: add System character for solo scenarios
thkruz Jan 26, 2026
31b2641
feat(modal): :sparkles: add hint system components
thkruz Jan 26, 2026
94a74c9
feat(scoring): :sparkles: integrate hint penalties into scoring
thkruz Jan 26, 2026
870aa08
feat(objectives): :sparkles: add hint button to checklist UI
thkruz Jan 26, 2026
51f220e
feat(sidebar): :sparkles: add hint button click handling
thkruz Jan 26, 2026
ab2264b
feat(quiz-modal): :sparkles: support System character for self-checks
thkruz Jan 26, 2026
5c84adb
refactor(draggable): :recycle: improve modal z-index handling
thkruz Jan 26, 2026
4fbb34a
feat(scenario8): :sparkles: update quizzes for solo mode and add hints
thkruz Jan 26, 2026
28eef61
fix(ground-stations): :bug: increase Vermont LNB gain to 65 dB
thkruz Jan 26, 2026
caf51d0
style(draggable-html-box): :lipstick: adjust checklist padding and he…
thkruz Jan 26, 2026
f9aced7
docs: :memo: add Character.SYSTEM for solo quizzes
thkruz Jan 26, 2026
54b736e
style(objectives-checklist): :art: remove padding from checklist
thkruz Jan 26, 2026
7d80a87
feat(events): :sparkles: add HPA noise amplification violation event
thkruz Jan 31, 2026
0ed0098
feat(objectives): :sparkles: add TX modem condition types
thkruz Jan 31, 2026
075492e
feat(transmitter): :sparkles: add intermittent fault simulation
thkruz Jan 31, 2026
85d9086
feat(rf-front-end): :sparkles: add intermittent dropout filtering and…
thkruz Jan 31, 2026
d53f2f8
feat(base-page): :sparkles: handle HPA noise amplification failure
thkruz Jan 31, 2026
013abe7
fix(satellites): :bug: reduce AURORA-7 beacon power to 6 dBm
thkruz Jan 31, 2026
3502e4c
feat(scenario8): :sparkles: add TX modem fault diagnosis phase
thkruz Jan 31, 2026
3fd49b6
feat(quiz-manager): :sparkles: emit pending for next incomplete quiz
thkruz Jan 31, 2026
c5c8658
fix(quiz): :bug: improve quiz button visibility checks
thkruz Jan 31, 2026
2fbc9cf
feat(scenario1): :sparkles: refactor objectives handling and tests
thkruz Jan 31, 2026
a27e3f4
feat(scenario2): :sparkles: refactor scenario 2 tests and objectives
thkruz Jan 31, 2026
83d1ff8
test: :white_check_mark: add Scenario 3 full completion tests
thkruz Jan 31, 2026
dbef240
feat(scenario4): :sparkles: add full completion tests for Scenario 4
thkruz Jan 31, 2026
d29713c
feat(scenario5): :sparkles: add full completion tests for Scenario 5
thkruz Jan 31, 2026
0704143
feat(scenario6): :sparkles: add full completion tests for Scenario 6
thkruz Jan 31, 2026
8b82de8
feat(scenario7): :sparkles: add full completion tests for Scenario 7
thkruz Jan 31, 2026
8701348
feat(campaigns): :sparkles: add custom locked/disabled text support
thkruz Feb 1, 2026
330577e
feat(campaigns): :sparkles: add placeholder campaigns
thkruz Feb 1, 2026
6c8667b
refactor(sandbox): :recycle: modernize using ground station factories
thkruz Feb 1, 2026
7999cdb
feat(campaigns): :sparkles: add NATS sandbox scenario
thkruz Feb 1, 2026
ee06649
refactor(scenarios): :recycle: standardize equipment list formatting
thkruz Feb 1, 2026
c9bf975
fix(campaigns): :bug: exclude sandbox from progress tracking
thkruz Feb 1, 2026
7a9bbd3
feat(tx-chain): :sparkles: add output power display
thkruz Feb 2, 2026
8651318
feat(transmitter): :sparkles: add throttled output power display
thkruz Feb 2, 2026
604646e
feat(scenario8): :sparkles: update tracking and signal checks
thkruz Feb 2, 2026
1aa0be4
test(scoring): :white_check_mark: add hintPenalties field to score tests
thkruz Feb 2, 2026
d2b2a54
test(rf-front-end): :white_check_mark: update RF equipment test expec…
thkruz Feb 2, 2026
b06b924
test(hpa-adapter): :white_check_mark: fix power meter and mock expect…
thkruz Feb 2, 2026
4ca13f0
test(quiz-modal): :white_check_mark: fix DraggableBox mock for DOM ha…
thkruz Feb 2, 2026
c2d879d
test(campaign-selection): :white_check_mark: skip outdated sandbox ca…
thkruz Feb 2, 2026
ce8fc72
test(sandbox): :white_check_mark: rewrite tests for current sandbox data
thkruz Feb 2, 2026
45c5438
chore(deps): :recycle: migrate test framework from Jest to Vitest
thkruz Feb 2, 2026
dc7ede0
test: :recycle: migrate all tests from Jest to Vitest
thkruz Feb 2, 2026
8066211
chore: :wrench: add Jest to Vitest migration helper scripts
thkruz Feb 2, 2026
0a8ebc7
ci: :construction_worker: update coverage reporter flags in tests
thkruz Feb 2, 2026
5faa2bf
1.1.0
thkruz Feb 2, 2026
2bd20c3
fix(test): :bug: rename vitest config to .mts for ESM compatibility
thkruz Feb 2, 2026
a3dc66e
chore: :wrench: update default Node.js version to 22
thkruz Feb 3, 2026
2400c7b
ci: :construction_worker: add json reporter for coverage
thkruz Feb 3, 2026
31cb5f1
build: :arrow_up: update eslint to version 9.39.2
thkruz Feb 3, 2026
4bd2b4d
refactor: :recycle: remove unused sandbox card reference
thkruz Feb 3, 2026
46dbc22
ci: :construction_worker: update e2e-tests dependencies and flow
thkruz Feb 3, 2026
2947ed8
build: :construction_worker: add ESLint configuration file
thkruz Feb 3, 2026
eb80e4e
remove: :fire: delete unused Babel configuration file
thkruz Feb 3, 2026
6402e73
build: :heavy_minus_sign: update lint command and remove unused deps
thkruz Feb 3, 2026
319ba7a
refactor: :rotating_light: fix linting error on build-pipeline.yml
thkruz Feb 3, 2026
4d447fc
ci: :wrench: add on.push trigger for CodeQL default branch analysis
thkruz Feb 3, 2026
942eb32
ci: :arrow_up: upgrade CodeQL actions from v3 to v4
thkruz Feb 3, 2026
564c02b
ci: :sparkles: make E2E tests optional with local attestation require…
thkruz Feb 3, 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
  •  
  •  
  •  
10 changes: 10 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,13 @@ PUBLIC_USER_API_URL=https://user.keeptrack.space
# Set to R2 custom domain for production (e.g., https://assets.signalrange.space)
# This enables serving large audio files from R2 instead of bundling them
PUBLIC_ASSETS_BASE_URL=

# Developer Menu Whitelist
# Comma-separated list of Supabase user IDs that can access the dev menu
# Example: PUBLIC_DEV_USER_IDS=uuid1,uuid2,uuid3
PUBLIC_DEV_USER_IDS=

# Logging Level
# Controls minimum log level shown in console: LOG, INFO, WARN, ERROR
# Default: LOG (shows everything)
PUBLIC_LOG_LEVEL=LOG
4 changes: 3 additions & 1 deletion .env.production
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,6 @@ PUBLIC_USER_API_URL=https://user.keeptrack.space
# Leave empty for local development (uses local files in public/)
# Set to R2 custom domain for production (e.g., https://assets.signalrange.space)
# This enables serving large audio files from R2 instead of bundling them
PUBLIC_ASSETS_BASE_URL=https://assets.signalrange.space
PUBLIC_ASSETS_BASE_URL=https://assets.signalrange.space

PUBLIC_LOG_LEVEL=WARN
2 changes: 1 addition & 1 deletion .github/actions/setup-node-project/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ inputs:
node-version:
description: 'Node.js version to use'
required: false
default: '18'
default: '22'

runs:
using: 'composite'
Expand Down
7 changes: 7 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
## Description
<!-- Describe your changes -->

## Testing

- [ ] Unit tests pass (`npm test`)
- [ ] E2E tests pass locally (`npm run test:e2e`)
58 changes: 54 additions & 4 deletions .github/workflows/build-pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,14 @@ name: Build Pipeline

on:
workflow_dispatch:
push:
branches:
- main
- develop
paths-ignore:
- '**.md'
- 'docs/**'
- 'LICENSE'
pull_request:
branches:
- main
Expand Down Expand Up @@ -93,7 +101,8 @@ jobs:
timezoneLinux: 'America/New_York'

- name: Run Tests with Coverage
run: npm test -- --coverage --coverageReporters=text --coverageReporters=lcov --coverageReporters=json-summary
run: npm test -- --coverage --coverage.reporter=text --coverage.reporter=lcov
--coverage.reporter=json-summary --coverage.reporter=json

- name: Upload Coverage Artifact
uses: actions/upload-artifact@v4
Expand Down Expand Up @@ -121,6 +130,47 @@ jobs:
echo "Line coverage: ${COVERAGE}%" >> $GITHUB_STEP_SUMMARY
fi

e2e-tests:
name: E2E Tests
needs: [lint, type-check, test, security-audit]
if: >-
(github.event_name == 'pull_request' &&
contains(github.event.pull_request.labels.*.name, 'run-e2e')) ||
github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
submodules: recursive

- name: Setup Node Project
uses: ./.github/actions/setup-node-project

- name: Install Playwright Browsers
run: npx playwright install --with-deps chromium

- name: Run E2E Tests
id: e2e
run: npm run test:e2e

- name: Upload Playwright Report
if: always()
uses: actions/upload-artifact@v4
with:
name: playwright-report
path: playwright-report/
retention-days: 7

- name: E2E Test Summary
if: always()
run: |
echo "### E2E Test Results" >> $GITHUB_STEP_SUMMARY
echo "- Status: ${{ steps.e2e.outcome }}" >> $GITHUB_STEP_SUMMARY
if [ -d playwright-report ]; then
echo "E2E tests completed. See artifact for details." >> $GITHUB_STEP_SUMMARY
fi

security-audit:
name: Security Audit
runs-on: ubuntu-latest
Expand Down Expand Up @@ -213,16 +263,16 @@ jobs:
uses: actions/checkout@v4

- name: Initialize CodeQL
uses: github/codeql-action/init@v3
uses: github/codeql-action/init@v4
with:
languages: javascript-typescript
queries: security-extended

- name: Autobuild
uses: github/codeql-action/autobuild@v3
uses: github/codeql-action/autobuild@v4

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
uses: github/codeql-action/analyze@v4
with:
category: '/language:javascript-typescript'

Expand Down
42 changes: 42 additions & 0 deletions .github/workflows/e2e-attestation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
name: E2E Attestation

on:
pull_request:
types: [opened, synchronize, reopened, edited]
branches:
- main
- develop

permissions:
contents: read
pull-requests: read

jobs:
e2e-attestation:
name: E2E Attestation
runs-on: ubuntu-latest
steps:
- name: Check E2E Attestation
uses: actions/github-script@v7
with:
script: |
const body = context.payload.pull_request.body || '';
const pattern = /- \[x\]\s+E2E tests pass locally/i;

if (!pattern.test(body)) {
core.setFailed(
'E2E attestation required: Please check the box in the PR description ' +
'confirming you have run E2E tests locally and they pass.\n\n' +
'Add this to your PR description:\n' +
'- [x] E2E tests pass locally (`npm run test:e2e`)'
);
return;
}

core.info('E2E attestation confirmed.');

await core.summary
.addHeading('E2E Attestation', 3)
.addRaw('Developer has attested that E2E tests were run locally and pass.')
.write();
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,12 @@ yarn-error.log*
coverage/
.nyc_output/

# Playwright
/test-results/
/playwright-report/
/blob-report/
/playwright/.cache/

# Temporary files
tmp/
temp/
Expand All @@ -38,6 +44,7 @@ supabase/
# Notes
*.notes.*
notes
.archive

# Unused Icons
src/assets/icons/wip
Expand Down
5 changes: 4 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,10 @@
},
"github.copilot.chat.commitMessageGeneration.instructions": [
{
"text": "Format: <type>: :emoji: <description>"
"text": "Format: <type>(<scope>): :emoji: <description>"
},
{
"text": "<scope> is optional and can be omitted if not needed"
},
{
"text": "ALWAYS include the emoji - this is required"
Expand Down
29 changes: 29 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,35 @@ new Satellite(
- Example: Uplink at 5943 MHz with `frequencyOffset: 2.225e9` → Downlink at 3718 MHz
- **Don't duplicate**: If a signal is in the uplink array, the transponder creates the downlink automatically. Don't add it to both arrays.

## TypeScript Type Checking

**Always use the npm script to check for TypeScript errors:**

```bash
npm run type-check
```

**Do NOT run tsc directly on individual files:**

```bash
# WRONG - will fail with module resolution errors
npx tsc --noEmit src/campaigns/nats/scenario5.ts
```

This project uses `@app/*` path aliases (e.g., `@app/types`, `@app/equipment/...`) that require the full tsconfig.json configuration. Running tsc on individual files bypasses this and produces false "Cannot find module" errors.

## Git Commits

- Do NOT add `Co-Authored-By` lines to commit messages
- Use conventional commit format: `type(scope): description`
- Use emoji in commit titles for clarity:
- Example: feat: :sparkles: Add new frequency adjustment control
- ✨ `:sparkles:` for new features
- 🐛 `:bug:` for bug fixes
- ♻️ `:recycle:` for refactoring
- 📝 `:memo:` for documentation changes
- Common types: `feat`, `fix`, `refactor`, `test`, `docs`, `chore`

## Planning

When you use Plan Mode or create multi-step plans in this repo:
Expand Down
38 changes: 0 additions & 38 deletions babel.config.cjs

This file was deleted.

Loading
Loading