Repository navigation
feat: detection profiles, workspace roots and consumer runtime toolchain - #17
Merged
Merged
Conversation
…erated code Reduce first-run noise on real repository layouts: - Drupal profile scans .module, .theme, .install, .inc, .profile and .engine files as PHP in PHPCS and jscpd, with structural tree-sitter anchors. - Source roots add workspace members from manifests (pnpm-workspace.yaml, package.json workspaces, depth-1 packages, composer autoload, uv workspace, setuptools where), unioned with conventional and discovered roots. Member patterns use a bounded segment matcher instead of picomatch. - Payload/Next profile excludes generated types, import map, admin route group, migrations, seed data and Next build output, scoped to the resolved TypeScript roots, and reports a Notice. - Knip receives static framework entry patterns per workspace owner, one workspace block per owner with its own ignore list, ignoreWorkspaces for members owning no source root, and plugin toggles generated from the complete knip 6.35.1 plugin registry (verified by a test). - New fixtures drupal-project, payload-project and monorepo-project run in the integration suite, including a negative mutation for excluded code. Adds smol-toml (runtime) and knip (dev) as exact dependencies.
- Image ships corepack (pnpm 10.17.1 default, pnpm 11.5.2 and yarn 1.22.22 cached), uv 0.12.14, CPython 3.14.7 and a second tool venv /opt/venv314. - Python target comes from the root or uv workspace members (.python-version, else the highest requires-python lower bound); targets at or above 3.14 run the Python tools from /opt/venv314, Ruff receives target-version, and the target is part of the configuration hash when Python is a resolved language. - The version gate probes each tool through the environment its check uses. - doctor and versions gain a Runtime group. - Next and Payload profiles are split and detected per workspace owner; plain Next apps keep migrations and seed in scope. - Workspace members map to <member>/src only when all sources live there. - Knip entries cover the remaining Next file conventions. - POLICY_VERSION 2026-09-23.1: Knip plugin toggles, Drupal extensions and profile scoping change findings, so every baseline is re-initialized.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Combines subproject E (detection without noise) and subproject B (consumer toolchain and runtime targeting). Supersedes #16, whose commits are included here together with fixes from the final combined review.
Detection (E)
.module,.theme,.install,.inc,.profileand.engineas PHP (PHPCS, jscpd, anchors).pnpm-workspace.yaml,package.jsonworkspaces, depth-1 packages,composer.jsonautoload,[tool.uv.workspace]and setuptoolswhere, through a bounded segment matcher.Runtime (B)
/opt/venv314./opt/venv314at 3.14+, sets Rufftarget-version, and joins the configuration hash when Python is resolved.doctorandversionsgain a Runtime group.Migration
POLICY_VERSIONis now2026-09-23.1: plugin toggles, Drupal extensions and profile scoping change findings. After upgrading, removequality/and runcode-quality check --initialize. No Runroom repository has a.code-quality.ymlyet.Decisions
phpVersionis not injected: PHPStan infers it fromconfig.platform.php, and a lower Composer floor produces diagnostics the fail-closed adapter rejects.doctorprobes onlycorepack; the pnpm/yarn shims readpackageManagerfrom the analysed repository.paths.<language>; Payload exclusions scoped to a TS root also apply to other languages under it; the Knipnode_modulesguard checks the root only.Verification
pnpm verify: typecheck, lint, 700 tests, build.pnpm docker:build && pnpm integration: 26/26 rows (10 fixtures includingdrupal-project,payload-project,monorepo-project,python314-project; mutations including negative ones).loadConfig.