Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
ad5e595
Add bounded CPython 3.14 regex profile to Rust core
easel Oct 23, 2026
e2babe3
Reconcile coordinated schema-browser main before Core source freeze
easel Oct 26, 2026
9ddd4e9
Add reviewed Core Python 3.14 generation and metadata gates
easel Oct 26, 2026
b6418c4
Isolate reviewed Core regex artifact generation from wheel jobs
easel Oct 26, 2026
5549ea4
Fetch the pinned regex preimage within the original hosted deadline
easel Oct 26, 2026
f374ebf
Add reviewed Core release wheel and four-cell public proof gates
easel Oct 26, 2026
74efa43
Merge reviewed preimage acquisition into the Core release candidate
easel Oct 26, 2026
a143bbb
Reconcile the browser installer correction before Core generation ado…
easel Oct 26, 2026
331ddda
Correct the regex preimage digest to its verified Git blob
easel Oct 26, 2026
4867ede
Retain located Core preflight failures and coordinated release source…
easel Oct 26, 2026
7726b81
Merge the verified immutable regex preimage pin
easel Oct 26, 2026
39a8dfc
Reconcile browser draft promotion recovery before Core source freeze
easel Oct 26, 2026
0b006ad
Preserve tool invocation identities and bounded preflight observations
easel Oct 26, 2026
df11d6f
Retain accepted tool identity correction and actual main reconciliation
easel Oct 26, 2026
bee06c5
Integrate accepted Core release source before regex generation
easel Oct 26, 2026
8b6715d
Preserve occupied runtime cache before fresh verified extraction
easel Oct 26, 2026
0b4ece2
Retain actual occupied-prefix evidence and accepted correction
easel Oct 26, 2026
13e8f9c
Reconcile the browser archive-path publication fix before Core genera…
easel Oct 26, 2026
ca3388d
Integrate current accepted release source and prefix correction
easel Oct 26, 2026
b7ffabc
Adopt reviewed genuine Python 3.14 regex outputs and advance metamode…
easel Oct 26, 2026
6383818
Reconcile verified browser release receipts before metamodel artifacts
easel Oct 26, 2026
2deb2f2
Retain bounded owned generation failure diagnostics
easel Oct 26, 2026
e75fea0
Preserve metamodel failure and bounded diagnostic review
easel Oct 26, 2026
c51cc26
Merge branch 'codex/core-python314-release' into codex/core-python314…
easel Oct 26, 2026
d3e8996
Record actual offline dependency failure and prerequisite plan
easel Oct 26, 2026
9095215
Acquire locked Cargo dependencies before offline generation
easel Oct 26, 2026
3973be2
Seal locked dependency prerequisite source acceptance
easel Oct 26, 2026
507140a
Merge branch 'codex/core-python314-release' into codex/core-python314…
easel Oct 26, 2026
6d081bb
Adopt genuine reviewed metamodel outputs for dependent qualification
easel Oct 26, 2026
292de87
Preserve dependent timeout evidence and bounded diagnosis plan
easel Oct 26, 2026
fc14210
Locate bounded inventory timeout with fixed diagnostics
easel Oct 26, 2026
feead00
Seal R3 timeout diagnostic source review
easel Oct 26, 2026
78a91ca
Merge branch 'codex/core-python314-release' into codex/core-python314…
easel Oct 26, 2026
b3213ff
Record located inventory path-set hotspot and hoist plan
easel Oct 26, 2026
98dc5ea
Reuse invariant script path membership set during census
easel Oct 26, 2026
8eed1a8
Seal invariant census path-set source acceptance
easel Oct 26, 2026
45b2460
Merge branch 'codex/core-python314-release' into codex/core-python314…
easel Oct 26, 2026
426954c
Record passed dependent gates and actual Codegen map refusal
easel Oct 26, 2026
d4d78ee
Read and verify actual Codegen asset map during assembly
easel Oct 26, 2026
c356942
Seal Codegen asset map reader source acceptance
easel Oct 26, 2026
03e8566
Merge branch 'codex/core-python314-release' into codex/core-python314…
easel Oct 26, 2026
3eaf7e6
Adopt genuine reviewed dependent artifacts for Core qualification
easel Oct 26, 2026
074bece
Refresh action runtime custody for adopted metamodel resources
easel Oct 27, 2026
ae11ea4
Adopt genuine inventory for refreshed runtime resource custody
easel Oct 27, 2026
0413e33
Fix artifact qualification fixtures for strict producer contract
easel Oct 27, 2026
615cf75
Order artifact test imports and retain actual qualification evidence
easel Oct 27, 2026
591d562
Adopt reviewed header-corrected generated inventory
easel Oct 27, 2026
881b168
Preserve strict WHEEL metadata semantics across repair framing
easel Oct 27, 2026
ffda8a0
Adopt reviewed WHEEL framing source inventory
easel Oct 27, 2026
f4a2bc3
Fix qualified Core test-cohort acquisition cell identities
easel Oct 27, 2026
039938a
Emit the verified nested selected-wheel path for Core qualification
easel Oct 27, 2026
0174d84
Complete the locked Core selected-wheel regression test tools
easel Oct 27, 2026
c9579d6
Qualify Python 3.14 regex profiles in the Chromium harness
easel Oct 27, 2026
34a337b
Adopt the reviewed browser 3.14 inventory generation
easel Oct 27, 2026
4e9d1d6
Disable macOS CI while preserving Linux qualification
easel Oct 27, 2026
8e5575f
Qualify retained Core archives with Linux-only release proof
easel Oct 27, 2026
3d3b755
Include terminal matrix newline in workflow contract checks
easel Oct 27, 2026
a1464f0
Adopt hosted inventory for retained release verification
easel Oct 27, 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
  •  
  •  
  •  
