Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
247 commits
Select commit Hold shift + click to select a range
91387d9
Plan security hardening branches
dominikletica Jun 15, 2026
ca133e0
Refine security hardening branch plans
dominikletica Jun 15, 2026
c8de6bb
Document legacy security plugin reference
dominikletica Jun 15, 2026
5e02369
Add security PR readiness planning notes
dominikletica Jun 15, 2026
d32772a
Document accessible IconCaptcha quiz fallback
dominikletica Jun 15, 2026
1808a2c
Add security planning edge-case guardrails
dominikletica Jun 15, 2026
4fa2be7
Document security log projection question
dominikletica Jun 15, 2026
04adeaa
Document IP retention security limits
dominikletica Jun 15, 2026
c8d927f
Merge pull request #101 from aavion/feat-security-planning
dominikletica Jun 15, 2026
c4c7a9e
Add security policy defaults
dominikletica Jun 15, 2026
7ec6a22
Adjust captcha challenge TTL default
dominikletica Jun 15, 2026
94c77ba
Refine website global rate defaults
dominikletica Jun 15, 2026
3e84f72
Tighten scheduler and probe security defaults
dominikletica Jun 15, 2026
25fdf40
Define recovery login bypass policy
dominikletica Jun 15, 2026
ed589d8
Clarify captcha auto-success limits
dominikletica Jun 15, 2026
a47a1c9
Document security enforcement policy order
dominikletica Jun 15, 2026
3340d58
Document security configuration surfaces
dominikletica Jun 15, 2026
a279eba
Document security surface coverage gaps
dominikletica Jun 15, 2026
823a39f
Add admin ACL enforcement branch plan
dominikletica Jun 15, 2026
852c1e2
Detail admin ACL enforcement plan
dominikletica Jun 15, 2026
7288c74
Merge pull request #103 from aavion/feat-security-policy-docs
dominikletica Jun 15, 2026
510e578
Add GeoIP resolver foundation
dominikletica Jun 15, 2026
8378ab4
Add MaxMind GeoIP provider
dominikletica Jun 15, 2026
958f833
Add GeoIP database update foundation
dominikletica Jun 15, 2026
3343fc2
Prevent GeoIP license key logging
dominikletica Jun 15, 2026
496530b
Assert GeoIP operations keep license key private
dominikletica Jun 15, 2026
25b0b7f
Seed GeoIP defaults during setup
dominikletica Jun 15, 2026
c505dbf
Surface GeoIP status in statistics settings
dominikletica Jun 15, 2026
b72cee2
Simplify GeoIP status scope
dominikletica Jun 15, 2026
83c4532
Align settings API GeoIP redaction test
dominikletica Jun 15, 2026
56cbca0
Harden GeoIP archive extraction
dominikletica Jun 15, 2026
de19383
Harden GeoIP path portability
dominikletica Jun 15, 2026
3615548
Harden GeoIP TAR validation
dominikletica Jun 15, 2026
bbe125e
Address GeoIP review findings
dominikletica Jun 16, 2026
4afcaaa
Address GeoIP review follow-ups
dominikletica Jun 16, 2026
bbeec04
Reject unsupported GeoIP databases
dominikletica Jun 16, 2026
82b457f
Merge pull request #104 from aavion/feat-security-geoip-observability
dominikletica Jun 16, 2026
0fdc5e4
Prepare abuse foundation worklog
dominikletica Jun 16, 2026
41da720
Document abuse foundation log projection scope
dominikletica Jun 16, 2026
64ad1db
Add database log projection foundation
dominikletica Jun 16, 2026
784f104
Move admin log browsing to database projections
dominikletica Jun 16, 2026
050f2d4
Clarify trusted proxy scope for abuse foundation
dominikletica Jun 16, 2026
5cc51e3
Clarify visitor identity proxy header policy
dominikletica Jun 16, 2026
1c97e8e
Use forwarding entropy for visitor fallback IDs
dominikletica Jun 16, 2026
0e04bf6
Add passive abuse request inspection
dominikletica Jun 16, 2026
a07b246
Record passive abuse signals
dominikletica Jun 16, 2026
ec3aba9
Make probe path patterns configurable
dominikletica Jun 16, 2026
31dfd5c
Track probe path route warning follow-up
dominikletica Jun 16, 2026
404369c
Specify follow-up notice
dominikletica Jun 16, 2026
de528b9
Record session visitor mismatch signals
dominikletica Jun 16, 2026
c64a44a
Clarify security header handoff
dominikletica Jun 16, 2026
f282d89
Use clock for security signal retention
dominikletica Jun 16, 2026
0892c9f
Harden log projection readiness
dominikletica Jun 16, 2026
ac0ee3f
Record abuse foundation final verification
dominikletica Jun 16, 2026
c0d0594
Restore application log browsing source
dominikletica Jun 16, 2026
924fdc9
Split admin log browsing facade
dominikletica Jun 16, 2026
273a7be
Harden database log browsing filters
dominikletica Jun 16, 2026
06ece05
Clarify abuse identity and intent policies
dominikletica Jun 16, 2026
19e0d36
Update dependencies and support guidelines
dominikletica Jun 16, 2026
dde0488
Address log browsing review gaps
dominikletica Jun 16, 2026
317d820
Document retention-bound enforcement windows
dominikletica Jun 16, 2026
3b44ed3
Simplify security signal retention settings
dominikletica Jun 16, 2026
c1f7758
Harden log browsing retention and pagination
dominikletica Jun 16, 2026
d04c98b
Tighten abuse classification path handling
dominikletica Jun 16, 2026
d0b859c
Document abuse foundation review fixes
dominikletica Jun 16, 2026
af12036
Cover log settings navigation
dominikletica Jun 16, 2026
2da4427
Update abuse foundation verification notes
dominikletica Jun 16, 2026
41aa8e3
Harden abuse foundation review edges
dominikletica Jun 16, 2026
7e7d27c
Harden abuse foundation review findings
dominikletica Jun 16, 2026
272aab5
Gate access surface locale prefixes
dominikletica Jun 16, 2026
7c960a5
Harden log filters and request intents
dominikletica Jun 16, 2026
da4f3fd
Merge pull request #105 from aavion/feat-security-abuse-foundation
dominikletica Jun 16, 2026
1ddaea1
Add admin ACL feature matrix
dominikletica Jun 16, 2026
449c8ed
Gate settings through admin ACL features
dominikletica Jun 16, 2026
6dee2e6
Enforce admin ACL on package workflows
dominikletica Jun 16, 2026
434bf0f
Invalidate admin ACL group cache on group changes
dominikletica Jun 16, 2026
da67688
Document admin ACL enforcement slice
dominikletica Jun 16, 2026
5c31bae
Enforce admin ACL on user workflows
dominikletica Jun 16, 2026
30a103d
Enforce admin ACL on operational surfaces
dominikletica Jun 16, 2026
cfdd237
Document admin ACL enforcement decisions
dominikletica Jun 16, 2026
6aa1286
Update navigation ACL expectations
dominikletica Jun 16, 2026
0dbf5f3
Improve admin ACL reviewability
dominikletica Jun 16, 2026
9db0f3d
Record admin ACL audit follow-up
dominikletica Jun 16, 2026
35068b6
Fix delegated admin ACL bypasses
dominikletica Jun 16, 2026
cc5ffc8
Fix admin ACL review findings
dominikletica Jun 16, 2026
4b65ec0
Merge pull request #106 from aavion/feat-security-admin-acl-enforcement
dominikletica Jun 16, 2026
59ef450
Start rate enforcement branch
dominikletica Jun 16, 2026
349526b
Document rate enforcement policy catalogue
dominikletica Jun 17, 2026
3e3ff78
Add rate limit policy catalogue
dominikletica Jun 17, 2026
39695a5
Add rate limit mode setting
dominikletica Jun 17, 2026
8b11566
Add rate limit decision facade
dominikletica Jun 17, 2026
e1f6acc
Enforce rate limits on requests
dominikletica Jun 17, 2026
b6a53e2
Add rate limit reset hooks
dominikletica Jun 17, 2026
61a3762
Document rate enforcement implementation
dominikletica Jun 17, 2026
f5704d8
Harden rate limit scheduler policy
dominikletica Jun 17, 2026
c12869e
Scale suspicious probe profile windows
dominikletica Jun 17, 2026
706c822
Cover cron rate limit route rendering
dominikletica Jun 17, 2026
e8bafbc
Clarify scheduler rate limit policy
dominikletica Jun 17, 2026
222dbc6
Record custom error page follow-up
dominikletica Jun 17, 2026
6485929
Version bump -> 0.2.5
dominikletica Jun 17, 2026
e17395d
Translate rate limit profile labels
dominikletica Jun 17, 2026
2f91cee
Update importmap dependencies
dominikletica Jun 17, 2026
268a6bf
Fix rate enforcement review findings
dominikletica Jun 17, 2026
91cca74
Fix rate limiter auth-stage bypasses
dominikletica Jun 17, 2026
7468b1c
Harden rate limiter review edge cases
dominikletica Jun 17, 2026
ceef826
Fix rate limiter bypass review findings
dominikletica Jun 17, 2026
cb206a4
Tighten rate limiter review hardening
dominikletica Jun 17, 2026
840d511
Harden rate limit probe and profile edges
dominikletica Jun 17, 2026
47e8d9f
Document cache panic delivery direction
dominikletica Jun 17, 2026
e6c266b
Charge bearer CORS preflight attempts
dominikletica Jun 17, 2026
38e8c57
Charge read-only owner unsafe preflights
dominikletica Jun 17, 2026
126d19e
Close bearer preflight and scheduler gaps
dominikletica Jun 17, 2026
6aea1c2
Harden probe setup and auth-failure limits
dominikletica Jun 17, 2026
7f81f91
Codify review readiness rules
dominikletica Jun 17, 2026
7333fa7
Harden setup rate limits and error resolution
dominikletica Jun 17, 2026
d5f4261
Document rate limit and error renderer hardening
dominikletica Jun 17, 2026
15aa164
Harden credentialed preflight rate checks
dominikletica Jun 17, 2026
2452b47
Prevent partial rate limit bucket spends
dominikletica Jun 18, 2026
6db53a5
Document rate limit consume tradeoff
dominikletica Jun 18, 2026
3ece8ae
Centralize API effective method policy
dominikletica Jun 18, 2026
bd64934
Centralize path scope matching
dominikletica Jun 18, 2026
52b6019
Move rate limit bucket policy into descriptors
dominikletica Jun 18, 2026
4ba4bd6
Centralize localized request path resolution
dominikletica Jun 18, 2026
c294fef
Harden technical path rate scopes
dominikletica Jun 18, 2026
b60da96
Merge pull request #107 from aavion/feat-security-rate-enforcement
dominikletica Jun 18, 2026
4d963e9
Prepare auto-ban response policy
dominikletica Jun 18, 2026
537b019
Document auto-ban scoring policy
dominikletica Jun 18, 2026
48ece22
Add auto-ban signal enforcement core
dominikletica Jun 18, 2026
601cb27
Add recovery login alias for auto-ban bypass
dominikletica Jun 18, 2026
d44be50
Expose owner auto-ban review workflows
dominikletica Jun 18, 2026
aa6262d
Document auto-ban review policy
dominikletica Jun 18, 2026
16b4d45
Keep recovery login on user route
dominikletica Jun 18, 2026
4e324c1
Document locale-aware delivery boundaries
dominikletica Jun 18, 2026
403e4f6
Harden auto-ban enforcement boundaries
dominikletica Jun 18, 2026
4a4344a
Allow auto-ban recovery login submissions
dominikletica Jun 18, 2026
c160314
Serialize auto-ban index updates
dominikletica Jun 18, 2026
306b779
Fail auto-ban reset on cache delete failure
dominikletica Jun 18, 2026
679da8b
Require auto-ban reset signal persistence
dominikletica Jun 18, 2026
663b5a5
Record trigger effects only for new auto-bans
dominikletica Jun 18, 2026
be97a5b
Keep newest auto-ban detail signals visible
dominikletica Jun 18, 2026
81610c9
Mark auto-ban API endpoints owner-only
dominikletica Jun 18, 2026
8f14543
Document auto-ban review hardening
dominikletica Jun 18, 2026
f791538
Verify auto-ban rollback clears active state
dominikletica Jun 18, 2026
ffe6291
Centralize ignorable request path skips
dominikletica Jun 18, 2026
78058ee
Require recovery marker for login ban bypass
dominikletica Jun 18, 2026
f1cca1e
Fail open auto-ban when config is unavailable
dominikletica Jun 18, 2026
e3378b8
Document second auto-ban review fixes
dominikletica Jun 18, 2026
2ec5daa
Enforce auto-bans over probe responses
dominikletica Jun 18, 2026
bb89778
Harden auto-ban inspection against malformed fields
dominikletica Jun 18, 2026
55522a2
Respect auto-ban responses during session binding
dominikletica Jun 18, 2026
5d24633
Use occurrence ids for auto-ban owner alerts
dominikletica Jun 18, 2026
4e56f1b
Document third auto-ban review fixes
dominikletica Jun 18, 2026
347bc06
Add suspicious payload security signals
dominikletica Jun 18, 2026
04e9be8
Show trigger geo context on auto-ban detail
dominikletica Jun 18, 2026
42e1c13
Document geo traffic-shedding follow-up
dominikletica Jun 18, 2026
36e6f47
Enforce auto-bans before probe and login side effects
dominikletica Jun 18, 2026
080942b
Release auto-bans before reset cutoffs
dominikletica Jun 18, 2026
fb9efbf
Serialize auto-ban reset cutoffs
dominikletica Jun 18, 2026
1846d3c
Preempt banned API and scheduler sources
dominikletica Jun 18, 2026
ec7a04e
Harden auto-ban audit follow-ups
dominikletica Jun 18, 2026
8e8a661
Update pull request template
dominikletica Jun 18, 2026
33a71f1
Count auto-ban floor by request
dominikletica Jun 18, 2026
0040fc1
Skip trusted scheduler source scoring
dominikletica Jun 18, 2026
cd11ee5
Validate auto-ban signal retention
dominikletica Jun 18, 2026
fc1cee9
Document auto-ban review fixes
dominikletica Jun 18, 2026
f372efe
Guard persisted signal retention bounds
dominikletica Jun 18, 2026
2859e32
Derive signal retention default from auto-ban TTL
dominikletica Jun 18, 2026
940b5e7
Bound additional persisted config values
dominikletica Jun 18, 2026
235f9dc
Recheck recovery login bans after auth
dominikletica Jun 18, 2026
ced55c5
Skip trusted scheduler payload scoring
dominikletica Jun 18, 2026
6aef450
Document auto-ban review fixes
dominikletica Jun 18, 2026
f096c2b
Bound trusted auto-ban access level
dominikletica Jun 18, 2026
7059c80
Recheck auto-bans after payload signals
dominikletica Jun 18, 2026
7d1f569
Scan JSON bodies for payload probes
dominikletica Jun 18, 2026
f2bfa76
Document auto-ban review updates
dominikletica Jun 18, 2026
e888d78
Suppress recovery auth failures after auto-ban
dominikletica Jun 18, 2026
0c5b3fc
Bound suspicious payload body scanning
dominikletica Jun 18, 2026
5d05c4a
Score anonymous application payload probes
dominikletica Jun 18, 2026
31ab2ae
Document auto-ban review hardening
dominikletica Jun 18, 2026
c8372f7
Block protected browser auto-ban bypasses
dominikletica Jun 18, 2026
c1abd78
Merge pull request #108 from aavion/feat-security-auto-ban
dominikletica Jun 18, 2026
b452ffc
Prepare worklog
dominikletica Jun 18, 2026
b5d9754
Add developer notes to planning docs
dominikletica Jun 19, 2026
32827f6
Add icon-captcha submodule
dominikletica Jun 19, 2026
de91395
Bump Studio to 0.2.6 and refresh icon assets
dominikletica Jun 19, 2026
b3dd0bb
Remove some demo/testing content
dominikletica Jun 19, 2026
f1fc816
Initialize submodules during setup
dominikletica Jun 19, 2026
8bd89da
Relax package validation boundaries
dominikletica Jun 19, 2026
cce93e6
Rename packages to extensions
dominikletica Jun 19, 2026
b0d2994
Update submodule commit
dominikletica Jun 19, 2026
0d84fd8
Add extension data contribution contracts
dominikletica Jun 19, 2026
4d67210
Clarify extension CSS namespace validation
dominikletica Jun 19, 2026
9553e6d
Archive content for deactivated extension schemas
dominikletica Jun 19, 2026
5c8b995
Gate extension API contributions
dominikletica Jun 19, 2026
63b3b60
Expose manifest values through extension settings
dominikletica Jun 19, 2026
64931e0
Run extension lifecycle rebuilds synchronously
dominikletica Jun 19, 2026
3ec1bcf
Retain referenced extension schemas on purge
dominikletica Jun 19, 2026
c3edcec
Document extension contract updates
dominikletica Jun 19, 2026
13f8a6b
Complete extension schema version contract
dominikletica Jun 19, 2026
f829f81
Add extension-owned database foreign keys
dominikletica Jun 19, 2026
886b8f7
Fix extension review regressions
dominikletica Jun 19, 2026
0d3fc5f
Refactor extension contribution boundaries [#57]
dominikletica Jun 19, 2026
3e74341
Update UX baseline and demo extension tests
dominikletica Jun 19, 2026
4a62112
Fix extension lifecycle review findings
dominikletica Jun 20, 2026
6694d8e
Enhance extension dependency management with version constraints and …
dominikletica Jun 20, 2026
41c05dd
Move demo-module into a submodule
dominikletica Jun 20, 2026
f8b13e9
Re-add demo-module as submodule
dominikletica Jun 20, 2026
559097e
Update .gitignore to exclude node_modules and update submodule refere…
dominikletica Jun 20, 2026
8dd0ff1
Update manifest date and submodule references for demo-module and ico…
dominikletica Jun 20, 2026
b76bff6
Update submodule references for demo-module and icon-captcha
dominikletica Jun 20, 2026
05efa9a
Add extension-template gitmodule as developer reference
dominikletica Jun 20, 2026
4ea216d
Update changelog with recent development stages
dominikletica Jun 20, 2026
819abbe
Fix extension rollback and detached Mercure cleanup
dominikletica Jun 20, 2026
26ccc3a
Restore content after extension overwrite rollback
dominikletica Jun 20, 2026
6cd01af
Validate extension setting contribution owners
dominikletica Jun 20, 2026
936406b
Defer extension settings cleanup during purge
dominikletica Jun 20, 2026
6b8ec2d
Report extension activation cleanup failures
dominikletica Jun 20, 2026
2d4b4fe
Report extension fault persistence failures
dominikletica Jun 20, 2026
1401b40
Align extension YAML inventory policy
dominikletica Jun 20, 2026
ccfaef8
Clarify repository demo extension docs
dominikletica Jun 20, 2026
c14a9f7
Record extension review follow-ups
dominikletica Jun 20, 2026
b321afd
Guard stale extension dependency cascades
dominikletica Jun 20, 2026
def40d4
Fail extension cleanup on ACL override write errors
dominikletica Jun 20, 2026
e09c9c9
Add local workflow skills
dominikletica Jun 20, 2026
32d87c9
Bound extension-owned identifiers
dominikletica Jun 20, 2026
f830cd2
Fail extension cleanup on settings delete errors
dominikletica Jun 20, 2026
e112945
Rebuild assets after install rollback
dominikletica Jun 20, 2026
c6a0a8c
Keep extension table cleanup scoped
dominikletica Jun 20, 2026
5a86eef
Harden extension install apply contract
dominikletica Jun 20, 2026
caa8e71
Fix extension cleanup and scheduler boundaries
dominikletica Jun 20, 2026
bba2cf6
Harden local review skills
dominikletica Jun 20, 2026
2a17bc2
Update AGENTS.md with preferred Codex skills for review processes
dominikletica Jun 20, 2026
ac1e272
Enhance extension slug validation and cleanup processes
dominikletica Jun 20, 2026
aaa214b
Refactor identifier validation and update slug specifications
dominikletica Jun 20, 2026
a1647ea
Fix test for rejecting oversized combined extension schema identifiers
dominikletica Jun 20, 2026
eb64e69
Gated optional MySQL/MariaDB integration tests
dominikletica Jun 20, 2026
b24aeee
Cap extension database identifiers
dominikletica Jun 20, 2026
48a025b
Reject conflicting single-active activation plans
dominikletica Jun 20, 2026
411022e
Harden extension install and version validation
dominikletica Jun 20, 2026
e0f5cc1
Document extension review hardening
dominikletica Jun 20, 2026
a012e14
Harden extension static policy validation
dominikletica Jun 20, 2026
42ba9ae
Guard extension runtime contributions
dominikletica Jun 20, 2026
b71265c
Close extension boundary review gaps
dominikletica Jun 21, 2026
0406e13
Harden extension contribution bypasses
dominikletica Jun 21, 2026
3fd4c61
Merge pull request #110 from aavion/feat-security-captcha-contract
dominikletica Jun 21, 2026
41f1736
Fix CI test failures
dominikletica Jun 21, 2026
95e9683
Enhance documentation for DetachedProcessStarter to clarify descripto…
dominikletica Jun 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .codex/framework-version-recap.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ Versions were checked against the installed Composer packages, `composer.json`,

- Before `1.0.0`, update the current baseline migration instead of growing a long development migration chain.
- Keep entities, baseline migration, tests, docs, and class map aligned when database shape changes.
- Package/module migrations may be planned as validated package contributions, but execution should remain core-owned.
- Extension migrations may be planned as validated extension contributions, but execution should remain core-owned.

## Twig 3.27 Notes

Expand All @@ -76,7 +76,7 @@ Versions were checked against the installed Composer packages, `composer.json`,
- Do not call old internal Twig extension functions such as `twig_escape_filter()` directly. Use runtime APIs such as `EscaperRuntime` where lower-level escaping is genuinely needed.
- Do not pass `Twig\Template` where public APIs expect `TemplateWrapper`.
- Keep templates small; move behavior to Twig extensions, components, or services only when the boundary is clear.
- Use TwigBundle `paths`, `form_themes`, globals, and strict variable settings intentionally for package/theme/template work.
- Use TwigBundle `paths`, `form_themes`, globals, and strict variable settings intentionally for extension/theme/template work.

## Tailwind CSS v4 And TailwindBundle Notes

Expand Down
78 changes: 78 additions & 0 deletions .codex/skills/audit-pr-readiness/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
---
name: audit-pr-readiness
description: Run the repository PR-readiness audit before marking a branch or feature slice ready for review. Use when the user explicitly asks for PR readiness, ready-for-review preparation, final pre-PR audit, filling the PR template, or checking whether a branch is ready to submit. Do not use for ordinary code review, review-finding fixes, or broad local branch review unless readiness sign-off is requested.
---

# Audit PR Readiness

Use this skill to prepare or audit a branch against the repository PR-readiness expectations. This is not a substitute for code review; use `local-code-review` for a complete bug-finding pass and `fix-review-findings` for supplied review comments.

## Required Sources

Before auditing, read:

- `AGENTS.md`, especially `PR Readiness Audits`
- `.github/PULL_REQUEST_TEMPLATE.md`
- `dev/WORKLOG.md`
- relevant changed docs, drafts, manuals, tests, and class-map entries

For the two PR-template references, use these sources directly:

- `#57`: fetch GitHub issue `aavion/studio#57` and use it as the primary source for project-rules, architecture, naming, and documentation drift expectations.
- `#109`: fetch GitHub issue `aavion/studio#109` and use it as the primary source for codebase readability, naming, hierarchy, class map, frontend structure, and test-suite clarity.

Do not copy the PR checklist into this skill as a second source of truth. Always use `.github/PULL_REQUEST_TEMPLATE.md` as the checklist basis.

## Workflow

1. Determine the review base and changed scope.
2. Read the current PR template and turn each checkbox into an evidence-backed audit item.
3. Inspect the branch diff and affected runtime surfaces for each applicable item.
4. Run or confirm the required verification commands:
- `bin/phpunit`
- `bin/jstest`
- `bin/lint`
- focused commands for changed surfaces when full suites do not cover them well
5. Check documentation alignment:
- `README.md`
- `dev/draft/*.md`
- `dev/CLASSMAP.md`
- `dev/WORKLOG.md`
- `dev/manual/*.md`
- `docs/*.md`
6. Check translation and user-facing copy alignment when copy changed.
7. Check setup/init/CI, cross-platform behavior, disabled-feature fallbacks, process/env handling, and extension/API/live route boundaries when touched.
8. Capture follow-ups in `dev/WORKLOG.md`'s To-Do section when they are real but not appropriate for the current branch.
9. Fill or update the PR template with honest checkboxes. Leave unchecked anything not actually audited or verified.

## Evidence Standard

- A checked box needs evidence from code inspection, docs inspection, tests, linting, rendering, command output, or an explicit "not applicable" reason.
- Do not mark a checklist item complete because similar work was done earlier in the branch.
- If a command was run outside the current session by the user, record it as user-reported unless you also ran it.
- If a full suite was skipped, state why and list the focused substitute checks.

## Output

Return a PR-ready note based on the project template:

```md
## Summary

## Testing

## Documentation

## Additional Checks

## Linked Issues / Discussions

## Review Notes
```

Also summarize:

- small readiness fixes made
- skipped checks or proof gaps
- follow-ups recorded in `dev/WORKLOG.md`
- whether the branch is ready, blocked, or ready with caveats
67 changes: 67 additions & 0 deletions .codex/skills/bump-version-number/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
---
name: bump-version-number
description: Bump the project or extension version in this repository. Use when the user explicitly asks to raise, bump, set, or update the version number of the root project or a specific extension/package. Do not use for dependency-only updates, release-note drafting, or general package maintenance unless a project or extension version bump is requested.
---

# Bump Version Number

Use this skill when the user asks to bump the root project version or the version of a specific extension. Treat the manifest as the source of truth.

## Version Target

1. Identify the intended target:
- root project: the root `.manifest`
- extension: the requested extension manifest, usually under `extensions/{slug}/.manifest` or in the extension repository
2. If the user provides an explicit version, use that exact version.
3. If no explicit version is provided:
- patch version `+1` for small changes, fixes, review fixes, docs-maintenance bumps, and routine compatibility updates
- minor version `+1` for larger feature slices or contract-visible feature work
- major version `+1` only after explicit user instruction and a brief confirmation of intent
4. Preserve the existing version format and manifest style.

## Dependency And Compatibility Checks

After changing the version:

1. Resolve known manifest dependencies that reference the bumped project or extension.
2. Report dependency constraint conflicts immediately instead of silently widening them.
3. Update internal dependency constraints only when the new version clearly requires it or the user requested it.
4. Prefer dynamic tests that read from manifests over static assertions pinned to a concrete version.
5. If a test would fail only because it hardcodes the old version, update that assertion to compare against the manifest value.

## External Update Awareness

Check for available external updates and report safely applicable candidates. Do not update external dependencies unless the user asks for dependency updates.

Run:

```bash
COMPOSER_MEMORY_LIMIT=256M bin/composer outdated
bin/console importmap:outdated
```

If either command cannot run, report the reason.

## Verification

Run the full suites after the version bump unless the user explicitly narrows verification:

```bash
bin/phpunit
bin/jstest
bin/lint
```

If full suites are too slow, blocked, or already user-reported, say exactly what was run and what remains unverified.

## Output

Summarize:

- old version and new version
- manifest path changed
- dependency conflicts or compatible dependency references found
- external update candidates from Composer/importmap checks
- static version assertions converted to manifest-derived expectations
- verification results

58 changes: 58 additions & 0 deletions .codex/skills/fix-review-findings/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
---
name: fix-review-findings
description: Fix one or more concrete review findings in this repository. Use when the user provides review comments, PR findings, inline review feedback, Cloud Review findings, or local review findings and explicitly asks Codex to fix or address them. Do not use for broad branch reviews, PR-readiness audits, or ordinary feature implementation without supplied findings.
---

# Fix Review Findings

Use this skill to address supplied review findings with code changes. This is a fix workflow, not a discovery review.

## Required Sources

Before editing, read:

- `AGENTS.md`, especially `Review Finding Fixes`
- `dev/WORKLOG.md`
- the cited files, tests, docs, and adjacent code paths for each finding
- all user comments, maintainer replies, product decisions, policy decisions, and requested scope limits attached to or near the supplied findings

Use `local-code-review` only when the user separately asks for a complete local branch or PR review. Use `audit-pr-readiness` only when the user asks for a PR-readiness audit.

## Workflow

1. Restate the findings briefly and deduplicate shared root causes.
2. Match each finding with any user or maintainer comments. Treat explicit user decisions as binding for the fix direction unless they conflict with higher-priority safety or project rules.
3. Do not implement a fix the user rejected. If a comment marks a finding as intentional, policy-driven, or out of scope, document that decision or record the requested follow-up instead of changing behavior.
4. For each root cause, restate the concrete invariant, attacker or actor input when relevant, closest control or broken control, sink or state transition, impact, and preconditions.
5. Trace the affected boundary from source to sink. Before editing, establish that the reported weakness is concretely reachable in the checked-out code; if it is already fixed or invalid, prove that instead of patching a nearby concern.
6. Inspect adjacent and analogous paths that share the same policy, validator, resolver, route family, lifecycle step, storage boundary, contribution type, cleanup/rollback behavior, wrapper, or dangerous sink.
7. Decide whether the finding is valid, invalid, already fixed, an explicit product decision, or a follow-up.
8. Reproduce, encode, or otherwise pin the issue before fixing when feasible. Prefer a focused failing test or realistic-interface reproduction; if runtime proof is disproportionate, document the static proof and gap.
9. For valid findings, place the smallest central fix that covers all affected paths and follows the user's scope comments.
10. Add or update focused regression coverage for the failing path and any adjacent path changed by the fix. Include positive coverage for legitimate behavior that must continue to work.
11. Re-check the original source/control/sink path after the fix and search nearby bypasses or equivalent call paths that might avoid the new control.
12. Update docs, worklog, class map, translations, or follow-up notes only when the fix changes the documented contract or relevant callable map.
13. Run focused verification while developing, then a broader relevant slice before finishing.
14. If the user asks for separate commits, commit each logical fix separately with an imperative message.

## Fix Discipline

- Do not turn a review fix into a broad redesign.
- Do not hide larger or behavior-changing follow-ups inside a narrow fix; record them in `dev/WORKLOG.md`.
- Do not report success for a partially fixed finding. State residual risk or skipped verification clearly.
- Do not revert unrelated user or collaborator changes.
- Prefer structured `Message`, `WorkflowResult`, and domain-owned message catalogues where runtime feedback is needed.
- Do not weaken authentication, authorization, tenant isolation, input validation, sandboxing, logging, auditability, or lifecycle rollback semantics to make a finding or test pass.
- Treat setup errors, missing generated files, missing dependencies, or slow validation commands as evidence to investigate with bounded effort, not as immediate proof that runtime validation is impossible.
- Do not claim the original issue is fixed until the changed code and the original vulnerable path or broken invariant have both been checked.

## Output

When done, summarize:

- findings addressed and status
- commits created, if any
- verification commands and results
- intentionally deferred or rejected findings, with the reason
- how the original path was shown closed, or the exact proof gap if runtime validation was not feasible
- remaining worktree state if not clean
Loading