fullbleed 2.2.4__tar.gz → 2.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {fullbleed-2.2.4 → fullbleed-2.3.0}/Cargo.lock +1 -1
- {fullbleed-2.2.4 → fullbleed-2.3.0}/Cargo.toml +1 -1
- fullbleed-2.2.4/README.md → fullbleed-2.3.0/PKG-INFO +102 -14
- fullbleed-2.2.4/PKG-INFO → fullbleed-2.3.0/README.md +59 -51
- fullbleed-2.3.0/fullbleed-agent-contract.json +6094 -0
- fullbleed-2.3.0/llms.txt +66 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/pyproject.toml +36 -3
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/_abi.py +37 -4
- fullbleed-2.3.0/python/fullbleed_cli/agent.py +161 -0
- fullbleed-2.3.0/python/fullbleed_cli/agent_acceptance.py +499 -0
- fullbleed-2.3.0/python/fullbleed_cli/agent_contract.py +1101 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/cli.py +474 -36
- fullbleed-2.3.0/python/fullbleed_cli/mcp.py +579 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold.py +82 -1
- fullbleed-2.3.0/python/fullbleed_cli/scaffold_templates/init/AGENTS.md +14 -0
- fullbleed-2.3.0/skills/fullbleed/SKILL.md +37 -0
- fullbleed-2.3.0/skills/fullbleed/agents/openai.yaml +4 -0
- fullbleed-2.3.0/skills/fullbleed/references/compliance.md +31 -0
- fullbleed-2.3.0/skills/fullbleed/references/selection.md +21 -0
- fullbleed-2.3.0/skills/fullbleed/references/workflows.md +66 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/flate_native.rs +34 -11
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/flowable.rs +12 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/lib.rs +177 -5
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/pdf.rs +27 -4
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/python/abi_exports.rs +34 -4
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/python.rs +5 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/style.rs +19 -1
- {fullbleed-2.2.4 → fullbleed-2.3.0}/COPYRIGHT +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/FONT_LICENSE_AUDIT.json +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/FONT_LICENSE_AUDIT.md +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/LICENSE +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/LICENSING.md +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/THIRD_PARTY_LICENSES.md +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/build.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/build_backend/fullbleed_build_backend.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/crates/fullbleed_audit_contract/Cargo.lock +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/crates/fullbleed_audit_contract/Cargo.toml +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/crates/fullbleed_audit_contract/LICENSE +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/crates/fullbleed_audit_contract/README.md +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/crates/fullbleed_audit_contract/specs/fullbleed.audit_registry.v1.yaml +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/crates/fullbleed_audit_contract/specs/section508_html_registry.v1.yaml +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/crates/fullbleed_audit_contract/specs/wcag20aa_registry.v1.yaml +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/crates/fullbleed_audit_contract/src/json.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/crates/fullbleed_audit_contract/src/lib.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/crates/fullbleed_audit_contract/src/sha256.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/docs/specs/fullbleed.a11y.verify.v1.schema.json +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/docs/specs/fullbleed.audit_registry.v1.yaml +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/docs/specs/fullbleed.pmr.v1.schema.json +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/docs/specs/section508_html_registry.v1.yaml +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/docs/specs/wcag20aa_registry.v1.yaml +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/__init__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/__main__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/accessibility/__init__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/accessibility/engine.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/accessibility/runtime.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/accessibility/types.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/audit_prototype.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/audit_section508.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/audit_wcag.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/ui/__init__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/ui/accessibility.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/ui/cav/__init__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/ui/cav/_core.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/ui/cav/agency_letter.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/ui/cav/court_motion_form.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/ui/cav/declaration_form.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/ui/cav/instruction_sheet.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/ui/cav/investment_portfolio_report.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/ui/cav/marriage_record.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/ui/cav/profiles.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/ui/cav/recorded_plat.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/ui/cav/redaction_request_form.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/ui/cav/warranty_deed.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/ui/core.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/ui/primitives.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed/ui/style.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_assets/__init__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_assets/bootstrap.min.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_assets/fonts/Inter-Variable.ttf +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_assets/fonts/NotoSans-Regular.ttf +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_assets/fonts/NotoSansMath-Regular.ttf +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_assets/fonts/NotoSansSymbols-Regular.ttf +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_assets/fonts/NotoSansSymbols2-Regular.ttf +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_assets/icons/bootstrap-icons.svg +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/__init__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/__main__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/assets.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/cache.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/finalize.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/__init__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/init/.gitignore +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/init/COMPLIANCE.md +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/init/SCAFFOLDING.md +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/init/components/__init__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/init/components/body.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/init/components/fb_ui.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/init/components/footer.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/init/components/header.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/init/components/primitives.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/init/components/styles/body.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/init/components/styles/footer.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/init/components/styles/header.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/init/components/styles/primitives.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/init/report.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/init/styles/report.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/init/styles/tokens.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/accessible/README.md +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/accessible/output/.gitignore +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/accessible/output/.gitkeep +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/accessible/report.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/accessible/styles/report.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/accessible/vendor/fonts/Inter-Variable.ttf +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/invoice/output/.gitignore +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/invoice/output/.gitkeep +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/invoice/report.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/invoice/templates/invoice.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/invoice/templates/invoice.html +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/COMPLIANCE.md +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/README.md +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/SCAFFOLDING.md +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/assets/brand-mark.svg +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/assets/reference-pattern.svg +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/__init__.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/appendix.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/architecture.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/cover.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/data_pages.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/fb_ui.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/primitives.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/styles/appendix.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/styles/architecture.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/styles/cover.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/styles/data.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/styles/primitives.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/styles/visuals.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/components/visuals.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/data/reference.json +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/output/.gitignore +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/report.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/styles/report.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/reference/styles/tokens.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/statement/output/.gitignore +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/statement/output/.gitkeep +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/statement/report.py +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/statement/templates/statement.css +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/python/fullbleed_cli/scaffold_templates/new/statement/templates/statement.html +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/assets.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/base64.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/canvas.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/css_native.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/css_queries.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/debug.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/doc_context.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/doc_template.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/error.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/finalize.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/font.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/font_subset.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/frame.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/glyph_report.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/html.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/html_dom.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/html_entities.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/html_entities_0.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/html_entities_1.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/html_entities_2.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/html_entities_3.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/html_entities_4.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/html_entities_5.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/image_native.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/jit.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/jpeg_native.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/math.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/metrics.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/native_shape.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/page_data.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/page_template.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/parallel.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/pdf_encodings.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/pdf_native.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/pdf_raster.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/pdfinspect.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/perf.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/plan.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/python_abi.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/raster.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/raster_native.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/sfnt.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/sfnt_cff.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/sfnt_outline.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/spill.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/svg.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/text_shape.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/types.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/unicode_data.rs +0 -0
- {fullbleed-2.2.4 → fullbleed-2.3.0}/src/xml.rs +0 -0
|
@@ -1,7 +1,52 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: fullbleed
|
|
3
|
+
Version: 2.3.0
|
|
4
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
5
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
6
|
+
Classifier: Operating System :: MacOS
|
|
7
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
8
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
9
|
+
Classifier: Programming Language :: Rust
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
17
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
18
|
+
Classifier: Topic :: Office/Business
|
|
19
|
+
Classifier: Topic :: Office/Business :: Financial
|
|
20
|
+
Classifier: Topic :: Printing
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
|
+
Classifier: Topic :: Text Processing :: Markup :: HTML
|
|
23
|
+
Provides-Extra: api
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
License-File: COPYRIGHT
|
|
26
|
+
License-File: LICENSING.md
|
|
27
|
+
License-File: THIRD_PARTY_LICENSES.md
|
|
28
|
+
License-File: FONT_LICENSE_AUDIT.md
|
|
29
|
+
License-File: FONT_LICENSE_AUDIT.json
|
|
30
|
+
Summary: Deterministic Python PDF engine for reports, invoices, accessible documents, print-ready output, and compiled VDP
|
|
31
|
+
Keywords: pdf-generation,document-generation,html-to-pdf,python-pdf-engine,deterministic-pdf,reports,invoices,statements,forms,transactional-documents,vdp,variable-data-printing,accessible-pdf,pdf-ua,pdf-a,pdf-x,ai-agents,agentic-document-generation,mcp
|
|
32
|
+
Home-Page: https://fullbleed.dev
|
|
33
|
+
License-Expression: MIT
|
|
34
|
+
Requires-Python: >=3.10
|
|
35
|
+
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
36
|
+
Project-URL: Agent-Contract, https://github.com/fullbleed-engine/fullbleed-official/blob/master/fullbleed-agent-contract.json
|
|
37
|
+
Project-URL: Agent-Skill, https://github.com/fullbleed-engine/fullbleed-official/tree/master/skills/fullbleed
|
|
38
|
+
Project-URL: Documentation, https://github.com/fullbleed-engine/fullbleed-official#readme
|
|
39
|
+
Project-URL: Homepage, https://fullbleed.dev
|
|
40
|
+
Project-URL: Issues, https://github.com/fullbleed-engine/fullbleed-official/issues
|
|
41
|
+
Project-URL: MCP, https://github.com/fullbleed-engine/fullbleed-official/tree/master/packages/fullbleed-mcp
|
|
42
|
+
Project-URL: Repository, https://github.com/fullbleed-engine/fullbleed-official
|
|
43
|
+
|
|
1
44
|
<!-- SPDX-License-Identifier: MIT -->
|
|
2
|
-
# Fullbleed
|
|
45
|
+
# Fullbleed PDF Engine
|
|
46
|
+
|
|
47
|
+
Fullbleed PDF Engine is a deterministic, self-contained document-generation runtime for Python and Rust. It turns structured data plus static HTML/CSS into reports, invoices, statements, letters, forms, certificates, accessible PDFs, print-ready documents, and high-volume compiled VDP output—without a browser or system PDF stack.
|
|
3
48
|
|
|
4
|
-
|
|
49
|
+
It is designed for human developers, automation, and AI agents alike: the installed runtime exposes its exact version, capabilities, commands, schemas, compliance profiles, examples, limitations, and tool-selection boundary as a generated machine contract.
|
|
5
50
|
|
|
6
51
|
|
|
7
52
|
License: MIT.
|
|
@@ -10,16 +55,49 @@ License: MIT.
|
|
|
10
55
|
|
|
11
56
|
- **Install:** `pip install fullbleed`
|
|
12
57
|
- **Try:** `fullbleed init . && python report.py`
|
|
58
|
+
- **Discover:** `fullbleed agent-contract --format json`
|
|
13
59
|
- **Outputs:** `output/report.pdf`
|
|
14
60
|
- Deterministic + reproducible (`--repro-record` / `--repro-check`)
|
|
15
61
|
- Agent-safe JSON schemas (`--json-only`, `--schema`)
|
|
16
62
|
|
|
17
63
|
## Positioning
|
|
18
64
|
|
|
19
|
-
Fullbleed is a deterministic, offline-first document rendering engine for transactional/VDP pipelines (not a browser, not a hosted web-to-print SaaS).
|
|
65
|
+
Fullbleed is a deterministic, offline-first document rendering engine for structured print-document and transactional/VDP pipelines (not a browser, not a hosted web-to-print SaaS, and not a general editor for arbitrary existing PDF content).
|
|
20
66
|
|
|
21
67
|
HTML and CSS are used as a familiar DSL for layout, styling, and data placement in transactional documents.
|
|
22
68
|
|
|
69
|
+
## Agent discovery and integrations
|
|
70
|
+
|
|
71
|
+
An agent does not need release-specific Fullbleed knowledge. The installed binary generates one canonical contract containing its actual version, selection boundary, capabilities, parser-derived CLI surface, result schemas, PDF profiles, examples, limitations, Agent Skill metadata, MCP tools, and acceptance tasks:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
fullbleed agent-manifest --json
|
|
75
|
+
# Equivalent canonical form:
|
|
76
|
+
fullbleed agent-contract --format json
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
The committed [`fullbleed-agent-contract.json`](fullbleed-agent-contract.json), [`cli_schema.md`](cli_schema.md), and [`llms.txt`](llms.txt) are generated from the built wheel. CI rejects version, command, schema, profile, or capability drift. Runtime introspection remains authoritative.
|
|
80
|
+
|
|
81
|
+
The first-party, versionless [`skills/fullbleed/SKILL.md`](skills/fullbleed/SKILL.md) teaches tool selection and the render/preview/diagnose/verify loop without duplicating the manual. It is bundled in the wheel and can be exported into any absent or empty agent-skill directory:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
fullbleed agent skill-path --json
|
|
85
|
+
fullbleed agent export-skill .agents/skills/fullbleed --json
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
For tool-calling agents, install the separately versioned adapter so the core package remains dependency-free:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
python -m pip install fullbleed-mcp
|
|
92
|
+
fullbleed-mcp --root .
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
The stdio server confines document paths to the selected workspace and delegates every engine operation to the installed Fullbleed runtime. It exposes semantic discovery, project creation, render/preview, inspect, verify, assets, and fixed/reflow compiled VDP tools. The dependency-free core also provides `fullbleed mcp --root .`.
|
|
96
|
+
|
|
97
|
+
Use Fullbleed when the requested artifact is a deterministic print document built from structured content. Use a browser when the requested artifact is a screenshot or interactive state of an arbitrary live website. Use a general PDF editor when existing page content itself must be rewritten.
|
|
98
|
+
|
|
99
|
+
Cold-agent testing is available through `fullbleed agent-acceptance`; compact copyable workflows live in [`examples/agent_workflows`](examples/agent_workflows), and the approach-neutral benchmark scaffold lives in [`agentdocbench`](agentdocbench).
|
|
100
|
+
|
|
23
101
|
|
|
24
102
|
This README is the canonical usage guide for:
|
|
25
103
|
|
|
@@ -99,7 +177,7 @@ size-changing records render 200x faster. See
|
|
|
99
177
|
[`docs/performance-architecture.md`](docs/performance-architecture.md) for the packed vector IR,
|
|
100
178
|
typed-binding, virtual-linker, and shader roadmap.
|
|
101
179
|
|
|
102
|
-
Fullbleed 2.2.
|
|
180
|
+
Fullbleed 2.2.5 hardens the third compiler lane introduced in 2.2.4 for
|
|
103
181
|
size-changing records: `CompiledDocument.render_pdf_reflow_bindings(...)`. It parses and recovers
|
|
104
182
|
the template DOM once and compiles encountered structural flow variants into guarded fixed-point
|
|
105
183
|
display programs. Matching records bind directly into those programs; workers execute pre-shaped
|
|
@@ -107,15 +185,17 @@ text/TJ paint slots, cached static PDF page segments, page-local Deflate, and on
|
|
|
107
185
|
Explicit trusted structural slots use `data-fb-bind-html="slot"`. A value that no compiled variant
|
|
108
186
|
can safely place runs ordinary fixed-point layout once to add another variant.
|
|
109
187
|
|
|
110
|
-
On the independent 1,000-distinct-record case study, the
|
|
111
|
-
|
|
112
|
-
pages/s
|
|
188
|
+
On the independent 1,000-distinct-record case study, the 29-sample hot direct-file median was
|
|
189
|
+
216.160 ms: **4,626 records/s and 8,096 pages/s**. The 168.995 ms best sample reached **5,917
|
|
190
|
+
records/s and 10,355 pages/s**. It produced
|
|
113
191
|
the exact 1,750-page 500/300/150/50 reflow distribution and verified all 24,900 markers. The
|
|
114
192
|
throughput-tuned 6,870,320-byte PDF was deterministic across all samples. With the compact
|
|
115
193
|
compression setting, compiled output was also byte-for-byte identical to ordinary rendering:
|
|
116
194
|
5,298,961 bytes and SHA-256 `bb3c441313a08fb00d3bd15f23a567981f3bbbd550908e3a9fe7a07ca5d7f138`.
|
|
117
|
-
This is a hot compiled-variant result, not a claim for previously unseen structure
|
|
118
|
-
|
|
195
|
+
This is a hot compiled-variant result, not a claim for previously unseen structure. The first
|
|
196
|
+
variant-discovery render measured 0.509 s (3,437 pages/s), and the fully cold job including setup,
|
|
197
|
+
bindings, compilation, discovery, and write measured 0.588 s (2,975 pages/s). The independently
|
|
198
|
+
observed hot-median speedup over the ordinary path was 43.8x.
|
|
119
199
|
|
|
120
200
|
## Install
|
|
121
201
|
|
|
@@ -128,7 +208,7 @@ python -m pip install fullbleed
|
|
|
128
208
|
From a local wheel:
|
|
129
209
|
|
|
130
210
|
```bash
|
|
131
|
-
python -m pip install C:\path\to\fullbleed-2.
|
|
211
|
+
python -m pip install C:\path\to\fullbleed-2.3.0-cp310-abi3-win_amd64.whl
|
|
132
212
|
```
|
|
133
213
|
|
|
134
214
|
From a source checkout with Rust installed, no Python build package is needed:
|
|
@@ -186,6 +266,9 @@ Scaffolded components now include `components/primitives.py` with reusable
|
|
|
186
266
|
layout/content helpers (`Stack`, `Row`, `Text`, table/list helpers, key/value rows, etc.).
|
|
187
267
|
Each scaffolded project also includes `SCAFFOLDING.md`, which should be your
|
|
188
268
|
first read before restructuring components.
|
|
269
|
+
It also includes `AGENTS.md`, which preserves the installed-runtime-first
|
|
270
|
+
document workflow across future coding-agent sessions without making other
|
|
271
|
+
document tools categorically forbidden.
|
|
189
272
|
|
|
190
273
|
Install additional project assets (defaults to `./vendor/...` in project context):
|
|
191
274
|
|
|
@@ -581,7 +664,8 @@ Machine discovery:
|
|
|
581
664
|
fullbleed capabilities --json
|
|
582
665
|
```
|
|
583
666
|
|
|
584
|
-
Inspect the `svg` object in `fullbleed.capabilities.v1` for SVG support metadata.
|
|
667
|
+
Inspect the `svg` object in `fullbleed.capabilities.v1` for SVG support metadata. The `engine`
|
|
668
|
+
object also reports compiled-document/reflow availability and supported per-call compression modes.
|
|
585
669
|
It reports the compiled `svg_raster` build feature plus a feature matrix for
|
|
586
670
|
native-vector SVG, raster-fallback-required SVG, and unsupported/known-loss SVG
|
|
587
671
|
features.
|
|
@@ -940,6 +1024,7 @@ Module exports:
|
|
|
940
1024
|
|
|
941
1025
|
- `PdfEngine`
|
|
942
1026
|
- `CompiledDocument`
|
|
1027
|
+
- `CompiledFlowCompression`
|
|
943
1028
|
- `AssetBundle`
|
|
944
1029
|
- `Asset`
|
|
945
1030
|
- `AssetKind`
|
|
@@ -988,8 +1073,8 @@ Module exports:
|
|
|
988
1073
|
| `render_pdf_batch(copies, deterministic_hash=None)` | `bytes` |
|
|
989
1074
|
| `render_pdf_bindings(bindings, deterministic_hash=None)` | `bytes` |
|
|
990
1075
|
| `render_pdf_bindings_to_file(bindings, path, deterministic_hash=None)` | `int` |
|
|
991
|
-
| `render_pdf_reflow_bindings(bindings, deterministic_hash=None)` | `bytes` |
|
|
992
|
-
| `render_pdf_reflow_bindings_to_file(bindings, path, deterministic_hash=None)` | `int` |
|
|
1076
|
+
| `render_pdf_reflow_bindings(bindings, deterministic_hash=None, *, compression="throughput")` | `bytes` |
|
|
1077
|
+
| `render_pdf_reflow_bindings_to_file(bindings, path, deterministic_hash=None, *, compression="throughput")` | `int` |
|
|
993
1078
|
|
|
994
1079
|
The compiled lane runs parsing/layout once. `render_pdf_batch` virtualizes identical untagged page
|
|
995
1080
|
content. The fixed binding methods accept columnar `dict[str, list[str]]` data and emit distinct
|
|
@@ -1001,7 +1086,10 @@ The reflow binding methods use the same exact-column contract but execute the co
|
|
|
1001
1086
|
program. `{{slot}}` values are literal text and may reshape, wrap, resize blocks, and change page
|
|
1002
1087
|
counts. Empty elements can opt into trusted generated markup with
|
|
1003
1088
|
`data-fb-bind-html="slot"`; those values replace the element's children. One DOM is reused per
|
|
1004
|
-
native worker and record output is linked in input order through a bounded queue.
|
|
1089
|
+
native worker and record output is linked in input order through a bounded queue. Structural slot
|
|
1090
|
+
values are parsed as trusted markup: sanitize untrusted input or use scalar `{{slot}}` bindings,
|
|
1091
|
+
which remain literal text. Choose `CompiledFlowCompression.Throughput` (default) or
|
|
1092
|
+
`CompiledFlowCompression.Compact` per render; modes can be mixed safely in one process. See
|
|
1005
1093
|
[`docs/python-api.md`](docs/python-api.md) for the trust boundary and current limitations.
|
|
1006
1094
|
|
|
1007
1095
|
When `deterministic_hash` is set, engine writes PDF SHA-256 to the provided file path.
|
|
@@ -1,44 +1,9 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: fullbleed
|
|
3
|
-
Version: 2.2.4
|
|
4
|
-
Classifier: Development Status :: 5 - Production/Stable
|
|
5
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
6
|
-
Classifier: Operating System :: MacOS
|
|
7
|
-
Classifier: Operating System :: Microsoft :: Windows
|
|
8
|
-
Classifier: Operating System :: POSIX :: Linux
|
|
9
|
-
Classifier: Programming Language :: Rust
|
|
10
|
-
Classifier: Programming Language :: Python :: 3
|
|
11
|
-
Classifier: Programming Language :: Python :: 3 :: Only
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.14
|
|
17
|
-
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
18
|
-
Classifier: Topic :: Printing
|
|
19
|
-
Classifier: Topic :: Text Processing :: Markup :: HTML
|
|
20
|
-
Provides-Extra: api
|
|
21
|
-
License-File: LICENSE
|
|
22
|
-
License-File: COPYRIGHT
|
|
23
|
-
License-File: LICENSING.md
|
|
24
|
-
License-File: THIRD_PARTY_LICENSES.md
|
|
25
|
-
License-File: FONT_LICENSE_AUDIT.md
|
|
26
|
-
License-File: FONT_LICENSE_AUDIT.json
|
|
27
|
-
Summary: Deterministic static HTML/CSS-to-PDF renderer built in Rust
|
|
28
|
-
Keywords: pdf,html,css,rust,static-pdf,document-generation
|
|
29
|
-
Home-Page: https://fullbleed.dev
|
|
30
|
-
License-Expression: MIT
|
|
31
|
-
Requires-Python: >=3.10
|
|
32
|
-
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
33
|
-
Project-URL: Documentation, https://github.com/fullbleed-engine/fullbleed-official#readme
|
|
34
|
-
Project-URL: Homepage, https://fullbleed.dev
|
|
35
|
-
Project-URL: Issues, https://github.com/fullbleed-engine/fullbleed-official/issues
|
|
36
|
-
Project-URL: Repository, https://github.com/fullbleed-engine/fullbleed-official
|
|
37
|
-
|
|
38
1
|
<!-- SPDX-License-Identifier: MIT -->
|
|
39
|
-
# Fullbleed
|
|
2
|
+
# Fullbleed PDF Engine
|
|
3
|
+
|
|
4
|
+
Fullbleed PDF Engine is a deterministic, self-contained document-generation runtime for Python and Rust. It turns structured data plus static HTML/CSS into reports, invoices, statements, letters, forms, certificates, accessible PDFs, print-ready documents, and high-volume compiled VDP output—without a browser or system PDF stack.
|
|
40
5
|
|
|
41
|
-
|
|
6
|
+
It is designed for human developers, automation, and AI agents alike: the installed runtime exposes its exact version, capabilities, commands, schemas, compliance profiles, examples, limitations, and tool-selection boundary as a generated machine contract.
|
|
42
7
|
|
|
43
8
|
|
|
44
9
|
License: MIT.
|
|
@@ -47,16 +12,49 @@ License: MIT.
|
|
|
47
12
|
|
|
48
13
|
- **Install:** `pip install fullbleed`
|
|
49
14
|
- **Try:** `fullbleed init . && python report.py`
|
|
15
|
+
- **Discover:** `fullbleed agent-contract --format json`
|
|
50
16
|
- **Outputs:** `output/report.pdf`
|
|
51
17
|
- Deterministic + reproducible (`--repro-record` / `--repro-check`)
|
|
52
18
|
- Agent-safe JSON schemas (`--json-only`, `--schema`)
|
|
53
19
|
|
|
54
20
|
## Positioning
|
|
55
21
|
|
|
56
|
-
Fullbleed is a deterministic, offline-first document rendering engine for transactional/VDP pipelines (not a browser, not a hosted web-to-print SaaS).
|
|
22
|
+
Fullbleed is a deterministic, offline-first document rendering engine for structured print-document and transactional/VDP pipelines (not a browser, not a hosted web-to-print SaaS, and not a general editor for arbitrary existing PDF content).
|
|
57
23
|
|
|
58
24
|
HTML and CSS are used as a familiar DSL for layout, styling, and data placement in transactional documents.
|
|
59
25
|
|
|
26
|
+
## Agent discovery and integrations
|
|
27
|
+
|
|
28
|
+
An agent does not need release-specific Fullbleed knowledge. The installed binary generates one canonical contract containing its actual version, selection boundary, capabilities, parser-derived CLI surface, result schemas, PDF profiles, examples, limitations, Agent Skill metadata, MCP tools, and acceptance tasks:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
fullbleed agent-manifest --json
|
|
32
|
+
# Equivalent canonical form:
|
|
33
|
+
fullbleed agent-contract --format json
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
The committed [`fullbleed-agent-contract.json`](fullbleed-agent-contract.json), [`cli_schema.md`](cli_schema.md), and [`llms.txt`](llms.txt) are generated from the built wheel. CI rejects version, command, schema, profile, or capability drift. Runtime introspection remains authoritative.
|
|
37
|
+
|
|
38
|
+
The first-party, versionless [`skills/fullbleed/SKILL.md`](skills/fullbleed/SKILL.md) teaches tool selection and the render/preview/diagnose/verify loop without duplicating the manual. It is bundled in the wheel and can be exported into any absent or empty agent-skill directory:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
fullbleed agent skill-path --json
|
|
42
|
+
fullbleed agent export-skill .agents/skills/fullbleed --json
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
For tool-calling agents, install the separately versioned adapter so the core package remains dependency-free:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
python -m pip install fullbleed-mcp
|
|
49
|
+
fullbleed-mcp --root .
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The stdio server confines document paths to the selected workspace and delegates every engine operation to the installed Fullbleed runtime. It exposes semantic discovery, project creation, render/preview, inspect, verify, assets, and fixed/reflow compiled VDP tools. The dependency-free core also provides `fullbleed mcp --root .`.
|
|
53
|
+
|
|
54
|
+
Use Fullbleed when the requested artifact is a deterministic print document built from structured content. Use a browser when the requested artifact is a screenshot or interactive state of an arbitrary live website. Use a general PDF editor when existing page content itself must be rewritten.
|
|
55
|
+
|
|
56
|
+
Cold-agent testing is available through `fullbleed agent-acceptance`; compact copyable workflows live in [`examples/agent_workflows`](examples/agent_workflows), and the approach-neutral benchmark scaffold lives in [`agentdocbench`](agentdocbench).
|
|
57
|
+
|
|
60
58
|
|
|
61
59
|
This README is the canonical usage guide for:
|
|
62
60
|
|
|
@@ -136,7 +134,7 @@ size-changing records render 200x faster. See
|
|
|
136
134
|
[`docs/performance-architecture.md`](docs/performance-architecture.md) for the packed vector IR,
|
|
137
135
|
typed-binding, virtual-linker, and shader roadmap.
|
|
138
136
|
|
|
139
|
-
Fullbleed 2.2.
|
|
137
|
+
Fullbleed 2.2.5 hardens the third compiler lane introduced in 2.2.4 for
|
|
140
138
|
size-changing records: `CompiledDocument.render_pdf_reflow_bindings(...)`. It parses and recovers
|
|
141
139
|
the template DOM once and compiles encountered structural flow variants into guarded fixed-point
|
|
142
140
|
display programs. Matching records bind directly into those programs; workers execute pre-shaped
|
|
@@ -144,15 +142,17 @@ text/TJ paint slots, cached static PDF page segments, page-local Deflate, and on
|
|
|
144
142
|
Explicit trusted structural slots use `data-fb-bind-html="slot"`. A value that no compiled variant
|
|
145
143
|
can safely place runs ordinary fixed-point layout once to add another variant.
|
|
146
144
|
|
|
147
|
-
On the independent 1,000-distinct-record case study, the
|
|
148
|
-
|
|
149
|
-
pages/s
|
|
145
|
+
On the independent 1,000-distinct-record case study, the 29-sample hot direct-file median was
|
|
146
|
+
216.160 ms: **4,626 records/s and 8,096 pages/s**. The 168.995 ms best sample reached **5,917
|
|
147
|
+
records/s and 10,355 pages/s**. It produced
|
|
150
148
|
the exact 1,750-page 500/300/150/50 reflow distribution and verified all 24,900 markers. The
|
|
151
149
|
throughput-tuned 6,870,320-byte PDF was deterministic across all samples. With the compact
|
|
152
150
|
compression setting, compiled output was also byte-for-byte identical to ordinary rendering:
|
|
153
151
|
5,298,961 bytes and SHA-256 `bb3c441313a08fb00d3bd15f23a567981f3bbbd550908e3a9fe7a07ca5d7f138`.
|
|
154
|
-
This is a hot compiled-variant result, not a claim for previously unseen structure
|
|
155
|
-
|
|
152
|
+
This is a hot compiled-variant result, not a claim for previously unseen structure. The first
|
|
153
|
+
variant-discovery render measured 0.509 s (3,437 pages/s), and the fully cold job including setup,
|
|
154
|
+
bindings, compilation, discovery, and write measured 0.588 s (2,975 pages/s). The independently
|
|
155
|
+
observed hot-median speedup over the ordinary path was 43.8x.
|
|
156
156
|
|
|
157
157
|
## Install
|
|
158
158
|
|
|
@@ -165,7 +165,7 @@ python -m pip install fullbleed
|
|
|
165
165
|
From a local wheel:
|
|
166
166
|
|
|
167
167
|
```bash
|
|
168
|
-
python -m pip install C:\path\to\fullbleed-2.
|
|
168
|
+
python -m pip install C:\path\to\fullbleed-2.3.0-cp310-abi3-win_amd64.whl
|
|
169
169
|
```
|
|
170
170
|
|
|
171
171
|
From a source checkout with Rust installed, no Python build package is needed:
|
|
@@ -223,6 +223,9 @@ Scaffolded components now include `components/primitives.py` with reusable
|
|
|
223
223
|
layout/content helpers (`Stack`, `Row`, `Text`, table/list helpers, key/value rows, etc.).
|
|
224
224
|
Each scaffolded project also includes `SCAFFOLDING.md`, which should be your
|
|
225
225
|
first read before restructuring components.
|
|
226
|
+
It also includes `AGENTS.md`, which preserves the installed-runtime-first
|
|
227
|
+
document workflow across future coding-agent sessions without making other
|
|
228
|
+
document tools categorically forbidden.
|
|
226
229
|
|
|
227
230
|
Install additional project assets (defaults to `./vendor/...` in project context):
|
|
228
231
|
|
|
@@ -618,7 +621,8 @@ Machine discovery:
|
|
|
618
621
|
fullbleed capabilities --json
|
|
619
622
|
```
|
|
620
623
|
|
|
621
|
-
Inspect the `svg` object in `fullbleed.capabilities.v1` for SVG support metadata.
|
|
624
|
+
Inspect the `svg` object in `fullbleed.capabilities.v1` for SVG support metadata. The `engine`
|
|
625
|
+
object also reports compiled-document/reflow availability and supported per-call compression modes.
|
|
622
626
|
It reports the compiled `svg_raster` build feature plus a feature matrix for
|
|
623
627
|
native-vector SVG, raster-fallback-required SVG, and unsupported/known-loss SVG
|
|
624
628
|
features.
|
|
@@ -977,6 +981,7 @@ Module exports:
|
|
|
977
981
|
|
|
978
982
|
- `PdfEngine`
|
|
979
983
|
- `CompiledDocument`
|
|
984
|
+
- `CompiledFlowCompression`
|
|
980
985
|
- `AssetBundle`
|
|
981
986
|
- `Asset`
|
|
982
987
|
- `AssetKind`
|
|
@@ -1025,8 +1030,8 @@ Module exports:
|
|
|
1025
1030
|
| `render_pdf_batch(copies, deterministic_hash=None)` | `bytes` |
|
|
1026
1031
|
| `render_pdf_bindings(bindings, deterministic_hash=None)` | `bytes` |
|
|
1027
1032
|
| `render_pdf_bindings_to_file(bindings, path, deterministic_hash=None)` | `int` |
|
|
1028
|
-
| `render_pdf_reflow_bindings(bindings, deterministic_hash=None)` | `bytes` |
|
|
1029
|
-
| `render_pdf_reflow_bindings_to_file(bindings, path, deterministic_hash=None)` | `int` |
|
|
1033
|
+
| `render_pdf_reflow_bindings(bindings, deterministic_hash=None, *, compression="throughput")` | `bytes` |
|
|
1034
|
+
| `render_pdf_reflow_bindings_to_file(bindings, path, deterministic_hash=None, *, compression="throughput")` | `int` |
|
|
1030
1035
|
|
|
1031
1036
|
The compiled lane runs parsing/layout once. `render_pdf_batch` virtualizes identical untagged page
|
|
1032
1037
|
content. The fixed binding methods accept columnar `dict[str, list[str]]` data and emit distinct
|
|
@@ -1038,7 +1043,10 @@ The reflow binding methods use the same exact-column contract but execute the co
|
|
|
1038
1043
|
program. `{{slot}}` values are literal text and may reshape, wrap, resize blocks, and change page
|
|
1039
1044
|
counts. Empty elements can opt into trusted generated markup with
|
|
1040
1045
|
`data-fb-bind-html="slot"`; those values replace the element's children. One DOM is reused per
|
|
1041
|
-
native worker and record output is linked in input order through a bounded queue.
|
|
1046
|
+
native worker and record output is linked in input order through a bounded queue. Structural slot
|
|
1047
|
+
values are parsed as trusted markup: sanitize untrusted input or use scalar `{{slot}}` bindings,
|
|
1048
|
+
which remain literal text. Choose `CompiledFlowCompression.Throughput` (default) or
|
|
1049
|
+
`CompiledFlowCompression.Compact` per render; modes can be mixed safely in one process. See
|
|
1042
1050
|
[`docs/python-api.md`](docs/python-api.md) for the trust boundary and current limitations.
|
|
1043
1051
|
|
|
1044
1052
|
When `deterministic_hash` is set, engine writes PDF SHA-256 to the provided file path.
|