16 changes: 2 additions & 14 deletions .github/workflows/access-boundaries.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ on:
push:
branches-ignore:
- codex/core-0102-inventory-generation
- codex/core-python314-generation
- codex/core-python314-public-install-proof
tags:
- '**'
pull_request:
Expand Down Expand Up @@ -176,20 +178,6 @@ jobs:
weft-wheel-url: https://github.com/DocumentDrivenDX/weft/releases/download/v0.4.49/weft_sql-0.4.49-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
weft-wheel-sha256: 8ca1625249c1d3bed20864dfd71481d8b956b3901ffdc619fc3ec4a1a473be9c
python-version: '3.14'
- os: macos-14
architecture: arm64
mini-racer-platform: macos-11+-arm64
weft-wheel-filename: weft_sql-0.4.49-cp39-abi3-macosx_11_0_arm64.whl
weft-wheel-url: https://github.com/DocumentDrivenDX/weft/releases/download/v0.4.49/weft_sql-0.4.49-cp39-abi3-macosx_11_0_arm64.whl
weft-wheel-sha256: 695e12867dfcffedb0e4bde7fa571835ebd43fd1c06b0d775b1abecb45ffa117
python-version: '3.11'
- os: macos-14
architecture: arm64
mini-racer-platform: macos-11+-arm64
weft-wheel-filename: weft_sql-0.4.49-cp39-abi3-macosx_11_0_arm64.whl
weft-wheel-url: https://github.com/DocumentDrivenDX/weft/releases/download/v0.4.49/weft_sql-0.4.49-cp39-abi3-macosx_11_0_arm64.whl
weft-wheel-sha256: 695e12867dfcffedb0e4bde7fa571835ebd43fd1c06b0d775b1abecb45ffa117
python-version: '3.14'
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v2
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/actions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ on:
push:
branches-ignore:
- codex/core-0102-inventory-generation
- codex/core-python314-generation
- codex/core-python314-public-install-proof
tags:
- '**'
pull_request:
Expand Down
441 changes: 441 additions & 0 deletions .github/workflows/core-0.10.3-public-install-proof.yml

