Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
66 changes: 66 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: CI

on:
push:
branches: ["main"]
pull_request:
workflow_dispatch:

env:
CARGO_TERM_COLOR: always
RUSTFLAGS: "-D warnings"

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

jobs:
test:
name: test (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- uses: actions/checkout@v4

- uses: dtolnay/rust-toolchain@stable

- uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.os }}

- name: Build
run: cargo build --workspace --all-targets

- name: Test
run: cargo test --workspace

# The corpus is generated, not hand-committed: if the generator and the
# committed binaries ever disagree, the goldens are testing fiction.
- name: Corpus is up to date
run: python3 corpus/generate.py --check

lint:
name: fmt + clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy

- uses: Swatinem/rust-cache@v2

- name: Format
run: cargo fmt --all -- --check

- name: Clippy
run: cargo clippy --workspace --all-targets -- -D warnings

- name: Docs
run: cargo doc --workspace --no-deps
env:
RUSTDOCFLAGS: "-D warnings"
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/target
**/*.rs.bk
*.pdb
__pycache__/
19 changes: 17 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,12 @@ Office (`.doc`, `.docx`, `.xls`, `.xlsx`) y LibreOffice (`.odt`, `.ods`) a un Ma
extendido llamado **DocMark**, y de vuelta, con pérdida mínima de formato. Se invoca como
CLI o como servidor **MCP por stdio**.

**Estado actual**: solo existe documentación de diseño. La implementación comienza en la
Fase 0 del plan. No hay todavía `Cargo.toml` en la raíz.
**Estado actual**: **Fases 0 y 1 cerradas**. Existe el workspace con los siete crates, el IR
(`docsai-model`), el lector `.docx` (`docsai-office`), el serializador DocMark
(`docsai-docmark`), la orquestación (`docsai-convert`) y la CLI con `convert` y `formats`.
`docsai-odf` y `docsai-mcp` son esqueletos que sólo fijan las reglas de dependencia.

Lo siguiente es la **Fase 2**: parser DocMark, writer `.docx` y el comando `roundtrip`.

## 2. Documentos que debes leer antes de implementar

Expand All @@ -26,6 +30,10 @@ Orden de lectura obligatorio:
4. `docs/analisis-tecnico.md` — por qué se eligió cada librería. No sustituyas una
dependencia clave (calamine, docx-rs, rmcp, comrak…) sin dejar constancia escrita del
motivo en ese documento.
5. `kb/` — base de conocimiento de lo **ya construido**: resumen de las fases cerradas,
estructura real del código, decisiones técnicas con su motivo, y las consideraciones para
la fase que vayas a abordar. Empieza por `kb/README.md`. Si tu cambio altera la estructura
o toma una decisión técnica no obvia, actualízala en el mismo PR.

## 3. Estructura del repositorio (objetivo)

Expand Down Expand Up @@ -63,6 +71,13 @@ cargo test --workspace # unit + integración + round-trip
cargo clippy --workspace --all-targets -- -D warnings
cargo fmt --all -- --check
cargo run -p docsai-cli -- convert corpus/docx/basic-styles.docx -o /tmp/out.dmk.md
python3 corpus/generate.py --check # el corpus es generado; CI comprueba que está al día
```

Actualizar un golden es un acto deliberado, y su diff se revisa a mano:

```bash
DOCSAI_UPDATE_GOLDENS=1 cargo test -p docsai-convert --test goldens
```

CI (GitHub Actions) ejecuta la matriz `{ubuntu-latest, windows-latest, macos-latest}` ×
Expand Down
Loading
Loading