4.0.0 release readiness (pre-release review)
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 5/100
Research direction
This is a tracking umbrella for the 4.0.0 pre-release review, not a single change; the real work lives in the sub-issues #666-#704 plus the Windows CI follow-up #726, and every line reference is pinned to commit a5a1504. Start by reading the sub-issue that matches your interest (the still-open T-32 #696 is explicitly deferred past 4.0.0) and its path:line pointers under src/, tests/ and the docs. "Done" here means the listed sub-issues are closed and 4.0.0 is tagged, so it is coordination rather than a first patch.
Written by the indexing model from the issue text.
Description
Tracking issue for the final quality pass before tagging 4.0.0. The review covered every file in src/, the test infrastructure, docs, demos, CI and packaging. Every claim was rechecked against a5a1504. Line references in the sub-issues are path:line at that commit.
Priorities:
- P0: must be fixed, or explicitly decided, before tagging.
- P1: ships in 4.0.0, either because it needs the BC window or because users can see the bug.
- P2: can land in 4.0.x, unless the ticket is marked
[BC].
Each sub-issue is meant to become its own commit or PR.
Decisions needed before code
- T-06 #671: Doctrine bridge. Keep and rewrite against ORM 3, or remove.
- T-17 #640: deterministic pointcut ids (hash of expression + aspect) instead of a static counter.
- T-20 #684: which of the renames happen in 4.0.
- T-22 #686:
Foo+semantics (includeFooitself? trait users?) and modifier precedence. - T-30 #694:
Featuresas a final class vs anenum Feature+FeatureSet.
P0: must fix or decide before tagging
- #666 T-01 README correctness fixes
- #667 T-02 CHANGELOG completeness + UPGRADE-4.0.md
- #668 T-03 Generated proxies fail to compile on
usename collisions - #669 T-04 Intercepted property declarations spanning several lines are not neutralized
- #670 T-05 Route all woven/proxy/function cache writes through CacheFileWriter
- #671 T-06 Doctrine bridge: decide keep+rewrite or remove
[BC]
P1: ship in 4.0.0
- #672 T-07 Joinpoint state bugs (constructor
$instance, reentrancy) - #673 T-08 First instance of every proxied class is retained
[BC] - #674 T-09
cache:warmup:aopexits 0 on errors - #675 T-10 Test-suite portability and temp-dir convention
- #676 T-11 Remove or rewrite Php85AuditScratchTest
- #677 T-12 Packaging: .gitattributes, .gitignore, composer.json
- #678 T-13 Community / release files
- #679 T-14 Debug mode serves un-rewritten magic constants on cache hit
[BC] - #680 T-15 Advisor cache semantics
- #681 T-16 Attribute loading robustness
[BC] - #640 T-17 Pointcut ids depend on registration order (promoted to 4.0.0)
[BC] - #682 T-18 Prefix-anchored path mapping
- #683 T-19 Exception hierarchy
[BC] - #684 T-20 Naming decisions for the BC window
[BC] - #685 T-21 Cache metadata format version + real source mtime
[BC] - #686 T-22 Pointcut semantics defects
[BC] - #687 T-23 PointcutParseTable regeneration script + consistency test
- #688 T-24 README feature documentation
P2: 4.0.x acceptable unless [BC]
- #689 T-25 Kernel option validation
[BC] - #690 T-26 Dead Dissect exclusion / auto-exclude runtime deps
- #691 T-27
final/@internal/#[\Override]sweep[BC] - #692 T-28 Dead code sweep
[BC] - #693 T-29 Docblock / comment drift sweep
- #694 T-30
Featuresshape[BC] - #695 T-31 Weaving-time and runtime performance
- #696 T-32 Cache layer robustness — deferred past 4.0.0 (Known Issue)
- #697 T-33 Enumerator / PathResolver correctness
- #698 T-34 Token-surgery robustness
- #699 T-35 Console DX
- #700 T-36 Generated-code edge cases
- #701 T-37 Test coverage gaps
- #702 T-38 CI and static-analysis hygiene
- #703 T-39 Demos refresh
- #704 T-40 Static-state and loader robustness
- Follow-up: Windows CI leg + test portability (#726)
Claims dropped or corrected during the recheck
Dropped:
- T-22: "
within()/**never select introductions".IntroductionAspectExtensionforcesKIND_INTRODUCTION | KIND_CLASS, so they do. - T-24: "docs/ links missing". The README already links both limitation docs.
- T-37: "abstract-class fixture missing". It exists (
tests/Instrument/Transformer/_files/abstract-class.php). - T-12: "
.idea/makes the tree dirty". The tree is clean; adding/.idea/is kept only as hygiene. - T-29: "smiley/typos list". The items were never enumerated, so this could not be verified.
Corrected:
- T-02: 18
[BC BREAK]entries, not 13. - T-23: the table is about 12 KB, not 15 KB.
- T-31: about 1,600 internal functions, not 2,000.
- T-27: about 20 missing
#[\Override], not 11. - T-17: a reorder silently rebinds only when the sanitized expressions are equal; otherwise it throws
OutOfBoundsException. - T-14: the scope is wider than first stated. Production is hit too, through includes inside woven files.
Generated by Claude Code
- Dominant language
- PHP
- Stars
- 1.7k
- Forks
- 166
- Avg merge
- 10h
- Merged PRs (30d)
- 35
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from goaop/framework
-
Intercepting a method imported from a trait with #[\Override] fails: OriginalAlias "has #[\Override] attribute, but no matching parent method exists"Possibly taken @lisachenko claimed this today. OpenBug PHP8.4
Difficulty 3/5 Half a day Newbie friendliness 62/100
Maintainers usually reply within 1 day
-
Several woven classes in one file: their proxies overwrite each other, all but the last class are lost (Class not found)Possibly taken @lisachenko claimed this today. OpenBug
Difficulty 4/5 3-5 days Newbie friendliness 38/100
Maintainers usually reply within 1 day
-
Proxy of a namespaced class extending a global class references the parent unqualified (Class "Ns\ArrayObject" not found)Possibly taken @lisachenko claimed this today. OpenBug
Difficulty 3/5 1-2 days Newbie friendliness 62/100
Maintainers usually reply within 1 day
-
Enhancement Performance
Difficulty 5/5 Over a week Newbie friendliness 35/100
goaop/framework#747 · 1 comment ·
Maintainers usually reply within 1 day
-
Performance: INTERCEPT_INCLUDES serves untransformed included files through php://filter in production (no opcache)Possibly taken @lisachenko claimed this 2 days ago. OpenEnhancement Performance
Difficulty 4/5 3-5 days Newbie friendliness 56/100
Maintainers usually reply within 1 day
Similar issues
-
Python 3.15 supportPossibly taken @amnesiaof claimed this today. OpenL: python L: python:uv
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
dependabot/dependabot-core#16524 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 88/100
crazy-goat/rabbit-stream#830 ·
Maintainers usually reply within 1 day
-
sync-en
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
Maintainers usually reply within 1 day
-
sync-en
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 4 days
-
Перевод устарел
Difficulty 2/5 1-3 hours Newbie friendliness 70/100