Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
212 commits
Select commit Hold shift + click to select a range
226dd86
Update lib
owjs3901 May 9, 2026
46695f7
Fix override
owjs3901 May 10, 2026
f3494e0
Rm override
owjs3901 May 10, 2026
c9bc713
Fix testcase
owjs3901 May 10, 2026
e1d2aa6
Fix testcase
owjs3901 May 10, 2026
1e3d2a4
Fix context issue
owjs3901 May 11, 2026
d6fddae
Add Korean+math mixed expression support (PDF 제6항 [붙임])
owjs3901 May 11, 2026
9a9836a
Generalize fraction + repeating-decimal algorithms, fix testcase syntax
owjs3901 May 11, 2026
f935491
Fix rulw 28
owjs3901 May 12, 2026
d68befb
Apply UEB 'part' contraction + relax `-` terminator rule (rule_35)
owjs3901 May 12, 2026
65cd0de
Remove 분철 (line-break) markers from rule_35.json testcase
owjs3901 May 12, 2026
25b238f
Add UEB pdf
owjs3901 May 12, 2026
3e182f2
Fix math_16.json input to match PDF math 제16항 본문
owjs3901 May 12, 2026
032a289
Update testcase
owjs3901 May 12, 2026
28c6460
Fix math issue
owjs3901 May 12, 2026
584b598
Update AGENTS.md
owjs3901 May 12, 2026
07cc634
Fix testcase issue
owjs3901 May 12, 2026
ca21e1a
Update testcase
owjs3901 May 12, 2026
ed7d796
Update testcase
owjs3901 May 12, 2026
611d3cd
Update math 15
owjs3901 May 12, 2026
2d32d7f
Fix testcase
owjs3901 May 12, 2026
69771c1
Update math_11.json
owjs3901 May 13, 2026
af20571
Fix math issue
owjs3901 May 13, 2026
71edba2
Update rule
owjs3901 May 13, 2026
68ed6dd
Fix testcase
owjs3901 May 14, 2026
af08ab3
Update testcase
owjs3901 May 14, 2026
a344e88
Add testcase
owjs3901 May 14, 2026
27c7a2c
Update testcase
owjs3901 May 14, 2026
61c7dec
Improve
owjs3901 May 14, 2026
b31e18a
Add testcase
owjs3901 May 14, 2026
4c20621
Update issue
owjs3901 May 14, 2026
3d3164e
Update
owjs3901 May 14, 2026
b7897e8
Fix testcase
owjs3901 May 14, 2026
8371dff
Update
owjs3901 May 14, 2026
02f7bb6
Fix bug
owjs3901 May 14, 2026
c20d4a0
Update testcase
owjs3901 May 15, 2026
578fb40
Fix english
owjs3901 May 15, 2026
9a2fcf6
Fix en issue
owjs3901 May 15, 2026
880f2c5
Update testcase
owjs3901 May 15, 2026
c1d9b39
Fix testcase
owjs3901 May 15, 2026
e9bf1da
Fix testcase
owjs3901 May 15, 2026
fdeedb1
Fix math issue
owjs3901 May 15, 2026
3f1818f
Support latex
owjs3901 May 15, 2026
dd62ec4
Update testcase
owjs3901 May 15, 2026
ff3d6d1
Fix testcase
owjs3901 May 15, 2026
7be43b3
Fix math issue
owjs3901 May 15, 2026
4e379aa
Update testcase
owjs3901 May 15, 2026
5a988d7
Update testcase
owjs3901 May 18, 2026
7343cd4
Update rule_68.json
owjs3901 May 18, 2026
9b5db58
Update math_18.json
owjs3901 May 18, 2026
fb2e1ef
Update math_21.json
owjs3901 May 18, 2026
9fa7216
Update math_22.json
owjs3901 May 18, 2026
fe48adb
Update math_24.json
owjs3901 May 18, 2026
405e10d
Update math_25.json
owjs3901 May 18, 2026
9de6c57
Update math_48.json
owjs3901 May 18, 2026
5c2cf1e
Update rule_45.json
owjs3901 May 18, 2026
7da6c3b
Update math_10.json
owjs3901 May 18, 2026
3b9625b
Update math_2.json
owjs3901 May 18, 2026
6d948ea
Update math_4.json
owjs3901 May 18, 2026
14c0019
Update math_12.json
owjs3901 May 18, 2026
32858c3
Create math_12_b1.json
owjs3901 May 18, 2026
03e06cd
Update math_6.json
owjs3901 May 18, 2026
36dc108
Update map and math6
owjs3901 May 18, 2026
5b925af
Update math_7.json
owjs3901 May 18, 2026
f95c57a
Update math_8.json
owjs3901 May 18, 2026
3f757f0
Update math_8.json
owjs3901 May 18, 2026
d410774
Update math_9.json
owjs3901 May 18, 2026
f996f73
Update math_10.json
owjs3901 May 18, 2026
34a8ddc
Update math_11.json
owjs3901 May 18, 2026
5ce5324
Update math 12
owjs3901 May 18, 2026
d79712e
Update math_13.json
owjs3901 May 18, 2026
e248eb3
Update math_14.json
owjs3901 May 18, 2026
338017d
Update math_15.json
owjs3901 May 18, 2026
e83d112
Update math_16.json
owjs3901 May 18, 2026
947a93c
Update math_16.json
owjs3901 May 18, 2026
c86eb43
Update math_17.json
owjs3901 May 18, 2026
1d5f179
Update math_18.json
owjs3901 May 18, 2026
a6cb4f0
Update math_18.json
owjs3901 May 18, 2026
af1f0a3
Update math_19.json
owjs3901 May 18, 2026
9e4d109
Update math_20.json
owjs3901 May 18, 2026
6f18b4f
Update math_20.json
owjs3901 May 18, 2026
f537607
Update math_21.json
owjs3901 May 18, 2026
6a98404
Update math_22.json
owjs3901 May 18, 2026
f5ed518
Update math_23.json
owjs3901 May 18, 2026
ec15d37
Update math_24.json
owjs3901 May 18, 2026
cd2fb04
Update math_25.json
owjs3901 May 18, 2026
8de0479
Update math_26.json
owjs3901 May 18, 2026
f662d82
Update math_27.json
owjs3901 May 18, 2026
2236598
Update math_28.json
owjs3901 May 18, 2026
3e5fe5b
Update math_29.json
owjs3901 May 18, 2026
dbc4c23
Update math_30.json
owjs3901 May 18, 2026
30c6bf5
Update math_31.json
owjs3901 May 18, 2026
8cdeead
Update math_32.json
owjs3901 May 18, 2026
3dc42d6
Update math_33.json
owjs3901 May 18, 2026
7cca459
Update math_34.json
owjs3901 May 18, 2026
7ec0dfc
Update math_35.json
owjs3901 May 18, 2026
3bb4b8f
Update math_36.json
owjs3901 May 18, 2026
ea215b2
Update math_37.json
owjs3901 May 19, 2026
63d650d
Update math_38.json
owjs3901 May 19, 2026
d13c9aa
Update math_39.json
owjs3901 May 19, 2026
f78a518
Update math_40.json
owjs3901 May 19, 2026
1a66d66
Update math_41.json
owjs3901 May 19, 2026
77fee6a
Update math_42.json
owjs3901 May 19, 2026
bd0404d
Update math_43.json
owjs3901 May 19, 2026
afb96d9
Update math_44.json
owjs3901 May 19, 2026
1d7088b
Update math_45.json
owjs3901 May 19, 2026
a0f5d05
Update math_46.json
owjs3901 May 19, 2026
be52e24
Create math_46_b1.json
owjs3901 May 19, 2026
2e36150
Update math_47.json
owjs3901 May 19, 2026
9743914
Update math_48.json
owjs3901 May 19, 2026
bfea829
Update math_49.json
owjs3901 May 19, 2026
75a45ff
Update math_49.json
owjs3901 May 19, 2026
f74453f
Update math_50.json
owjs3901 May 19, 2026
deaa0f4
Update math_51.json
owjs3901 May 19, 2026
14aee4a
Update math_52.json
owjs3901 May 19, 2026
cccca12
Update math_53.json
owjs3901 May 19, 2026
07dc958
Update math_54.json
owjs3901 May 19, 2026
f50badb
Update math_55.json
owjs3901 May 19, 2026
eadaa27
Update math_56.json
owjs3901 May 19, 2026
b4c6f45
Update math_57.json
owjs3901 May 19, 2026
267b779
Update math_58.json
owjs3901 May 19, 2026
69dfa06
Update math_59.json
owjs3901 May 19, 2026
eedd2d5
Update math_60.json
owjs3901 May 19, 2026
7973eba
Update math_61.json
owjs3901 May 19, 2026
5cd2124
Update math_62.json
owjs3901 May 19, 2026
041d053
Update math_63.json
owjs3901 May 19, 2026
9d5a90d
Update math_64.json
owjs3901 May 19, 2026
a9b3829
Update math_65.json
owjs3901 May 19, 2026
28da520
Update math_66.json
owjs3901 May 19, 2026
357335e
Update testcase
owjs3901 May 19, 2026
02c0d4d
Update .gitignore
owjs3901 May 19, 2026
fa49277
Update logic
owjs3901 May 20, 2026
38d75ad
Add trace
owjs3901 May 20, 2026
acbee0a
Update testcase
owjs3901 May 20, 2026
b169ee7
Update testcase
owjs3901 May 20, 2026
92ed36e
Update rule_2.json
owjs3901 May 20, 2026
755bcb1
Update rule_3.json
owjs3901 May 20, 2026
9ca3785
Update rule_6.json
owjs3901 May 20, 2026
ead2bbf
Update rule_8.json
owjs3901 May 20, 2026
239e004
Update rule_9.json
owjs3901 May 20, 2026
3f7b55d
Update rule_10.json
owjs3901 May 20, 2026
f83e491
Update rule_11_b1.json
owjs3901 May 20, 2026
e2a0be7
Update 12
owjs3901 May 20, 2026
fa30706
Update rule_13.json
owjs3901 May 20, 2026
f633b1a
Update rule 14
owjs3901 May 20, 2026
80ef42d
Update rule_14_b1.json
owjs3901 May 20, 2026
811af67
Update rule_15.json
owjs3901 May 20, 2026
b5890c5
Update rule_16.json
owjs3901 May 20, 2026
a799044
Update rule_17.json
owjs3901 May 20, 2026
9de8a59
Update rule_18.json
owjs3901 May 20, 2026
a7bb537
Update rule_18_b1.json
owjs3901 May 20, 2026
69c99ad
Update math_66.json
owjs3901 May 20, 2026
aa20a96
Update rule_28.json
owjs3901 May 20, 2026
44b0851
Update rule_29.json
owjs3901 May 20, 2026
e12df01
Fix rule_33 internal values and remove limitation
owjs3901 May 20, 2026
0690189
Update rule_34.json
owjs3901 May 20, 2026
99cc801
Update rule_35.json
owjs3901 May 20, 2026
d44e0b6
Update rule_42.json
owjs3901 May 20, 2026
0c2b624
Update rule_44.json
owjs3901 May 20, 2026
6069b4e
Update rule_44_b1.json
owjs3901 May 20, 2026
daa2638
Update rule_46.json
owjs3901 May 20, 2026
98f29f7
Update rule_47.json
owjs3901 May 20, 2026
0f222cb
Update rule_48.json
owjs3901 May 20, 2026
98f7751
Update rule_49.json
owjs3901 May 20, 2026
11c7c4a
Update rule_51.json
owjs3901 May 20, 2026
6a931af
Update rule_51_b2.json
owjs3901 May 20, 2026
03e7589
Update rule_52.json
owjs3901 May 20, 2026
34e348d
Update rule_53_b1.json
owjs3901 May 20, 2026
07a4f4e
Update rule_54.json
owjs3901 May 20, 2026
02a37da
Update rule_59.json
owjs3901 May 20, 2026
63e55ce
Add testcase
owjs3901 May 20, 2026
7cf8f4c
Update rule_63.json
owjs3901 May 20, 2026
5e3ea04
Update
owjs3901 May 20, 2026
8fe0aca
Fix case
owjs3901 May 20, 2026
74c29a1
Support more
owjs3901 May 20, 2026
6712602
Update rule_61.json
owjs3901 May 20, 2026
a65c71e
Fix rule 61
owjs3901 May 20, 2026
6625490
Support mark
owjs3901 May 21, 2026
5825382
Update testcase
owjs3901 May 21, 2026
19c84ae
Update en shortform
owjs3901 May 21, 2026
989cb89
Refactor
owjs3901 May 22, 2026
41c2943
Update example and bench
owjs3901 May 22, 2026
994caa5
Update world testcase
owjs3901 May 22, 2026
696789d
Update jeomsarang bench
owjs3901 May 22, 2026
7b4eb00
Update agents.md
owjs3901 May 22, 2026
9e45ec7
Update dep
owjs3901 May 22, 2026
846f6cf
Merge remote-tracking branch 'origin/main' into update-coverage
owjs3901 May 22, 2026
ee044b0
Fix file
owjs3901 May 22, 2026
4cbf5b2
Fix landing
owjs3901 May 22, 2026
0513853
Update fmt
owjs3901 May 22, 2026
f92c140
Update package
owjs3901 May 22, 2026
cbc40e0
Add testcase
owjs3901 May 22, 2026
ae0c2b0
Fix format
owjs3901 May 22, 2026
0026c1e
Split code
owjs3901 May 22, 2026
5c0d2b0
Add testcase
owjs3901 May 22, 2026
8142bee
Update lib
owjs3901 May 22, 2026
fa0e755
Add testcase
owjs3901 May 22, 2026
22cd406
Add testcase
owjs3901 May 22, 2026
5cec95f
Add coverage case
owjs3901 May 22, 2026
9683be0
Update testcase
owjs3901 May 23, 2026
6e54ac9
Add testcase
owjs3901 May 23, 2026
b6b2b6c
Refactor testcase
owjs3901 May 24, 2026
c0223b0
Fix CI to checkout PR head for pull_request_target
owjs3901 May 24, 2026
284ae0a
Update GitHub Actions to latest versions
owjs3901 May 24, 2026
b970327
ci: re-trigger CI with updated workflow from main
owjs3901 May 24, 2026
0c52073
Sync astral-sh/setup-uv@v8.1.0 from main
owjs3901 May 24, 2026
ef80a5e
Fix oxlint: sort props alphabetically in LatexText
owjs3901 May 24, 2026
52e56ea
Fix clippy: remove unneeded return in build.rs
owjs3901 May 24, 2026
0f8928b
Fix cargo fmt: wrap long line in build.rs
owjs3901 May 24, 2026
5c35b0c
Fix snapshot filename case: detect_relation_aRb -> arb (Linux case-se…
owjs3901 May 24, 2026
77ebf04
ci: re-trigger after workflow shell fix
owjs3901 May 24, 2026
fc76f0b
Reach 100% coverage on tarpaulin 0.35.4: remove counterproductive cfg…
owjs3901 May 24, 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
  •  
  •  
  •  
115 changes: 115 additions & 0 deletions .github/workflows/mutants.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
name: Mutation Testing

# cargo-mutants runs on a small set of high-value files. A full sweep over
# the whole crate takes hours, so this CI lane targets the files we have
# explicitly hardened with assertion-level tests. Adding more files here is
# safe but increases runtime — keep the matrix lean and shard if needed.
#
# The job is INFORMATIONAL by default (continue-on-error: true) so a missed
# mutant does not block merges. Once the missed count is consistently zero,
# flip continue-on-error to false to make the gate strict.

on:
pull_request:
branches:
- main
paths:
- '.github/workflows/mutants.yml'
- 'mutants.toml'
- 'Cargo.lock'
- 'Cargo.toml'
- 'libs/braillify/src/rules/math/encoder.rs'
- 'libs/braillify/src/rules/math/parser/**'
- 'libs/braillify/src/rules/token_rules/math_expression/**'
workflow_dispatch:

permissions:
contents: read
pull-requests: write

concurrency:
group: mutants-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
mutants:
name: cargo-mutants (${{ matrix.shard.label }})
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
shard:
- label: encoder
file: libs/braillify/src/rules/math/encoder.rs
- label: parser
file: libs/braillify/src/rules/math/parser/parse.rs
- label: apply
file: libs/braillify/src/rules/token_rules/math_expression/apply.rs

steps:
- uses: actions/checkout@v6

- name: Setup Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable

- name: Cache cargo-mutants binary
uses: actions/cache@v5
with:
path: ~/.cargo/bin/cargo-mutants
key: cargo-mutants-bin-v27-${{ runner.os }}

- name: Install cargo-mutants
run: |
if ! command -v cargo-mutants >/dev/null; then
cargo install cargo-mutants --locked --version ^27
fi

- name: Run cargo-mutants on ${{ matrix.shard.label }}
id: mutants
continue-on-error: true
run: |
mkdir -p target/mutants-${{ matrix.shard.label }}
cargo mutants \
-p braillify \
--file "${{ matrix.shard.file }}" \
--no-shuffle \
--output "target/mutants-${{ matrix.shard.label }}" \
--colors never

- name: Summarize outcomes
if: always()
shell: bash
run: |
set -e
report_dir="target/mutants-${{ matrix.shard.label }}/mutants.out"
if [ ! -f "$report_dir/outcomes.json" ]; then
echo "No outcomes.json — cargo-mutants likely failed before testing"
exit 1
fi
python3 - <<'PY'
import json, pathlib, sys
path = pathlib.Path("target/mutants-${{ matrix.shard.label }}/mutants.out/outcomes.json")
data = json.loads(path.read_text())
counts = {}
for o in data.get("outcomes", []):
counts[o["summary"]] = counts.get(o["summary"], 0) + 1
print("Mutation outcomes:")
for k, v in sorted(counts.items()):
print(f" {k}: {v}")
missed = counts.get("MissedMutant", 0)
# Print one-line summary for the CI log scraper.
total = sum(counts.values())
print(f"::notice title=mutants/${{ matrix.shard.label }}::missed={missed} total={total} counts={counts}")
# Currently soft-gate: don't fail on missed. To make strict, exit non-zero here.
PY

- name: Upload mutants report
if: always()
uses: actions/upload-artifact@v7
with:
name: mutants-${{ matrix.shard.label }}
path: target/mutants-${{ matrix.shard.label }}/mutants.out/
retention-days: 7
42 changes: 21 additions & 21 deletions .github/workflows/publish-pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,19 @@ jobs:
cancel-in-progress: false
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up Python 3.13
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: 3.13
- name: Install uv
uses: astral-sh/setup-uv@v5
uses: astral-sh/setup-uv@v8.1.0
- name: Install maturin
run: uv pip install maturin --system
- uses: actions-rust-lang/setup-rust-toolchain@v1
- name: Cargo tarpaulin
run: cargo install cargo-tarpaulin
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v6
name: Install pnpm
with:
run_install: false
Expand All @@ -36,7 +36,7 @@ jobs:
with:
version: 'latest'
- name: Install Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
registry-url: "https://registry.npmjs.org"
node-version: 22
Expand Down Expand Up @@ -83,8 +83,8 @@ jobs:
- runner: ubuntu-22.04
target: ppc64le
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: 3.x
- name: Build wheels
Expand All @@ -96,7 +96,7 @@ jobs:
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
manylinux: auto
- name: Upload wheels
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: wheels-linux-${{ matrix.platform.target }}
path: packages/python/dist
Expand All @@ -115,8 +115,8 @@ jobs:
- runner: ubuntu-22.04
target: armv7
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: 3.x
- name: Build wheels
Expand All @@ -128,7 +128,7 @@ jobs:
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
manylinux: musllinux_1_2
- name: Upload wheels
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: wheels-musllinux-${{ matrix.platform.target }}
path: packages/python/dist
Expand All @@ -143,8 +143,8 @@ jobs:
- runner: windows-latest
target: x86
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: 3.x
architecture: ${{ matrix.platform.target }}
Expand All @@ -156,7 +156,7 @@ jobs:
working-directory: packages/python
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
- name: Upload wheels
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: wheels-windows-${{ matrix.platform.target }}
path: packages/python/dist
Expand All @@ -171,8 +171,8 @@ jobs:
- runner: macos-14
target: aarch64
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: 3.x
- name: Build wheels
Expand All @@ -183,23 +183,23 @@ jobs:
working-directory: packages/python
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
- name: Upload wheels
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: wheels-macos-${{ matrix.platform.target }}
path: packages/python/dist

sdist:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Build sdist
uses: PyO3/maturin-action@v1
with:
command: sdist
args: --out dist
working-directory: packages/python
- name: Upload sdist
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: wheels-sdist
path: packages/python/dist
Expand All @@ -217,9 +217,9 @@ jobs:
# Used to generate artifact attestation
attestations: write
steps:
- uses: actions/download-artifact@v4
- uses: actions/download-artifact@v8
- name: Generate artifact attestation
uses: actions/attest-build-provenance@v1
uses: actions/attest-build-provenance@v4
with:
subject-path: 'wheels-*/*'
- name: Publish to PyPI
Expand Down
Loading
Loading