Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
29cd8da
chore: add SBC LaTeX template for SBSeg 2026 paper
GuilhermeBn198 Jun 21, 2026
f4d96c0
feat(paper): add article structure with authors, sections, and Mermai…
GuilhermeBn198 Jun 21, 2026
4b13916
docs: add BibTeX references for Map2Check paper (2018, 2020, KLEE, Fu…
GuilhermeBn198 Jun 21, 2026
c3c1488
docs: add paper planning docs, outlines, Mermaid sources, and OpenCod…
GuilhermeBn198 Jun 21, 2026
c8690f8
feat(paper): add LaTeX macros for numerical data and replace hardcode…
GuilhermeBn198 Jun 21, 2026
fe293e5
feat(paper): write Section 1 — Introdução e Motivação
GuilhermeBn198 Jun 21, 2026
9910553
feat(paper): write Section 2 — História e Evolução
GuilhermeBn198 Jun 21, 2026
4be22ee
feat(paper): write Section 3 — Arquitetura e Funcionalidades
GuilhermeBn198 Jun 21, 2026
e0e15df
feat(paper): write Section 4 — Features de Cibersegurança
GuilhermeBn198 Jun 21, 2026
d47ca88
feat(paper): write Sections 5-6 — Demonstração, Avaliação e Conclusão
GuilhermeBn198 Jun 21, 2026
672289c
fix(paper): remove remaining PARÁGRAFO placeholders
GuilhermeBn198 Jun 21, 2026
d748344
docs: update PLAN.md with Iteration 1 progress
GuilhermeBn198 Jun 21, 2026
e8bea03
feat(paper): add figures for timeline, pipeline, passes, test compari…
GuilhermeBn198 Jun 21, 2026
f730f46
feat(paper): add figures for timeline, pipeline, passes, test compari…
GuilhermeBn198 Jun 21, 2026
ceb9f79
fix(paper): remove duplicate tables/figures, fix verbatim macro, corr…
GuilhermeBn198 Jun 21, 2026
845d1a0
feat(wasm): add WasmLifter, update WABT to 1.0.41, wasi-sdk to 33.0
GuilhermeBn198 Jun 27, 2026
48c8bea
feat(skills): add book-to-skill + map2check-sbseg2026 skill, merge sb…
GuilhermeBn198 Jul 3, 2026
a113b25
fix(paper): restructure per advisor feedback — 18 points
GuilhermeBn198 Jul 3, 2026
f8668a2
feat(skill): update map2check-sbseg2026 via book-to-skill Mode 4
GuilhermeBn198 Jul 3, 2026
ebee203
feat(wasm): implement WASM pipeline — 1.7.3/1.7.4/1.7.5 complete
GuilhermeBn198 Jul 3, 2026
ff837b2
chore: adjust linting of text of the article
GuilhermeBn198 Jul 4, 2026
e112e83
docs: document WASM linear memory vs MemoryTrackPass architectural gap
GuilhermeBn198 Jul 4, 2026
b76d260
docs: correct WASM strategy to language-agnostic approach
GuilhermeBn198 Jul 4, 2026
53a3332
feat(wasm): add Juliet WASM validation and ControlFlow TestComp results
GuilhermeBn198 Jul 4, 2026
956e122
feat(wasm): validate pipeline with 15 real Juliet cases, fix MemoryTr…
GuilhermeBn198 Jul 4, 2026
524463b
feat(wasm): per-allocation bounds checking for WASM heap overflow
GuilhermeBn198 Jul 4, 2026
e527bfc
feat(wasm): add integration tests, fix article prose
GuilhermeBn198 Jul 4, 2026
f5e5776
fix(ci): add WABT to CI, make include paths configurable
GuilhermeBn198 Jul 4, 2026
fa95e71
fix(ci): add sudo to mkdir/ln, add WABT to static-analysis job
GuilhermeBn198 Jul 4, 2026
cc9d6b1
fix(ci): remove fragile symlinks, use /usr/include as wasm-rt fallback
GuilhermeBn198 Jul 4, 2026
cf7196b
fix(ci): pass WABT_INCLUDE_DIR via cmake -D flag
GuilhermeBn198 Jul 4, 2026
92e0bb0
fix(ci): add WABT diagnostics to pinpoint wasm-rt.h issue
GuilhermeBn198 Jul 4, 2026
4d8f6ca
fix(ci): make WasmRuntimeStubs optional - skip if wasm-rt.h not found
GuilhermeBn198 Jul 4, 2026
8a58f54
fix(ci): remove ALL from WasmRuntimeStubs target - skip in CI
GuilhermeBn198 Jul 4, 2026
3bcec5e
fix(ci): remove NO_DEFAULT_PATH from find_path for wasm-rt.h
GuilhermeBn198 Jul 4, 2026
604323a
docs: update skill, PLAN, and checkpoint files for Sprint 2 milestone
GuilhermeBn198 Jul 4, 2026
9e35931
feat(wasm): validate pipeline with Docker E2E CI and 15 Juliet cases
GuilhermeBn198 Jul 4, 2026
57aede2
docs(paper): update WASM section with 15/15 Juliet results, add fig6 …
GuilhermeBn198 Jul 5, 2026
c987766
chore: remove redundant wasm_results_v2.csv (unified into wasm_result…
GuilhermeBn198 Jul 5, 2026
53e0e8c
docs(paper): add TikZ figures for timeline and pipeline, update img R…
GuilhermeBn198 Jul 5, 2026
7191d70
docs(skill): update figure inventory and backlog #8 status
GuilhermeBn198 Jul 5, 2026
53de245
fix(ci): replace apt wabt 1.0.27 with WABT 1.0.41 from GitHub releases
GuilhermeBn198 Jul 5, 2026
c06b07d
fix(ci): run WASM integration test container as root for /opt write a…
GuilhermeBn198 Jul 5, 2026
39e0f85
fix(ci): run e2e-wasm build step as root in Docker container
GuilhermeBn198 Jul 5, 2026
7e93773
fix(paper): add align=center to fig1 timeline rest style to allow lin…
GuilhermeBn198 Jul 5, 2026
ba17397
docs: replace KLEE 3.x with exact version 3.1 across all files
GuilhermeBn198 Jul 6, 2026
9b52891
Merge branch 'develop' into feat-wasm-verification
hbgit Jul 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 102 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,18 @@ jobs:
with:
submodules: recursive

- name: Install LLVM 16
- name: Install LLVM 16 + WABT
run: |
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main" | sudo tee /etc/apt/sources.list.d/llvm-16.list
sudo apt-get update
sudo apt-get install -y \
clang-16 llvm-16 llvm-16-dev libclang-16-dev \
cmake ninja-build libboost-all-dev zlib1g-dev
# WABT 1.0.41 (apt tem 1.0.27, API incompatível com WasmRuntimeStubs.c)
wget -q "https://github.com/WebAssembly/wabt/releases/download/1.0.41/wabt-1.0.41-linux-x64.tar.gz" -O /tmp/wabt.tar.gz
sudo tar xzf /tmp/wabt.tar.gz -C /opt
sudo ln -sf /opt/wabt-1.0.41/bin/wasm2c /usr/local/bin/wasm2c

- name: Configure CMake
run: |
Expand Down Expand Up @@ -70,7 +74,7 @@ jobs:
with:
submodules: recursive

- name: Install LLVM 16 + cppcheck
- name: Install LLVM 16 + cppcheck + WABT
run: |
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main" | sudo tee /etc/apt/sources.list.d/llvm-16.list
Expand All @@ -79,6 +83,10 @@ jobs:
clang-16 clang-tidy-16 llvm-16 llvm-16-dev libclang-16-dev \
cmake ninja-build libboost-all-dev zlib1g-dev \
cppcheck
# WABT 1.0.41 (apt tem 1.0.27, API incompatível com WasmRuntimeStubs.c)
wget -q "https://github.com/WebAssembly/wabt/releases/download/1.0.41/wabt-1.0.41-linux-x64.tar.gz" -O /tmp/wabt.tar.gz
sudo tar xzf /tmp/wabt.tar.gz -C /opt
sudo ln -sf /opt/wabt-1.0.41/bin/wasm2c /usr/local/bin/wasm2c

- name: Generate compile_commands.json
run: |
Expand Down Expand Up @@ -152,14 +160,18 @@ jobs:
with:
submodules: recursive

- name: Install LLVM 16
- name: Install LLVM 16 + WABT
run: |
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main" | sudo tee /etc/apt/sources.list.d/llvm-16.list
sudo apt-get update
sudo apt-get install -y \
clang-16 llvm-16 llvm-16-dev libclang-16-dev \
cmake ninja-build libboost-all-dev zlib1g-dev
# WABT 1.0.41 (apt tem 1.0.27, API incompatível com WasmRuntimeStubs.c)
wget -q "https://github.com/WebAssembly/wabt/releases/download/1.0.41/wabt-1.0.41-linux-x64.tar.gz" -O /tmp/wabt.tar.gz
sudo tar xzf /tmp/wabt.tar.gz -C /opt
sudo ln -sf /opt/wabt-1.0.41/bin/wasm2c /usr/local/bin/wasm2c

- name: Configure CMake with Sanitizers
run: |
Expand Down Expand Up @@ -189,3 +201,90 @@ jobs:
# Known: BTree.c:276 off-by-one (tracked for fix in Phase 2)
UBSAN_OPTIONS: "print_stacktrace=1:halt_on_error=0"
run: cd build && ctest --output-on-failure

# ===========================================================
# Job 4: WASM End-to-End Tests (Docker)
# ===========================================================
# Runs the full pipeline inside the published map2check-dev image,
# which already contains LLVM 16 + KLEE 3.1 + WABT + wasi-sdk.
# This catches regressions that unit tests miss (KLEE flags,
# isRequired, target function, wasm-rt linking, etc.).
e2e-wasm:
name: WASM E2E Tests (Docker)
runs-on: ubuntu-22.04
timeout-minutes: 45
needs: [build-and-test]

steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive

- name: Free disk space
run: |
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc
sudo docker image prune -a -f || true

- name: Pull map2check-dev image
run: docker pull ghcr.io/hbgit/map2check-dev:latest

- name: Build + install Map2Check in container
run: |
docker run --rm \
-u root \
-v "${{ github.workspace }}:/workspace" \
-w /workspace \
-e CC=/usr/bin/clang-16 \
-e CXX=/usr/bin/clang++-16 \
ghcr.io/hbgit/map2check-dev:latest bash -c '
# Install WABT + wasi-sdk (published image lacks them)
if [ ! -f /opt/wabt-1.0.41/include/wasm-rt.h ]; then
wget -q "https://github.com/WebAssembly/wabt/releases/download/1.0.41/wabt-1.0.41-linux-x64.tar.gz" -O /tmp/wabt.tar.gz
tar xzf /tmp/wabt.tar.gz -C /opt && rm /tmp/wabt.tar.gz
ln -sf /opt/wabt-1.0.41/bin/wasm2c /usr/local/bin/wasm2c
fi
if [ ! -d /opt/wasi-sdk-33.0-x86_64-linux ]; then
wget -q "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-33/wasi-sdk-33.0-x86_64-linux.tar.gz" -O /tmp/wasi-sdk.tar.gz
tar xzf /tmp/wasi-sdk.tar.gz -C /opt && rm /tmp/wasi-sdk.tar.gz
fi

# Build and install to a release-style layout
rm -rf build_e2e install_e2e
mkdir -p build_e2e && cd build_e2e
cmake .. -G Ninja \
-DLLVM_DIR=/usr/lib/llvm-16/lib/cmake/llvm \
-DENABLE_TEST=ON \
-DMAP2CHECK_DYNAMIC_LINK=ON \
-DCMAKE_INSTALL_PREFIX=/workspace/install_e2e
ninja
ninja install

# Symlink KLEE runtime + compiler-rt files missing from install rules
mkdir -p /workspace/install_e2e/lib/klee
ln -sf /opt/klee/lib/klee/runtime /workspace/install_e2e/lib/klee/runtime
ln -sf /usr/lib/llvm-16/lib/clang /workspace/install_e2e/lib/clang
'

- name: Run WASM integration tests
run: |
docker run --rm \
-u root \
-v "${{ github.workspace }}:/workspace" \
-w /workspace \
-e MAP2CHECK_PATH=/workspace/install_e2e \
-e WASI_SDK_PATH=/opt/wasi-sdk-33.0-x86_64-linux \
ghcr.io/hbgit/map2check-dev:latest bash -c '
# Ensure WABT + wasi-sdk are available in this fresh container
if [ ! -f /opt/wabt-1.0.41/include/wasm-rt.h ]; then
wget -q "https://github.com/WebAssembly/wabt/releases/download/1.0.41/wabt-1.0.41-linux-x64.tar.gz" -O /tmp/wabt.tar.gz
tar xzf /tmp/wabt.tar.gz -C /opt && rm /tmp/wabt.tar.gz
ln -sf /opt/wabt-1.0.41/bin/wasm2c /usr/local/bin/wasm2c
fi
if [ ! -d /opt/wasi-sdk-33.0-x86_64-linux ]; then
wget -q "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-33/wasi-sdk-33.0-x86_64-linux.tar.gz" -O /tmp/wasi-sdk.tar.gz
tar xzf /tmp/wasi-sdk.tar.gz -C /opt && rm /tmp/wasi-sdk.tar.gz
fi
bash tests/integration/test_wasm_pipeline.sh
bash tests/integration/test_wasm_entrypoint.sh
'
1 change: 1 addition & 0 deletions .opencode/skills/book-to-skill/.github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
github: [virgiliojr94]
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
name: Bug report
about: Something went wrong during extraction or skill generation
title: "[bug] "
labels: bug
---

## What happened

## What you expected

## Source document
- Format: <!-- PDF / EPUB / DOCX / … -->
- Pages / size:
- Language:
- Does `python3 scripts/extract.py --check` show the relevant extractor installed? <!-- yes/no -->

## Repro
<!-- The exact command and (if shareable) a small sample file or input -->

## Environment
- OS:
- Python version:
- book-to-skill version / commit:
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
name: Feature request
about: Suggest an improvement to extraction, generation, or the skill format
title: "[feat] "
labels: enhancement
---

## Problem
<!-- What are you trying to do that's hard or impossible today? -->

## Proposed change

## How would we know it's better?
<!-- A measurable acceptance criterion: a token delta, a test, a before/after.
Changes that add weight without a demonstrated gain are unlikely to land. -->

## Alternatives considered
70 changes: 70 additions & 0 deletions .opencode/skills/book-to-skill/.github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
<!--
PR title: use Conventional Commits, e.g. `fix(extractor): scan full text`, `feat(cli): ...`.
Fill EVERY section marked (Required). Sections marked (Optional) can be deleted if not applicable.
A PR that leaves Required sections empty or unchecked will be asked to complete them before review.
-->

## Summary (Required)
<!-- In 1-3 sentences and plain language: what does this PR do? Someone skimming
should understand the change without reading the diff. -->


## Type of change (Required)
<!-- Mark all that apply with [x]. -->
- [ ] 🐛 Bug fix (non-breaking change that fixes an issue)
- [ ] ✨ Feature (non-breaking change that adds capability)
- [ ] ⚡ Performance (faster / cheaper, no behavior change)
- [ ] ♻️ Refactor (no behavior change)
- [ ] 📝 Docs only
- [ ] 🔒 Security
- [ ] 🧹 Chore / CI / tooling
- [ ] 💥 Breaking change (changes existing behavior or a public interface)

## What it does (Required)
<!-- Be specific. Use the lines that apply, delete the rest. -->
- **Fixes:** <!-- the exact wrong behavior, and the root cause -->
- **Improves:** <!-- what gets better, and by how much (numbers, not adjectives) -->
- **Adds:** <!-- the new capability and who it is for -->

## Motivation & context (Required)
<!-- Why is this needed? What problem or use case drives it? -->
Closes #<!-- issue number, or "n/a" with a one-line reason if there is no issue -->

## How it works (Required for anything non-trivial)
<!-- The approach: key decision(s), why this way, any alternative you rejected.
For a one-line fix, "see diff" is fine. -->


## Evidence (Required)
<!-- Proof, not claims. This project's rule is "measure, don't assert". -->
- **Tests:** <!-- which tests you added/changed and what they assert -->
- **Before / after:** <!-- terminal output, repro of the bug, or measured numbers.
For performance: a `tools/discovery_tax.py` number or a timed before/after.
For a bug fix: the failing input and the now-correct output. -->

```
<!-- paste the before/after terminal output here -->
```

## Screenshots / output (Required if behavior or output changes — Optional for pure internal refactor)
<!-- Drag in an image: the bug vs the fix, the generated skill, the dashboard, etc.
A picture of broken-vs-fixed is the fastest way to get a PR reviewed.
Delete this section only for invisible internals. -->


## Checklist (Required — all must be checked)
- [ ] One focused change (one feature/fix per PR; not a stack of unrelated work)
- [ ] Branch is rebased on the latest `master` and has no merge conflicts
- [ ] Tests added/updated for behavior changes
- [ ] `pytest -q` is green on a clean checkout
- [ ] `ruff check .` is clean
- [ ] `python3 tools/validate_skill.py SKILL.md` passes (if `SKILL.md` changed)
- [ ] `CHANGELOG.md` updated under `## [Unreleased]`
- [ ] No raw book text shipped; no net `SKILL.md` bloat without justification

## Breaking changes & back-compat (Optional)
<!-- What breaks, who is affected, and the migration path. Delete if none. -->

## Notes for reviewers (Optional)
<!-- Anything that helps review: areas you are unsure about, follow-ups you left
out on purpose, things explicitly out of scope. -->
25 changes: 25 additions & 0 deletions .opencode/skills/book-to-skill/.github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
version: 2
updates:
# Keep GitHub Actions fresh (and enables pinning actions to SHAs later).
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: weekly
commit-message:
prefix: ci
# One PR per week with all action bumps grouped, instead of one PR per action.
groups:
github-actions:
patterns: ["*"]

# Python dependencies (the pyproject extras: pdf/epub/docx/rtf/technical).
# Surfaces security alerts and version bumps for the optional extractors.
- package-ecosystem: pip
directory: "/"
schedule:
interval: weekly
commit-message:
prefix: deps
groups:
python:
patterns: ["*"]
Loading
Loading