Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
332 commits
Select commit Hold shift + click to select a range
1b64005
refactor(regex): remove Java matcher execution storage
fglock Aug 20, 2026
c33f119
refactor(regex): retire Java regex compilation frontend
fglock Aug 20, 2026
9b00136
docs(regex): mark Java matcher frontend retired
fglock Aug 20, 2026
77a6c91
refactor(regex): remove obsolete Java pattern flags
fglock Aug 20, 2026
b1dcec4
docs(regex): remove retired frontend references
fglock Aug 20, 2026
c28641b
docs(regex): align final implementation workstreams
fglock Aug 20, 2026
116a035
feat(unicode): generate Perl scalar character names
fglock Aug 20, 2026
f140843
docs: require immutable build worktrees
fglock Aug 20, 2026
296b2c7
docs(regex): mark generated scalar names complete
fglock Aug 20, 2026
ee6756c
fix(regex): diagnose operand-less extended class operators
fglock Aug 20, 2026
212e584
fix(regex): fold Unicode casing property aliases
fglock Aug 20, 2026
85dec8c
docs(regex): align final tracker and ownership
fglock Aug 20, 2026
018f80d
fix(regex): diagnose missing extended class operators
fglock Aug 20, 2026
7d34656
docs(regex): record final sole-Joni architecture
fglock Aug 20, 2026
5054f23
docs(regex): update native diagnostic position
fglock Aug 20, 2026
99e887c
fix(regex): render overlong lookbehind diagnostics faithfully
fglock Aug 20, 2026
2c88e30
docs(regex): update diagnostic parity position
fglock Aug 20, 2026
06e54e3
docs(regex): qualify capability matrix evidence
fglock Aug 20, 2026
3de516a
docs(regex): retire superseded migration designs
fglock Aug 20, 2026
a7ea5b6
refactor(regex): remove dead Java class adapter
fglock Aug 20, 2026
d09fc62
perf(regex): prune impossible dot-star retries in Joni
fglock Aug 20, 2026
827d138
perf(regex): reuse direct scalar input encodings
fglock Aug 20, 2026
c25249f
perf(regex): avoid per-match ThreadLocal churn in Joni
fglock Aug 20, 2026
0f1ab03
feat(tools): add fail-closed Phase 36 acceptance driver
fglock Aug 20, 2026
151c9b6
fix(tools): verify packaged Joni provenance and SBOM edge
fglock Aug 20, 2026
c42a4b1
fix(tools): bind regex acceptance to source and runner identity
fglock Aug 20, 2026
b8b3a11
fix(tools): bound regex acceptance identity checks
fglock Aug 20, 2026
18ac9f7
docs(regex): advance final acceptance position
fglock Aug 20, 2026
f63ce63
fix(regex): diagnose unterminated conditionals
fglock Aug 20, 2026
6b66d17
fix(regex): diagnose unsupported group introducers
fglock Aug 20, 2026
8ae0e16
docs(regex): record current diagnostic position
fglock Aug 20, 2026
6c965bb
fix(regex): report unknown conditional operands
fglock Aug 20, 2026
becf9f9
fix(regex): diagnose locale modifier after minus
fglock Aug 20, 2026
1aff436
docs(regex): update current diagnostic position
fglock Aug 20, 2026
1792c44
fix(regex): position invalid named-group start diagnostics
fglock Aug 20, 2026
b02094a
docs(regex): advance current diagnostic position
fglock Aug 20, 2026
5f09402
fix(ci): preserve Unicode Name.pl line endings
fglock Aug 20, 2026
b5b2050
docs(regex): record remaining adapter migrations
fglock Aug 20, 2026
8eab655
build: add focused Joni test target
fglock Aug 20, 2026
fc967bb
docs(regex): reopen migration cleanup phase
fglock Aug 20, 2026
cfd2cf6
fix(interpreter): preserve eval named-sub lexical cells
fglock Aug 20, 2026
f1b659a
perf(regex): skip impossible leading gpos retries
fglock Aug 20, 2026
1078b32
fix(regex): report native control verb diagnostics
fglock Aug 20, 2026
4ffa52a
fix(regex): identify unterminated assertions
fglock Aug 20, 2026
1f48cb0
fix(regex): diagnose incomplete named delimiters
fglock Aug 20, 2026
9ed1757
fix(regex): accept whitespace before property caret
fglock Aug 20, 2026
0572bca
fix(regex): preserve user property precedence over built-ins
fglock Aug 20, 2026
ad2afa6
chore(interpreter): remove dead named-sub BEGIN route
fglock Aug 20, 2026
570b85f
fix(regex): preserve byte property fold provenance
fglock Aug 20, 2026
69e615b
fix(regex): retain nullable end-anchor candidate
fglock Aug 20, 2026
bdf4230
docs(regex): refresh active completion sequence
fglock Aug 20, 2026
d280bfa
fix: preserve deferred regex compilation context
fglock Aug 20, 2026
b0d3919
feat(joni): parse remaining Perl adapter forms natively
fglock Aug 20, 2026
3174115
refactor(regex): retire native parser adapter rewrites
fglock Aug 20, 2026
c1788bf
test(joni): cover production Perl class syntax boundary
fglock Aug 20, 2026
f2f9fe5
docs(regex): mark native adapter retirement complete
fglock Aug 20, 2026
2963411
refactor(regex): isolate legacy pattern descriptions
fglock Aug 20, 2026
0e00f4d
fix: make deferred regex recompilation cache-safe
fglock Aug 20, 2026
e768c8f
fix(regex): preserve dynamic source lexical policy
fglock Aug 20, 2026
3e1f8ac
docs(regex): refresh active completion tranches
fglock Aug 20, 2026
487c431
fix(regex): stream variable-width backreference folds
fglock Aug 20, 2026
40bf7b4
fix(regex): preserve folded search length ranges
fglock Aug 20, 2026
f2240e2
docs(regex): advance native fold completion
fglock Aug 20, 2026
561fad7
refactor: keep built-in properties native in classes
fglock Aug 20, 2026
273284a
docs(regex): mark native property policy complete
fglock Aug 20, 2026
7e05d7b
fix(regex): report native useless modifier warning positions
fglock Aug 20, 2026
95e08dc
fix(regex): warn on unbounded zero-width repeats
fglock Aug 20, 2026
f6f3cd2
fix(regex): emit strict character range diagnostics
fglock Aug 20, 2026
591cfc9
docs(regex): retire stale Java routing claims
fglock Aug 20, 2026
6bca8bd
fix(regex): preserve apostrophe diagnostic identity
fglock Aug 20, 2026
811b71e
docs(regex): refresh active completion boundary
fglock Aug 20, 2026
b0e60a5
fix(regex): hide re strict marker from runtime source
fglock Aug 20, 2026
d8e62f3
fix(regex): preserve runtime source delimiter parity
fglock Aug 20, 2026
a44e527
docs(regex): define incremental integration gate
fglock Aug 20, 2026
db13982
docs: clarify the canonical regex architecture
fglock Aug 20, 2026
c4f326d
fix(regex): analyze finite called-group lookbehind widths
fglock Aug 20, 2026
3a5d218
docs(regex): refresh active integration slices
fglock Aug 20, 2026
229186a
fix(regex): refine extended class diagnostics
fglock Aug 20, 2026
1855c24
fix(regex): preserve native escape diagnostic identities
fglock Aug 20, 2026
11f7f1d
docs(regex): advance native diagnostic position
fglock Aug 20, 2026
4a7d9c9
fix(regex): promote top-level Unicode property patterns
fglock Aug 20, 2026
ccf13ab
fix(regex): delegate recursive lookbehind widths to Joni
fglock Aug 20, 2026
b40b545
fix(regex): track property escapes across class edges
fglock Aug 20, 2026
076d1e3
refactor(regex): use one native lookbehind validation
fglock Aug 20, 2026
4b98078
fix(regex): close nested property scanner classes
fglock Aug 20, 2026
43ee65d
fix(regex): position native grammar diagnostics
fglock Aug 20, 2026
d1cd6e2
fix(regex): position unterminated numeric escapes
fglock Aug 20, 2026
557304b
docs(regex): refresh active completion frontier
fglock Aug 20, 2026
1952da2
fix(regex): preserve callback token provenance
fglock Aug 20, 2026
3fb476e
fix(regex): reject separated group introducers
fglock Aug 20, 2026
d8790ad
fix(regex): close native policy diagnostic gaps
fglock Aug 20, 2026
9891285
test(regex): cover native policy diagnostics
fglock Aug 20, 2026
de5005c
perf(regex): implicitly anchor lazy leading dot-star
fglock Aug 20, 2026
f591f77
fix(interpreter): restore outer warning bits after blocks
fglock Aug 20, 2026
98e73e9
fix(regex): enable re strict warnings by default on reuse
fglock Aug 20, 2026
6c7ac52
fix(regex): mark nonexistent numeric backreferences
fglock Aug 20, 2026
1dd70a0
fix(regex): preserve Perl KEEP starts past assertion ends
fglock Aug 20, 2026
49f075d
docs(regex): advance active long-running slices
fglock Aug 20, 2026
5a0c989
fix(regex): publish inverted KEEP match text as undef
fglock Aug 20, 2026
0d95571
refactor(regex): remove dead callback no-op switch
fglock Aug 20, 2026
edd045c
fix(regex): retain nested quantifier diagnostic positions
fglock Aug 20, 2026
2be2ccc
docs(regex): advance native diagnostic frontier
fglock Aug 20, 2026
cd78ebc
fix(regex): enforce Perl group name start categories
fglock Aug 20, 2026
95b5063
docs(regex): record group-name diagnostic closure
fglock Aug 20, 2026
a17e999
fix(regex): report native optimizer anchors in debug traces
fglock Aug 20, 2026
2e12bd9
fix(regex): render dynamic trailing backslash diagnostics
fglock Aug 20, 2026
6027784
docs(regex): close optimizer debug and runtime roots
fglock Aug 20, 2026
112aaa2
fix(regex): diagnose unknown extended-class escapes
fglock Aug 20, 2026
fb739fd
fix(regex): clone callback captures across thread graphs
fglock Aug 20, 2026
9cf0658
docs(regex): record callback clone and escape closure
fglock Aug 20, 2026
04e20e7
fix(regex): classify malformed POSIX extended-class leaves
fglock Aug 20, 2026
2d1b078
fix(regex): emit short octal termination warnings
fglock Aug 20, 2026
77018c4
docs(regex): record native diagnostic exhaustion
fglock Aug 20, 2026
bc65b1a
fix(regex): preserve callback identity in thread clones
fglock Aug 20, 2026
b812c39
test(regex): cover shared callback thread clones
fglock Aug 20, 2026
faae6a7
fix(regex): emit left brace warnings once
fglock Aug 20, 2026
7947460
docs(regex): record left-brace warning closure
fglock Aug 20, 2026
aba2066
fix(regex): retain native invalid-range source spans
fglock Aug 20, 2026
2ae42a0
docs(regex): record native range-span diagnostics
fglock Aug 20, 2026
c399eee
fix(regex): preserve callback source in compile diagnostics
fglock Aug 20, 2026
48c3c67
docs(regex): record callback-source diagnostics
fglock Aug 20, 2026
59f424b
docs(regex): refine residual diagnostic ownership
fglock Aug 20, 2026
4e06ae6
fix(regex): resolve forward named backreferences after parsing
fglock Aug 20, 2026
b8de7bb
refactor(regex): remove unreachable adapter helpers
fglock Aug 20, 2026
6b8af78
refactor(regex): remove dead required-literal scanner
fglock Aug 20, 2026
2a28585
docs(regex): record current release gate
fglock Aug 20, 2026
438ca70
fix(regex): move numeric diagnostics into Joni
fglock Aug 20, 2026
f18d257
docs(regex): record native numeric closure
fglock Aug 20, 2026
58303bb
fix(regex): warn for POSIX syntax outside classes
fglock Aug 20, 2026
2d21a11
test(regex): isolate escaped-class dynamic recursion
fglock Aug 20, 2026
6a60af7
fix(regex): track escaped first class members
fglock Aug 20, 2026
99ebb5e
docs(regex): record callback recursion closure
fglock Aug 20, 2026
dc80d98
fix(regex): parse numeric modifier suffixes after NUL delimiters
fglock Aug 20, 2026
0d65222
docs(regex): mark NUL parser closure
fglock Aug 20, 2026
6a37cb4
fix(regex): restore subject-sensitive charset semantics
fglock Aug 20, 2026
5d2dbc9
docs(regex): compress final parity execution plan
fglock Aug 20, 2026
aab7593
docs(regex): record charset acceptance closure
fglock Aug 20, 2026
9a8457a
fix(string): chop one logical wide scalar
fglock Aug 20, 2026
f031a8f
docs(regex): record chop acceptance closure
fglock Aug 20, 2026
bc3fc78
docs(regex): close stale stat acceptance row
fglock Aug 20, 2026
72681cf
fix: preserve lexical Unicode regex context
fglock Aug 20, 2026
251c59d
fix(regex): recover extended character-class leaves
fglock Aug 20, 2026
5c5a786
fix(regex): move POSIX diagnostics into Joni
fglock Aug 20, 2026
26f471d
fix(regex): warn for quantified zero-width assertions
fglock Aug 20, 2026
b664e96
fix(regex): warn for variable lookbehind captures
fglock Aug 20, 2026
4652baf
docs(regex): record integrated native closures
fglock Aug 20, 2026
25d7af8
fix(regex): diagnose class-valued range endpoints
fglock Aug 20, 2026
5dab429
docs(regex): retire remaining Java matcher claims
fglock Aug 20, 2026
8bdccf7
docs(regex): split byte and property regression ownership
fglock Aug 20, 2026
fd0cd92
docs(regex): refresh active Phase 36 ownership
fglock Aug 20, 2026
72f5b7e
fix(regex): position unknown class escapes
fglock Aug 20, 2026
4c8dbbd
fix(regex): position unknown escapes
fglock Aug 20, 2026
fdfa894
fix(interpreter): preserve foreach match-variable aliases
fglock Aug 20, 2026
5f66c98
docs(regex): unify the active byte-variant root
fglock Aug 20, 2026
9e15f43
fix(regex): accept named debug pragma options
fglock Aug 20, 2026
8fc7a2a
docs(regex): record green saved PR CI
fglock Aug 20, 2026
ae4c824
fix(regex): preserve byte runtime matching semantics
fglock Aug 20, 2026
4f442f6
fix(regex): keep Unicode set syntax off byte engine
fglock Aug 20, 2026
1285ba3
fix(regex): validate literal syntax during parsing
fglock Aug 20, 2026
0bc8ff7
fix(import): require Perl upstream default branch
fglock Aug 20, 2026
8b1fe50
docs(regex): advance Phase 36 execution round
fglock Aug 20, 2026
fdd5e41
fix(regex): preserve lexical literal validation context
fglock Aug 20, 2026
5292db7
refactor(regex): retire production backend selector
fglock Aug 20, 2026
2fa6532
fix(regex): complete class escape and xx warnings
fglock Aug 20, 2026
77249e5
fix(test): bind regex invariance test runtime
fglock Aug 20, 2026
bb7edb9
docs(regex): refresh Phase 36 native residual
fglock Aug 20, 2026
b059ed3
fix(regex): warn on equivalent range spellings
fglock Aug 20, 2026
f296dbe
docs(regex): advance native diagnostic residual
fglock Aug 20, 2026
cf294a7
docs(regex): record current combined build blockers
fglock Aug 20, 2026
34a9e2f
docs(regex): describe test-only selector model
fglock Aug 20, 2026
2220400
docs(regex): record redirected residual ownership
fglock Aug 20, 2026
56d0697
fix(regex): extend strict range diagnostics to POSIX classes
fglock Aug 20, 2026
0f4209f
fix(regex): preserve byte properties and control cuts
fglock Aug 20, 2026
49d9830
docs(regex): advance integrated diagnostic position
fglock Aug 20, 2026
beadd27
fix(regex): support grapheme boundary alias policy
fglock Aug 20, 2026
61f1ca9
fix(regex): position native quantifier warnings
fglock Aug 20, 2026
799c390
fix(regex): preserve lexical charname literal identity
fglock Aug 20, 2026
61eb48a
docs(regex): advance integrated release position
fglock Aug 20, 2026
61d4d33
fix(regex): reject strict class vertical space
fglock Aug 20, 2026
6d6900a
docs(regex): advance native diagnostic position
fglock Aug 20, 2026
4c56008
fix: return undef for negative caller depths
fglock Aug 20, 2026
9d3cc95
fix(regex): preserve non-POSIX class text
fglock Aug 20, 2026
394e305
docs(regex): narrow native diagnostic residual
fglock Aug 20, 2026
2e786e0
docs(regex): record green combined gate
fglock Aug 20, 2026
f31bb53
fix(regex): align malformed POSIX class diagnostics
fglock Aug 20, 2026
a7094f4
docs(regex): reduce native diagnostic residual to eight
fglock Aug 20, 2026
3135b67
fix(regex): keep one native POSIX diagnostic scanner
fglock Aug 20, 2026
e8be408
docs(regex): record POSIX integration correction
fglock Aug 20, 2026
dae7ee3
fix(regex): emit strict literal delimiter warnings
fglock Aug 20, 2026
572e635
fix(regex): diagnose escaped extended-class close
fglock Aug 20, 2026
6521488
docs(regex): reduce native residual to two
fglock Aug 20, 2026
1a5d818
docs(regex): record strict acceptance blockers
fglock Aug 20, 2026
1dc978d
fix(regex): honor global warnings for interpolation
fglock Aug 20, 2026
f5cd948
docs(regex): close focused native diagnostics
fglock Aug 20, 2026
8ab138b
fix(regex): validate Unicode property wildcards
fglock Aug 20, 2026
3787f23
docs(regex): advance integrated resolver position
fglock Aug 20, 2026
41a585b
fix(runtime): classify logical Perl executable as binary
fglock Aug 20, 2026
27911e9
docs(regex): close stat acceptance regression
fglock Aug 20, 2026
90f5616
fix(regex): carry lexical charnames across ithreads
fglock Aug 20, 2026
ad21704
fix(regex): preserve Unicode property diagnostics
fglock Aug 20, 2026
67f2d7c
fix(regex): complement ASCII word classes over bytes
fglock Aug 20, 2026
d49c033
docs(regex): advance integrated release position
fglock Aug 20, 2026
73f5eb0
fix(threads): clone lexical hint callbacks
fglock Aug 21, 2026
1795f91
fix(regex): preserve extended-set failure precedence
fglock Aug 21, 2026
6332b3c
docs(regex): advance integrated release position
fglock Aug 21, 2026
53acbc0
fix(regex): dispatch implicit Regexp destructors
fglock Aug 21, 2026
5956e42
fix(runtime): defer utf8 pragma load state
fglock Aug 21, 2026
6c11911
fix(regex): keep invalid charnames fatal under warn mode
fglock Aug 21, 2026
ba13a99
docs(regex): advance current integration gate
fglock Aug 21, 2026
0fe799b
fix(jvm): keep implicit foreach arrays live
fglock Aug 21, 2026
f433f69
fix(parser): map punctuation control escapes like Perl
fglock Aug 21, 2026
0f0f527
docs(regex): advance integrated acceptance roots
fglock Aug 21, 2026
e994e80
feat: expose Joni regex optimization facts
fglock Aug 21, 2026
a8cc0dc
docs(regex): record Joni optimizer introspection
fglock Aug 21, 2026
8c96455
fix: preserve qx subprocess output as bytes
fglock Aug 21, 2026
b9e56f6
fix(regex): reject named sequences in scalar class contexts
fglock Aug 21, 2026
d912827
perf(runtime): index source locations
fglock Aug 21, 2026
7239971
docs(regex): advance integrated residual ownership
fglock Aug 21, 2026
0c5ff8c
docs(regex): start exact-head broad acceptance
fglock Aug 21, 2026
e550c3f
fix(regex): warn for named sequences used as range endpoints
fglock Aug 21, 2026
a78a7e8
fix: preserve user property package provenance
fglock Aug 21, 2026
1e15462
fix(regex): keep VLB warnings default-on
fglock Aug 21, 2026
d3a4bb0
fix: recognize digit-suffix user properties
fglock Aug 21, 2026
e32b19b
docs(regex): advance current green ownership
fglock Aug 21, 2026
26d959b
docs(regex): replace history with live execution plan
fglock Aug 21, 2026
b4e56a7
fix(regex): retain single-byte portions of code ranges
fglock Aug 21, 2026
f1af949
fix(regex): warn for mixed strict range endpoints
fglock Aug 21, 2026
85861fc
fix(regex): avoid duplicate strict class warning
fglock Aug 21, 2026
44542b6
fixup! fix(regex): warn for mixed strict range endpoints
fglock Aug 21, 2026
bf7734b
docs(regex): record native migration and acceptance gates
fglock Aug 21, 2026
c51a50b
docs(regex): assign native property scanner tranche
fglock Aug 21, 2026
18b9a01
fix: retain utf8 pragma in interpreter source scope
fglock Aug 21, 2026
d5dd8c0
docs(regex): refresh active release barrier
fglock Aug 21, 2026
2690b70
fix: parse recursively scoped extended-class interpolation
fglock Aug 21, 2026
9480312
docs(regex): record complete acceptance disposition
fglock Aug 21, 2026
cbee747
fix(runtime): increment plain overload copy results
fglock Aug 21, 2026
a40cb91
docs(regex): narrow the next release blocker
fglock Aug 21, 2026
16dd30f
fix(regex): keep Perl word-boundary newline runs intact
fglock Aug 21, 2026
f8430cc
docs(regex): record the word-boundary tranche
fglock Aug 21, 2026
9935dfd
docs(regex): classify socket decreases as sandbox effects
fglock Aug 21, 2026
5111806
fix(regex): keep property wildcard warnings default-on
fglock Aug 21, 2026
2117fe0
fix(regex): preserve escaped class opener parity
fglock Aug 21, 2026
986b83b
fixup! fix(regex): keep property wildcard warnings default-on
fglock Aug 21, 2026
96aa0b7
fix(regex): resolve Perl properties through Joni hook
fglock Aug 21, 2026
366e1e0
fix: recognize byte NEL as a line break
fglock Aug 21, 2026
b693f56
docs(regex): advance the checkpoint composition
fglock Aug 21, 2026
01740cc
docs: reconcile regex and Joni architecture
fglock Aug 21, 2026
702bb28
fix(regex): preserve Perl word-boundary whitespace spans
fglock Aug 21, 2026
cb0926a
docs(regex): advance the checkpoint release gate
fglock Aug 21, 2026
5a1e0c1
chore: sync bundled Perl libraries
fglock Aug 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
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/dev/unicode/17.0.0/** -text
/src/main/perl/lib/unicore/Name.pl text eol=lf
/src/main/java/org/perlonjava/runtime/regex/PerlUnicodeBlockData.java text eol=lf
/src/main/java/org/perlonjava/runtime/regex/PerlUnicodeNumericValueData.java text eol=lf
8 changes: 8 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@
| 2026-08-17 | (no source work lost — stale workers removed) Failed `make` runs were interrupted after their known Joni failures, but their Gradle unit-shard workers survived and competed with later builds. | Agent sent Ctrl-C to the parent build session before all parallel workers had exited. Recovery: identified stale workers by PID, start time, and shard work directory, terminated only those exact PIDs, and left the current build and sibling repositories untouched. Fix: let failed parallel `make` runs finish naturally, or verify and clean up their exact child PIDs before starting another build. |
| 2026-08-17 | (no source work lost — CPAN run rerun) A concurrent `make` replaced the development shadow JAR while an active `jcpan` process was spawning a child JVM, causing a transient `ClassNotFoundException`. | Agent waited for another worktree's build but did not wait for the same worktree's bounded CPAN runs before rebuilding `target/perlonjava-5.44.0.jar`. Recovery: let `make` finish and rerun the affected CPAN target. Fix: never rebuild a worktree's development JAR while that worktree has active `jperl` or `jcpan` processes. |
| 2026-08-18 | (no source work lost — wrong local WIP ref recovered) A test-snapshot cherry-pick landed in the original checkout instead of its newly created continuation worktree. | Agent chained `git worktree add` and `git cherry-pick` while the shell remained in the original working directory. Recovery: preserved the mistaken commit on a recovery branch, restored the original WIP ref to its exact prior commit without reset, then cherry-picked in the intended worktree. Fix: run post-creation Git commands with the new worktree as the explicit working directory and verify `git branch --show-current` before committing. |
| 2026-08-20 | (no source work lost — green build evidence discarded) A coordinator cherry-picked an integrated worker commit into a checkout while `make` was still validating an earlier supposedly immutable commit. | Integration and validation shared one worktree, and the coordinator continued integration before the build session drained. Recovery: let the exact build processes finish untouched, mark the result invalid regardless of exit status, and rerun from an immutable barrier. Fix: never mutate, cherry-pick, rebase, or regenerate a checkout with an active build/test gate; integrate in a separate worktree or wait for the gate to finish. |

When you cause a new incident, append a row here in the same commit
that fixes it. Future agents need to see that these warnings are real.
Expand Down Expand Up @@ -273,6 +274,13 @@ PerlOnJava does **not** implement the following Perl features:

**NEVER modify or delete existing tests.** Tests are the source of truth. If a test fails, fix the code, not the test. When in doubt, verify expected behavior with system Perl (`perl`, not `jperl`).

**NEVER mutate a checkout while a build or test gate is running in it.** A gate
validates one immutable source commit. Wait for the process and all children to
finish before cherry-picking, rebasing, editing, or regenerating that checkout,
or run integration in a separate worktree. If mutation occurs, let the exact
processes drain without interruption, discard the result even if green, and
rerun from a clean immutable barrier.

**ALWAYS validate new unit tests with standard Perl before relying on them.** Unit tests in `src/test/resources/unit` must encode standard Perl behavior, not PerlOnJava-specific behavior. For any new or changed unit test, run it with `perl` or `prove` first, capture the output, and only then use it to drive PerlOnJava fixes:
```bash
prove -r src/test/resources/unit > /tmp/prove_unit_perl.txt 2>&1; echo "EXIT: $?" >> /tmp/prove_unit_perl.txt
Expand Down
19 changes: 18 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
.PHONY: all clean test test-unit test-interpreter check-thread-test-sources check-thread-core-test-sources check-thread-ecosystem-test-sources check-thread-regex-test-sources test-thread-tooling test-threads test-threads-core test-threads-core-platform test-threads-core-mode test-threads-windows test-threads-regex test-threads-release test-threads-ecosystem test-bundled-modules test-cpan-distroprefs test-exiftool test-all test-gradle test-gradle-unit test-gradle-all test-gradle-parallel test-maven-parallel build run wrapper check-java-gradle dev ci sbom sbom-java sbom-perl sbom-clean check-links
.PHONY: all clean test test-unit test-interpreter check-thread-test-sources check-thread-core-test-sources check-thread-ecosystem-test-sources check-thread-regex-test-sources test-thread-tooling test-threads test-threads-core test-threads-core-platform test-threads-core-mode test-threads-windows test-threads-regex test-threads-release test-threads-ecosystem test-bundled-modules test-cpan-distroprefs test-exiftool test-all test-gradle test-gradle-unit test-gradle-all test-gradle-parallel test-maven-parallel build run wrapper check-java-gradle dev ci sbom sbom-java sbom-perl sbom-clean check-links perl5-update perl5-sync

PERL ?= perl

THREAD_DIST_DIRS := perl5/dist/threads/t perl5/dist/threads-shared/t perl5/dist/Thread-Queue/t perl5/dist/Thread-Semaphore/t
THREAD_PLATFORM_TESTS := \
Expand Down Expand Up @@ -82,6 +84,12 @@ THREAD_ECOSYSTEM_UPSTREAM_TESTS := \

all: build

perl5-update:
$(PERL) dev/import-perl5/update_perl5.pl

perl5-sync:
$(PERL) dev/import-perl5/update_perl5.pl --sync $(if $(FILTER),--filter "$(FILTER)",)

# CI build - optimized for CI/CD environments
ci: check-java-gradle
ifeq ($(OS),Windows_NT)
Expand Down Expand Up @@ -127,6 +135,15 @@ else
./gradlew classes testUnitParallel --parallel shadowJar
endif

# Focused vendored-Joni unit gate for parser/matcher iteration. A full `make`
# remains required before pushing or updating a PR.
test-joni: check-java-gradle
ifeq ($(OS),Windows_NT)
gradlew.bat testJoni
else
./gradlew testJoni
endif

# `make dev` is disabled on purpose.
#
# It used to be a "build without running tests" shortcut, but that is
Expand Down
2 changes: 1 addition & 1 deletion dev/design/cpan-compiler-tooling-batch-20260813.md
Original file line number Diff line number Diff line change
Expand Up @@ -143,5 +143,5 @@ was kept in the PerlOnJava validation set.
## References

- [Module porting guide](../../docs/guides/module-porting.md)
- [Executable regex callbacks](executable-regex-callbacks.md)
- [Regex callout contract](../../docs/design/joni-callout-fork.md)
- Skills: `debug-perlonjava`, `port-cpan-module`
2 changes: 1 addition & 1 deletion dev/design/cpan-runtime-parity-experiment.md
Original file line number Diff line number Diff line change
Expand Up @@ -220,5 +220,5 @@ Runtime outcome:

- `dev/design/caller_line_number_fix.md`
- `dev/design/utf8_flag_parity.md`
- `dev/design/regex_jruby_joni.md`
- `dev/implementation/regex.md`
- `.agents/skills/debug-perlonjava/SKILL.md`
2 changes: 1 addition & 1 deletion dev/design/cpan-workaround-elimination.md
Original file line number Diff line number Diff line change
Expand Up @@ -1120,7 +1120,7 @@ Ubuntu and Windows CI jobs passed.
- `dev/design/patch-and-cpan-prefs-layout.md`
- `dev/design/cpan-runtime-parity-experiment.md`
- `dev/design/catalyst-support.md`
- `dev/design/regex_alternatives.md`
- `dev/design/phase36-regex-parity.md`
- `dev/design/shared_ast_transformer.md`
- `.agents/skills/port-cpan-module/SKILL.md`
- `.agents/skills/debug-perlonjava/SKILL.md`
Loading
Loading