Skip to content

chore: fix CI workflow and harden tools against local token defaults#46

Closed
Obayne wants to merge 73 commits intomainfrom
chore/hardening/ci-and-tools
Closed

chore: fix CI workflow and harden tools against local token defaults#46
Obayne wants to merge 73 commits intomainfrom
chore/hardening/ci-and-tools

Conversation

@Obayne
Copy link
Owner

@Obayne Obayne commented Oct 24, 2025

This PR fixes a malformed CI workflow and hardens several tools scripts to avoid using local token file defaults. It also updates .gitignore to prevent accidental commits of local token files and automation logs. Tests pass locally (60 passed, 1 skipped, 50 deselected).\n\nChanges:\n- Fix .github/workflows/ci.yml\n- Require explicit --token-path in tools/create_repo_secret.py (no C:\Dev default)\n- Remove hard-coded token env assignment in tools/scripts/run_create_prs.ps1\n- Append local token/log ignores to .gitignore\n\nIf you want any changes to the PR title/body or to split changes into multiple PRs, let me know.

…ess smoke-test; keep apt loop and Windows minimal platform
Introduces the runs.json file to the project. The contents and purpose of this file are not specified in the diff.
- Remove duplicate AutoFireBase/ subdirectory (backed up to C:\Dev_cleanup)
- Expand settings dialog with CAD functionality options (units, scale, line weight, color)
- Add menu and table visibility settings (device palette, properties dock, status bar)
- Add additional settings (auto-save interval, OSNAP toggles)
- Add project overview window with organizer, calendar, and AI assistance
- Add comprehensive tests and QA checklist for new features
- Update app controller to support settings dialog and project overview
- Add CLI wrapper and debug tools for development
- Format code with black and fix lint issues
- Create autofire.db database file with schema and coverage tables
- Tag legacy/0.0.x-current to preserve current state
- Start rescue/golden-path branch to restore core functionality
- Next: Strip down to essential golden path workflow
- Move from monolithic app/ structure to clean modular design
- frontend/: UI components, windows, dialogs, widgets
- backend/: business logic, persistence, catalog, logging
- cad_core/: CAD algorithms, tools, geometry, units
- Remove obsolete monolithic files and conflicting code
- Create AutoFireController for multi-window management
- Fix CanvasView and add missing controller signals
- Clean entry point with main.py delegating to frontend.app
- Application now runs successfully with Model/Paperspace/Project windows

Note: Some minor linting issues remain (unused variables, line length)
and will be addressed in follow-up commits.
…rk reference

- Add docs/MASTER_SPECIFICATION.rtf as the master scope of work
- Update docs/DOCUMENTATION_SUMMARY.md to reference master spec
- Update README.md to prominently link to master specification
- This document serves as the primary reference for all AutoFire development
- Add DEVELOPMENT_WORKFLOW.md: Complete guide for what/when/who/how
- Add SPRINT_PLANNING.md: Structured sprint planning template
- Add RELEASE_PROCESS.md: Formal release management process
- Enhance feature_request.md: Master spec references and acceptance criteria
- Update CODEOWNERS: Clear code ownership by architectural layer
- Update DOCUMENTATION_SUMMARY.md: Include new workflow docs

Ensures no ambiguity in development process moving forward.
- Create detailed technical specification document
- Cover project structure, file paths, Python classes, relationships
- Document entry points, build process, testing structure
- Include development setup and usage guide
- Update documentation summary to reference new spec

This provides complete technical reference for developers.
- Add DEVELOPMENT_COMMANDS.md: Complete command sheet for autonomous development
- Add CI_CD_AGENTS.md: Free CI/CD services with setup commands and configurations
- Update DOCUMENTATION_SUMMARY.md: Include new command reference docs

Provides complete automation-ready command references for development workflow.
…mers

- Add VS_CODE_SETUP_GUIDE.md: Complete setup instructions for automated development
- Add AutoFire.code-workspace: Pre-configured VS Code workspace with all settings
- Add setup_powershell_profile.ps1: Automated PowerShell alias setup
- Update DOCUMENTATION_SUMMARY.md: Include new setup guide