Large diffs are not rendered by default.

888 changes: 888 additions & 0 deletions .github/workflows/core-python314-generation.yml

Large diffs are not rendered by default.

563 changes: 512 additions & 51 deletions .github/workflows/python-action-runtime.yml

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions .github/workflows/python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ on:
push:
branches-ignore:
- codex/core-0102-inventory-generation
- codex/core-python314-generation
- codex/core-python314-public-install-proof
tags:
- '**'
pull_request:
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/rust-core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ on:
push:
branches-ignore:
- codex/core-0102-inventory-generation
- codex/core-python314-generation
- codex/core-python314-public-install-proof
tags:
- '**'
pull_request:
Expand All @@ -14,7 +16,7 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
os: [ubuntu-latest]
python: ['3.11.17', '3.12.15', '3.13.16']
runs-on: ${{ matrix.os }}
steps:
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/rust-spike.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ on:
push:
branches-ignore:
- codex/core-0102-inventory-generation
- codex/core-python314-generation
- codex/core-python314-public-install-proof
tags:
- '**'
pull_request:
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/sql-containment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ on:
push:
branches-ignore:
- codex/core-0102-inventory-generation
- codex/core-python314-generation
- codex/core-python314-public-install-proof
tags:
- '**'
pull_request:
Expand All @@ -17,7 +19,7 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ubuntu-24.04, macos-14]
os: [ubuntu-24.04]
python: ['3.11', '3.14']
runs-on: ${{ matrix.os }}
env:
Expand Down
Binary file modified crates/umf-core/src/python_re_names.dat
Binary file not shown.
22 changes: 22 additions & 0 deletions crates/umf-core/src/python_re_tables.rs

Large diffs are not rendered by default.

41 changes: 36 additions & 5 deletions crates/umf-core/src/python_regex.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ pub enum PythonReVersion {
V3_11,
V3_12,
V3_13,
V3_14,
}

impl PythonReVersion {
Expand All @@ -25,6 +26,7 @@ impl PythonReVersion {
11 => Ok(Self::V3_11),
12 => Ok(Self::V3_12),
13 => Ok(Self::V3_13),
14 => Ok(Self::V3_14),
_ => Err(PythonRegexError::profile(minor)),
}
}
Expand All @@ -34,6 +36,7 @@ impl PythonReVersion {
Self::V3_11 => 11,
Self::V3_12 => 12,
Self::V3_13 => 13,
Self::V3_14 => 14,
}
}
}
Expand Down Expand Up @@ -1201,6 +1204,7 @@ fn is_word(c: u32, flags: Flags, version: PythonReVersion) -> bool {
PythonReVersion::V3_11 => tables::WORD_V3_11,
PythonReVersion::V3_12 => tables::WORD_V3_12,
PythonReVersion::V3_13 => tables::WORD_V3_13,
PythonReVersion::V3_14 => tables::WORD_V3_14,
};
in_ranges(c, r)
}
Expand All @@ -1209,6 +1213,7 @@ fn decimal_digit(c: u32, version: PythonReVersion) -> Option<u32> {
PythonReVersion::V3_11 => tables::DIGIT_V3_11,
PythonReVersion::V3_12 => tables::DIGIT_V3_12,
PythonReVersion::V3_13 => tables::DIGIT_V3_13,
PythonReVersion::V3_14 => tables::DIGIT_V3_14,
};
ranges
.binary_search_by(|(start, end)| {
Expand Down Expand Up @@ -1249,6 +1254,7 @@ fn is_digit(c: u32, flags: Flags, version: PythonReVersion) -> bool {
PythonReVersion::V3_11 => tables::DIGIT_V3_11,
PythonReVersion::V3_12 => tables::DIGIT_V3_12,
PythonReVersion::V3_13 => tables::DIGIT_V3_13,
PythonReVersion::V3_14 => tables::DIGIT_V3_14,
};
in_ranges(c, r)
}
Expand All @@ -1260,6 +1266,7 @@ fn is_space(c: u32, flags: Flags, version: PythonReVersion) -> bool {
PythonReVersion::V3_11 => tables::SPACE_V3_11,
PythonReVersion::V3_12 => tables::SPACE_V3_12,
PythonReVersion::V3_13 => tables::SPACE_V3_13,
PythonReVersion::V3_14 => tables::SPACE_V3_14,
};
in_ranges(c, r)
}
Expand All @@ -1272,6 +1279,7 @@ fn valid_group_name(name: &str, version: PythonReVersion) -> bool {
PythonReVersion::V3_11 => (tables::IDSTART_V3_11, tables::IDCONTINUE_V3_11),
PythonReVersion::V3_12 => (tables::IDSTART_V3_12, tables::IDCONTINUE_V3_12),
PythonReVersion::V3_13 => (tables::IDSTART_V3_13, tables::IDCONTINUE_V3_13),
PythonReVersion::V3_14 => (tables::IDSTART_V3_14, tables::IDCONTINUE_V3_14),
};
in_ranges(first as u32, start) && chars.all(|ch| in_ranges(ch as u32, cont))
}
Expand Down Expand Up @@ -1346,6 +1354,7 @@ fn simple_fold(c: u32, v: PythonReVersion) -> u32 {
PythonReVersion::V3_11 => tables::LOWER_V3_11,
PythonReVersion::V3_12 => tables::LOWER_V3_12,
PythonReVersion::V3_13 => tables::LOWER_V3_13,
PythonReVersion::V3_14 => tables::LOWER_V3_14,
};
pairs
.binary_search_by_key(&c, |p| p.0)
Expand All @@ -1356,20 +1365,23 @@ fn lower_reverse(v: PythonReVersion) -> &'static [(u32, u32)] {
PythonReVersion::V3_11 => tables::LOWER_REVERSE_V3_11,
PythonReVersion::V3_12 => tables::LOWER_REVERSE_V3_12,
PythonReVersion::V3_13 => tables::LOWER_REVERSE_V3_13,
PythonReVersion::V3_14 => tables::LOWER_REVERSE_V3_14,
}
}
fn casefix(v: PythonReVersion) -> &'static [(u32, u32)] {
match v {
PythonReVersion::V3_11 => tables::CASEFIX_V3_11,
PythonReVersion::V3_12 => tables::CASEFIX_V3_12,
PythonReVersion::V3_13 => tables::CASEFIX_V3_13,
PythonReVersion::V3_14 => tables::CASEFIX_V3_14,
}
}
fn casefix_reverse(v: PythonReVersion) -> &'static [(u32, u32)] {
match v {
PythonReVersion::V3_11 => tables::CASEFIX_REVERSE_V3_11,
PythonReVersion::V3_12 => tables::CASEFIX_REVERSE_V3_12,
PythonReVersion::V3_13 => tables::CASEFIX_REVERSE_V3_13,
PythonReVersion::V3_14 => tables::CASEFIX_REVERSE_V3_14,
}
}
fn has_pair(pairs: &[(u32, u32)], left: u32, right: u32) -> bool {
Expand Down Expand Up @@ -1463,7 +1475,7 @@ fn anchor_matches(a: Anchor, f: Flags, text: &[u32], pos: usize, v: PythonReVers
|| (f.has(Flags::MULTILINE) && text.get(pos) == Some(&10))
}
Anchor::Boundary(neg) => {
if neg && text.is_empty() {
if neg && text.is_empty() && v != PythonReVersion::V3_14 {
return false;
}
let left = pos > 0 && is_word(text[pos - 1], f, v);
Expand Down Expand Up @@ -1841,7 +1853,9 @@ impl<'ctx, 'host> Parser<'ctx, 'host> {
self.err("global flags not at the start of the expression")
);
}
if self.version == PythonReVersion::V3_13 && on.contains(&116) {
if matches!(self.version, PythonReVersion::V3_13 | PythonReVersion::V3_14)
&& on.contains(&116)
{
return Err(self.err("invalid global flag"));
}
if (saved.has(Flags::ASCII) && on.contains(&117))
Expand Down Expand Up @@ -1954,7 +1968,9 @@ impl<'ctx, 'host> Parser<'ctx, 'host> {
.iter()
.all(|c| matches!(*c, 105 | 109 | 115 | 120 | 97 | 117 | 116))
{
if self.version == PythonReVersion::V3_13 && spec.contains(&116) {
if matches!(self.version, PythonReVersion::V3_13 | PythonReVersion::V3_14)
&& spec.contains(&116)
{
return Err(self.err("invalid global flag"));
}
for c in spec {
Expand Down Expand Up @@ -2054,7 +2070,7 @@ impl<'ctx, 'host> Parser<'ctx, 'host> {
Ok(s)
}
fn parse_quantifier(&mut self, n: Node) -> Result<Node, PythonRegexError> {
if self.version != PythonReVersion::V3_13
if !matches!(self.version, PythonReVersion::V3_13 | PythonReVersion::V3_14)
&& self.flags.has(Flags::TEMPLATE)
&& matches!(self.peek(), Some(42 | 43 | 63 | 123))
{
Expand Down Expand Up @@ -2222,6 +2238,10 @@ impl<'ctx, 'host> Parser<'ctx, 'host> {
87 => Node::Class(singlecat(Category::Word, true), f),
65 => Node::Anchor(Anchor::AbsoluteBeginning, f),
90 => Node::Anchor(Anchor::AbsoluteEnd, f),
122 if !in_class && self.version == PythonReVersion::V3_14 => {
Node::Anchor(Anchor::AbsoluteEnd, f)
}
122 if !in_class => return Err(self.err("bad escape")),
98 if !in_class => Node::Anchor(Anchor::Boundary(false), f),
66 if !in_class => Node::Anchor(Anchor::Boundary(true), f),
98 => Node::Literal(8, f),
Expand Down Expand Up @@ -2509,8 +2529,9 @@ mod tests {
}
#[test]
fn invalid_syntax_and_version_are_explicit() {
assert_eq!(PythonReVersion::from_minor(14), Ok(PythonReVersion::V3_14));
assert_eq!(
PythonReVersion::from_minor(14).unwrap_err().code(),
PythonReVersion::from_minor(15).unwrap_err().code(),
"PYTHON_REGEX_PROFILE_UNAVAILABLE"
);
assert!(PythonRegex::compile(&Utf16::from("(?<=a+)b"), PythonReVersion::V3_11).is_err());
Expand All @@ -2536,6 +2557,16 @@ mod tests {
assert_eq!(find("a.$", "a\r"), Some((0, 2)));
assert_eq!(find("a.$", "a\n"), None);
}

#[test]
fn python_314_regex_release_deltas_are_versioned() {
assert!(PythonRegex::compile(&Utf16::from(r"\z"), PythonReVersion::V3_13).is_err());
assert!(PythonRegex::compile(&Utf16::from(r"\z"), PythonReVersion::V3_14).is_ok());
let before = PythonRegex::compile(&Utf16::from(r"\B"), PythonReVersion::V3_13).unwrap();
let after = PythonRegex::compile(&Utf16::from(r"\B"), PythonReVersion::V3_14).unwrap();
assert_eq!(before.find_from_codepoints(&[], 0), None);
assert_eq!(after.find_from_codepoints(&[], 0), Some((0, 0)));
}
#[test]
fn unicode_classes_and_versioned_tables() {
let arabic = Utf16::new(vec![0x0662]);
Expand Down

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Loading
Loading