Skip to content

Compare resolved ECS and CoiSA policies with golden fixtures #5

Open

Description

@coisa

Outcome

Decide the canonical detailed policy before any broad consumer migration. Compare DevTools ECS/Rector/PHPDoc against coisa/php-cs-fixer without claiming equivalence.

Acceptance

  • Capture resolved rule-by-rule sets at fixed versions, precedence, risky flags, header placement/year, Finder exclusions, runtime versus consumer PHP minimum and custom Rector PHPDoc behavior.
  • Golden fixtures for representative style and semantics plus second-pass idempotence/no-write checks.
  • Record selected rules, deliberate exclusions and any behavior-changing opt-in profile.
  • Evaluate optional Twig/magic-value policies only if selected; coordinate Composer normalization with its separate domain and retain one writer.
  • Existing consumer workflows are references only; no migration or retroactive change to public APIs by inference.

Can begin as a read-only comparison independently; implementation depends on #1. Supports #4 and later explicitly authorized pilot rollouts. Current-head checks, Codex and CodeRabbit approval apply to every resulting PR.

Activity

  1. coisa commented on Oct 21, 2026

    @coisa
    ContributorAuthor

    Independent source-comparison checkpoint while external review gates remain pending; this does not close #5 or change any PR HEAD.

    Read fixed source snapshots: CoiSA fdee71bc63d4846463d7715afbc515d63ef2c537 (clean), DevTools35b5f78ac63813ec07aa3fb3eda08751541e28e1, Code Standards9666d997c864e4e74b7ca0ca8cbce849091353a7. Both legacy composer.lock files are untracked local files, so they are inventory rather than published reproducible graphs. Observed local versions differ: CoiSA Fixer3.95.27; DevTools Fixer3.95.1/ECS13.0.4/Rector2.4.2; Code Standards tracked ECS13.3.8.

    Concrete differences needing deliberate decisions: CoiSA allows risky migrations, protected_to_private/date_time_immutable, author removal, optional after_open PHPDoc header/year normalization. DevTools has broad ECS sets plus semantic Rector sets and custom PHPDoc/Faker/Safe behavior. Initial Code Standards deliberately keeps non-risky PSR12, preserves author/package/typed-param/void-return documentation, visibility, mutable DateTime and existing headers, with behavioral goldens in #15. File selection/Finder/VCS-ignore policies also differ. Preset labels alone cannot establish parity, particularly across ECS versions.

    Next acceptance remains isolated explicit dependency graphs and effective rule/options/risky resolution, then representative golden comparison before any broader opt-in profile. No legacy formatter/install/cache writes or consumer migration occurred. Detailed durable source matrix: evidence/legacy-policy-source-comparison.md in the development workspace.

  2. coisa commented on Oct 21, 2026

    @coisa
    ContributorAuthor

    Published and read back a focused extension as #17, HEAD6695eef757e1a25cfd03a6ed6ffaaceca962abc3, based on #15/b583037. Actual inventory includes230 CoiSA fixers/54 risky,216 DevTools/43 risky plus one sniff, and48 initial/0 risky.495 records were independently checked against source files/options/hashes. Crucial provenance: active DevTools Fixer is bundled3.92.4, not root3.95.1. Local suite21tests208assertions,19PHP syntax/ECS, Composer/actionlint/whitespace pass. No existing PR HEAD changed; #17 awaits its own hosted gates.

    Additional native CLI fixture evidence: copied synthetic preservation input, never legacy source. Both dry-runs preserved exact bytes (CoiSA exit8/ECS exit2); explicit fix0, recheck0, second fix0 with identical fixed bytes. CoiSA removed author/typed-param/return/property docs and converted DateTime→DateTimeImmutable; ECS preserved these but removed package and changed docblock layout. This reinforces keeping the initial preservation profile distinct. Runtime8.5.11 against minimum^8.3 produced the expected upstream runtime warning; no all-target guarantee is claimed. Full pipeline/header/Finder/override decisions remain open.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions