Repository navigation
Reconcile main with master and protect live CSS - #52
Conversation
…aceful import fallback - Remove revenueholdings-license>=0.1.0 from required dependencies - Add license optional-dependencies group with revenueholdings-license - Make require_license() import conditional: try/except ImportError - On ImportError, define no-op require_license() and print warning - Fixes CI breakage caused by revenueholdings-license not on PyPI (COM-79, COM-82, COM-83)
# Conflicts: # pyproject.toml # src/deadcode/cli.py
docs: add AGENTS.md
…h graceful fallback)
…s Revenue Holdings / stale 2026 year); W-directed fleet-wide pass
…ssors Detect and treat `styles.card` / `styles['card-hover']` (the canonical Next.js/React CSS-module consumption pattern) as used classes. Previously every *.module.css class was reported as orphaned and marked removable=True, which could delete live styles. Bracket accessors are recognized and non-module object access (util.foo) is not over-matched. Adds TestCSSModuleUsage regression tests; all 116 tests pass, ruff clean. Co-Authored-By: cowork-bot <cowork-bot@users.noreply.github.com>
The previous SHA 34e1148 was a v6-era PR commit, not the v4 tag. GitHub Actions could not resolve it, causing zero-step CI failures. The correct v4 tag SHA is 11d5960a326750d5838078e36cf38b85af677262.
…ot a valid ref)
…e needs local repo)
Validated local candidate: 57daaacaffc6dfed6cfc4458edc6e2e889c138c1 - 57daaacaffc6dfed6cfc4458edc6e2e889c138c1 fix(scanner): preserve module styles and enforce project boundary
Validated local candidate: 33b48f9efde1ecd6207aea0fca07cd6b4560bb2e - 33b48f9efde1ecd6207aea0fca07cd6b4560bb2e fix(cli): validate remove target and organize imports
Automated Code ReviewRuff lint: 0 issue(s)Ruff format: CleanSecret detection: 0 potential secret(s)Verdict: PASS Automated by Coding-Dev-Tools/.github reusable workflow. |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: bd6773499f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Collect class evidence from a conservative runtime view while preserving contextual value syntax, template expressions and stylesheet import scope. Keep raw symbol analysis intact and cover both original review findings plus independent release-blocking boundary controls. Align the existing Python 3.10 dev tomli dependency with the lock metadata without changing package versions or artifacts.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6ce8439091
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Read class property and assignment targets through code tokens, retaining literal values and conservative dynamic or compound writes without interpreting comparisons or JSX attributes as assignments. Keep closing JSX tags, fragments and generic self-closing delimiters from swallowing later module references as regex bodies. Add94 source and actual-removal controls while preserving all473 prior cases.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8d0ec1843f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e722f4bebf
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b893f1dc4f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Protect live CSS while distinguishing erased TypeScript declarations from runtime usage. CSS-module references remain visible through raw JSX attributes, nested expressions, Unicode and generic components, and code following closing elements. Complete named-default import lists now retain runtime bindings through trailing commas, other specifiers, quoted export names and legal comment gaps; type-only imports and noncode keep their existing boundaries.
CSS findings now describe complete rule boundaries. Split selector headers, multiline bodies and incomplete rules remain available for manual inspection, while complete one-line rules retain safe automatic removal. Existing stylesheet ownership, shared-rule protection, computed-value uncertainty, bounded JSX work, reconciled branch history and package policy remain covered.
All three PRs (#51, #52, #53) carry
ba55f44ff7259b995cfd2bf85f7f3eb3262eb3ad(tree4382cf55bfd1797d44a7000d0edf7f3036536317).Validation on this exact revision:
The two findings from the preceding revision have been fixed and their threads resolved after publication. Current hosted checks and automated review are being refreshed. Independent protected-branch approval remains required for merging into
master. Native Windows/macOS acceptance remains separate from this fresh Linux qualification.October 19 review follow-up
Static computed object keys such as
['className'], escaped keys and static template keys now preserve live global CSS through scan and removal. The correction retains existing member assignments, comment/string/type exclusions and stylesheet ownership. It adds 33 regression cases; 271 focused local tests pass. The complete hosted Python 3.10–3.13 matrices pass atb893f1dc4f21d136fd8f72bff9da3c7c13914f39; Python 3.12 reports 750 passed, zero skipped. The reported review thread is resolved. Independent approval remains required before merge.October 19 complete-line removal follow-up
Whole-line CSS removal now requires an isolated complete class-selector rule. Sibling element/ID rules, directives, non-class selector alternatives, unrepresented complex selectors and multiline comment edges remain diagnostic-only. The guard applies to global CSS/SCSS and CSS modules. A Windows test fixture now writes exact JavaScript CRLF continuation bytes, preserving the existing case.
Validation at
42dd27b4796470807baf310fbeeabb3bbeacd3c9: 249 focused CSS tests pass. 69 new rule-boundary cases cover scan, dry run and real removal. The complete hosted Python 3.10–3.13 matrices pass; Python 3.12 reports 819 passed, zero skipped. Ruff and formatting pass. All reported threads are resolved. The owner has explicitly authorized the existing administrator review exemption for this reviewed public batch, retaining passing automated tests/security checks and zero unresolved findings as merge conditions.