Enables AI-guided development with maximum automation for project management.
Copilot AI review requested due to automatic review settings October 24, 2025 16:14
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR fixes a malformed CI workflow and hardens several tools scripts to avoid using local token file defaults, ensuring safer execution in CI and on different developer machines. It also updates .gitignore to prevent accidental commits of local token files and automation logs.

Key Changes:

  • Fixed .github/workflows/ci.yml syntax error
  • Removed hard-coded token path defaults from tools/create_repo_secret.py (now requires explicit --token-path)
  • Removed hard-coded token env assignment in tools/scripts/run_create_prs.ps1
  • Added local token/log file patterns to .gitignore

Reviewed Changes

Copilot reviewed 139 out of 408 changed files in this pull request and generated 3 comments.

File Description
Multiple new files Large number of new files added (frontend panels, dialogs, documentation, utilities) unrelated to stated PR purpose
.gitignore changes Not visible in provided diffs
CI workflow changes Not visible in provided diffs
Token-related changes Not visible in provided diffs
Comments suppressed due to low confidence (1)

frontend/dialogs/array.py:1

  • Import order should follow PEP8 convention: standard library imports first, then third-party imports, then local imports. The import from app.device should come after the PySide6 import. Use ruff check --select I --fix . to auto-sort imports.
from app import units

self.lbl_suggested_candela.setText("N/A (out of range)")
self.source = "manual"
except Exception as e:
except (ImportError, ValueError) as e:
Copy link

Copilot AI Oct 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This exception handler narrows the exception type from the original Exception (which was explicitly caught to ensure robust fallback), but the comment on line 87-89 states that catching Exception is deliberate. If you narrow the exception scope here, ensure the fallback logic is tested for other exception types that might occur (e.g., AttributeError, TypeError) and update the comment to reflect the new narrower exception handling.

Suggested change
except (ImportError, ValueError) as e:
except Exception as e:

Copilot uses AI. Check for mistakes.
Comment on lines 1 to 2
from app.device import DeviceItem
from PySide6 import QtCore, QtWidgets
Copy link

Copilot AI Oct 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Import order should follow PEP8 convention: standard library imports first, then third-party imports, then local imports. The import from app.device should come after the PySide6 import. Use ruff check --select I --fix . to auto-sort imports.

Suggested change
from app.device import DeviceItem
from PySide6 import QtCore, QtWidgets
from PySide6 import QtCore, QtWidgets
from app.device import DeviceItem

Copilot uses AI. Check for mistakes.
Comment on lines 85 to +86
# Track the source of the settings
self.source = "manual"
self.ed_diam.valueChanged.connect(self._on_manual_edit)
self.ed_L10.valueChanged.connect(self._on_manual_edit)
self.ed_target.valueChanged.connect(self._on_manual_edit)
self.ed_spacing.valueChanged.connect(self._on_manual_edit)

def suggest_candela(self):
try:
from backend.coverage_service import (
get_required_ceiling_strobe_candela,
get_required_wall_strobe_candela,
)

room_size = self.ed_room_size.value()
ceiling_height = self.ed_ceiling_height.value()
mount = self.cmb_mount.currentText()

candela = None
if mount == "wall":
candela = get_required_wall_strobe_candela(room_size)
else: # ceiling
candela = get_required_ceiling_strobe_candela(ceiling_height, room_size)

if candela:
self.lbl_suggested_candela.setText(f"{candela} cd")
else:
self.lbl_suggested_candela.setText("N/A (out of range)")
except Exception as e:
self.lbl_suggested_candela.setText(f"Error: {e}")


# load existing
if existing:
mode = existing.get("mode", "none")
# Preserve provided existing settings for later use
self._existing = existing
Copy link

Copilot AI Oct 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The restructured code now assigns self._existing = existing before the conditional block that uses it (lines 88-108), and self.source is set twice: once on line 84 and again on line 108. Consider consolidating the initialization logic to avoid redundant assignments and improve clarity.

Copilot uses AI. Check for mistakes.
@Obayne Obayne closed this Nov 7, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants