Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
7d67900
ci: make Ubuntu apt installs robust across runner images (try multipl…
Obayne Sep 30, 2025
7722efc
ci: set QT_QPA_PLATFORM=minimal on Windows and move sample zips to ar…
Obayne Sep 30, 2025
d007c83
ci: make quick-tests resilient to missing test files and prefer headl…
Obayne Sep 30, 2025
4d250b9
ci: make pytest args assembly robust across shells (use single string…
Obayne Sep 30, 2025
29dbbd7
docs: reference headless startup smoke-test (quick-tests workflow use…
Obayne Sep 30, 2025
471bb72
fix(db): restore db/connection.py (clean implementation)
Obayne Sep 30, 2025
0a4474e
ci: checkout submodules recursively so AutoFireBase/tests/ are available
Obayne Sep 30, 2025
dbb8be3
ci: trigger quick-tests run after adding submodule checkout
Obayne Sep 30, 2025
99c0dd4
ci: trigger quick-tests run after adding submodule checkout
Obayne Sep 30, 2025
01e2dff
fix: add missing test_headless_startup.py and remove duplicate test e…
Obayne Sep 30, 2025
0cad3ea
ci: simplify quick-tests to run only headless startup smoke test; ins…
Obayne Sep 30, 2025
81d5bff
ci: trigger quick-tests after simplifying to headless startup
Obayne Sep 30, 2025
372c1a2
ci: avoid checking out submodules (runner failed to fetch AutoFireBas…
Obayne Sep 30, 2025
868dbd2
ci: trigger quick-tests after removing submodule checkout
Obayne Sep 30, 2025
38380a3
ci: trigger quick-tests after removing submodule checkout
Obayne Sep 30, 2025
a1e0e45
Update AutoFireBase
Obayne Sep 30, 2025
3a5f8fd
Add runs.json file
Obayne Sep 30, 2025
23ab083
ci: avoid recursive submodule checkout in quick-tests (submodules: fa…
Obayne Sep 30, 2025
2bf6fe6
ci: install PySide6 and pytest-qt for headless tests
Obayne Sep 30, 2025
5178c22
ci: add PySide6 and pytest-qt to requirements-dev.txt for headless tests
Obayne Sep 30, 2025
8b925dc
ci: apt + minimal pip for quick-tests (install extra EGL libs on ubun…
Obayne Oct 1, 2025
ba99d87
ci: quick-tests use minimal requirements + pip cache; add requiremen…
Obayne Oct 1, 2025
34c41d0
Clean up duplicate AutoFireBase directory and expand settings dialog
Obayne Oct 3, 2025
ec1fa0c
rescue/golden-path: Initialize baseline with database
Obayne Oct 3, 2025
cea63ee
feat: Complete project restructure to modular architecture
Obayne Oct 3, 2025
aa132f7
docs: Establish MASTER_SPECIFICATION.rtf as authoritative scope of wo…
Obayne Oct 3, 2025
d56b3ae
docs: Establish comprehensive continuous development practices
Obayne Oct 3, 2025
63ec1d9
docs: Add comprehensive PROJECT_SPECIFICATION.md
Obayne Oct 3, 2025
d7839b8
docs: Add comprehensive command references for development and CI/CD
Obayne Oct 3, 2025
134e1c8
docs: Add complete VS Code setup guide and automation for non-program…
Obayne Oct 3, 2025
7da0836
MASSIVE ENHANCEMENT: Complete Professional Fire Alarm CAD System
Obayne Oct 4, 2025
d4aeaa6
WIP: System configuration and database improvements
Obayne Oct 4, 2025
bbb84e9
Fix panel selection dialog font visibility
Obayne Oct 4, 2025
31b0cd4
Fix panel selection font visibility in System Builder
Obayne Oct 4, 2025
dfdbe86
Fix panel selection font visibility
Obayne Oct 4, 2025
885cb7d
PANEL VISIBILITY FIXED + PAPERSPACE HIDDEN
Obayne Oct 4, 2025
ac377eb
OSNAP test and fixes: intersection math, item source; public wrapper;…
Obayne Oct 9, 2025
f7a9d7a
feat: port snapping + auto-connect on placement; tag panel terminals …
Obayne Oct 16, 2025
aab7144
chore(tests): quarantine broken comprehensive_test; tidy calculations…
Obayne Oct 22, 2025
e868131
chore(format): run pre-commit fixes (ruff/black) and tidy comprehensi…
Obayne Oct 22, 2025
f0fbd9a
test: re-enable device catalog check (incremental comprehensive tests)
Obayne Oct 22, 2025
0510592
test: add database connectivity checks (incremental comprehensive tests)
Obayne Oct 22, 2025
74e96a0
ci: add GUI tests workflow; add GUI test marker/fixture; tidy transfo…
Obayne Oct 22, 2025
9557020
test(gui): add System Builder and Model Space GUI smoke tests (skippe…
Obayne Oct 22, 2025
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
  •  
  •  
  •  
1 change: 0 additions & 1 deletion .github/ISSUE_TEMPLATE/backend_task.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,3 @@ body:
- label: Tests added (round-trip, CRUD)
- label: No module side effects
- label: ≤300 LOC changed

1 change: 0 additions & 1 deletion .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,3 @@ labels: bug
## Logs/Screenshots

## Proposed Fix

1 change: 0 additions & 1 deletion .github/ISSUE_TEMPLATE/cad_core_task.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,3 @@ body:
- label: Unit tests cover new functions
- label: No UI imports or side effects
- label: ≤300 LOC changed

27 changes: 24 additions & 3 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,36 @@
---
name: Feature request
about: Suggest an enhancement
about: Suggest an enhancement aligned with master specification
labels: enhancement
---

## Summary

[Clear, actionable description of the feature]

## Master Specification Reference

[Reference specific section from docs/MASTER_SPECIFICATION.rtf that this implements]

## Rationale

[Why this feature is needed and how it aligns with product vision]

## Acceptance Criteria
- [ ]
- [ ] Feature implemented according to master specification
- [ ] Unit tests added/updated with good coverage
- [ ] Documentation updated (README/docs/* if needed)
- [ ] Manual testing confirms functionality
- [ ] No breaking changes to existing functionality
- [ ] Code follows Black/Ruff standards

## Technical Notes

[Implementation approach, dependencies, potential challenges]

## Notes
## Priority

- [ ] Critical (blocks other work)
- [ ] High (important for next release)
- [ ] Medium (nice to have)
- [ ] Low (future consideration)
1 change: 0 additions & 1 deletion .github/ISSUE_TEMPLATE/frontend_task.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,3 @@ body:
- label: Tests added/updated (signals, handlers)
- label: No side effects in imports
- label: ≤300 LOC changed

6 changes: 4 additions & 2 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ Briefly describe the change and why it’s needed.
Closes #<number>

## Changes
-
- [ ] Small, focused diff (≤300 lines)
- [ ] No unrelated code changes
- [ ] UI changes documented if applicable

## Testing
- [ ] Unit tests added/updated
Expand All @@ -17,4 +19,4 @@ Closes #<number>
## Checklist
- [ ] Follows style (Black/Ruff)
- [ ] Docs updated (README/docs/* if needed)

- [ ] Branch name follows feat/fix/chore/<name>
1 change: 0 additions & 1 deletion .github/seed_issues.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,3 @@
"body": "Centralize key/mouse events in a small handler class and log via signal. Unit test for key mapping. See docs/SPRINT-01.md (Frontend / Input handling). DoD: Black/Ruff; tests; no side-effects."
}
]

1 change: 0 additions & 1 deletion .github/workflows/agent-orchestrator.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,3 @@ jobs:
} else {
core.info(`PR already open: #${prs[0].number}`);
}

1 change: 0 additions & 1 deletion .github/workflows/assign-owners.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,3 @@ jobs:
const login = process.env.DEFAULT_PR_OWNER || owner;
core.info(`Assigning @${login} to PR #${pr.number}`);
await github.rest.issues.addAssignees({ owner, repo, issue_number: pr.number, assignees: [login] });

22 changes: 22 additions & 0 deletions .github/workflows/ci-agent.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: CI Agent

on:
push:
branches: ["*"]
pull_request:
branches: ["*"]
workflow_dispatch:

jobs:
agent:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Agent Status
run: |
echo "CI Agent active: $GITHUB_REF on $GITHUB_REPOSITORY"
# Add custom steps below for notifications, deployment, or other automation
24 changes: 15 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,35 +1,41 @@
name: CI

on:
push:
branches: [ "**" ]
pull_request:
branches: [ "**" ]
types: [opened, synchronize, reopened]
branches:
- "**"
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest
runs-on: windows-latest
steps:
- uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
python-version: "3.11"

- name: Install dependencies
run: |
python -m pip install --upgrade pip
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
if [ -f requirements-dev.txt ]; then pip install -r requirements-dev.txt; fi
pip install -r requirements.txt
pip install pytest ruff black

- name: Auto-fix lint and format
run: |
ruff check --fix . || true
black . || true

- name: Lint (ruff)
run: ruff check .

- name: Format check (black)
run: black --check .

- name: Run tests
- name: Run all tests
env:
PYTHONPATH: ${{ github.workspace }}
run: pytest -q

41 changes: 41 additions & 0 deletions .github/workflows/gui-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: gui-tests

on:
push:
paths:
- 'tests/**'
- '.github/workflows/gui-tests.yml'
branches: ['main', 'feat/**', '*']
pull_request:
paths:
- 'tests/**'
- '.github/workflows/gui-tests.yml'
branches: ['main']

jobs:
gui-tests:
name: GUI tests (Linux headless)
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.11

- name: Install system packages for headless Qt
run: |
sudo apt-get update -y
sudo apt-get install -y xvfb libegl1-mesa libgl1-mesa-dri libgles2-mesa || true

- name: Install Python dependencies (pytest-qt + PySide6)
run: |
python -m pip install --upgrade pip
python -m pip install -r requirements-dev-minimal.txt
python -m pip install pytest-qt PySide6

- name: Run GUI-marked tests
run: |
xvfb-run -s '-screen 0 1024x768x24' pytest -q -m gui
1 change: 0 additions & 1 deletion .github/workflows/label-sprint-issues.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,3 @@ jobs:
await github.rest.issues.addLabels({ owner, repo, issue_number: i.number, labels: ['agent:auto'] });
}
}

1 change: 0 additions & 1 deletion .github/workflows/labeler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,4 +52,3 @@ jobs:
labels: [...labels],
});
}

1 change: 0 additions & 1 deletion .github/workflows/open-pr-chore-dev-setup-warnings.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,3 @@ jobs:
const pr = await github.rest.pulls.create({ owner, repo, title, head, base, body, draft: false });
core.info(`Opened PR #${pr.data.number}`);
core.setOutput('pr_number', pr.data.number);

101 changes: 101 additions & 0 deletions .github/workflows/quick-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
name: quick-tests

# Trigger only when files under `app/` or `tests/` (or this workflow) change to save CI cycles.
on:
push:
paths:
- 'app/**'
- 'tests/**'
- '.github/workflows/quick-tests.yml'
branches: ['main', 'feat/**', '*']
pull_request:
paths:
- 'app/**'
- 'tests/**'
- '.github/workflows/quick-tests.yml'
branches: ['main']

jobs:
quick-tests:
name: Quick focused tests
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
python: [3.11]

steps:
- name: Checkout
uses: actions/checkout@v4
with:
# Avoid recursive submodule update — some runners fail when .gitmodules
# references paths without urls. Keep a full fetch so tests can import
# local packages if needed.
submodules: false
fetch-depth: 0

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python }}

- name: Cache pip
uses: actions/cache@v4
with:
path: ~/.cache/pip
# Hash both the full dev requirements and the minimal requirements so
# cache is reused if either file changes. This keeps quick-tests fast.
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements-dev-minimal.txt','**/requirements-dev.txt') }}
restore-keys: |
${{ runner.os }}-pip-

- name: Install dependencies (Linux)
if: runner.os == 'Linux'
run: |
python -m pip install --upgrade pip
python -m pip install -r requirements-dev-minimal.txt
shell: bash

- name: Install dependencies (Windows)
if: runner.os == 'Windows'
run: |
python -m pip install --upgrade pip
python -m pip install -r requirements-dev-minimal.txt
shell: powershell

- name: Run headless startup smoke test (Linux uses xvfb)
if: runner.os == 'Linux'
run: |
sudo apt-get update -y
# Install a small, known set of packages that provide headless Qt support
# Try a fuller set of candidate packages that provide libEGL and OpenGL
# artifacts across different Ubuntu images.
for pkg in xvfb libegl1-mesa libegl-mesa0 libgl1 libgl1-mesa-glx libgl1-mesa-dri libgles2-mesa; do
echo "Ensuring package $pkg is installed (if available)"
sudo apt-get install -y "$pkg" || echo "Package $pkg not available on this runner, continuing"
done
# Determine the headless startup test location and run it.
if [ -f "tests/test_headless_startup.py" ]; then
TEST_PATH="tests/test_headless_startup.py"
elif [ -f "AutoFireBase/tests/test_headless_startup.py" ]; then
TEST_PATH="AutoFireBase/tests/test_headless_startup.py"
else
echo "ERROR: headless startup test missing in both tests/ and AutoFireBase/tests/ - aborting"
exit 1
fi
echo "Running pytest on: $TEST_PATH"
xvfb-run -s '-screen 0 1024x768x24' pytest -q $TEST_PATH
shell: bash

- name: Run headless startup smoke test (Windows)
if: runner.os == 'Windows'
run: |
# Ensure Qt runs headless on Windows runners
$env:QT_QPA_PLATFORM = 'minimal'
# Prefer tests/test_headless_startup.py, fall back to AutoFireBase/tests/
$h1 = 'tests/test_headless_startup.py'
$h2 = 'AutoFireBase/tests/test_headless_startup.py'
if (Test-Path $h1) { $test = $h1 } elseif (Test-Path $h2) { $test = $h2 } else { Write-Host "ERROR: headless startup test missing in both locations"; exit 1 }
Write-Host "Running pytest on: $test"
pytest -q $test
shell: powershell
1 change: 0 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,3 @@ jobs:
files: artifacts/AutoFire.exe
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

1 change: 0 additions & 1 deletion .github/workflows/seed-issues.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,3 @@ jobs:
labels: item.labels,
});
}

3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,6 @@ Models/
*.bin
C:/Dev/Models/
.dev_models/

# Ignore local sample zip bundles moved to artifacts
/artifacts/zip-samples/
1 change: 0 additions & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,3 @@ repos:
hooks:
- id: end-of-file-fixer
- id: trailing-whitespace

1 change: 0 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,3 @@ Branching

Reviews
- HAL reviews and requests changes as needed. At least one human approval to merge.

Loading
Loading