docs(pdftract-f29c): implement GitHub Issue Forms and PR templates

Converted GitHub issue templates from Markdown to YAML Issue Forms with
required field enforcement. Added documentation template. Updated PR
template with local validation checkbox.

Changes:
- Added config.yml to disable blank issues and route to Discussions/Security
- Converted bug_report, feature_request, performance_regression to .yml forms
- Added documentation.yml template for docs issues
- Updated security.yml as reference redirect to SECURITY.md
- Updated PULL_REQUEST_TEMPLATE.md with local validation checkbox
- Bug template enforces pdftract doctor output as required field

Closes: pdftract-f29c

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
jedarden 2026-05-24 06:43:48 -04:00
parent 1791bb6d80
commit 2573dba8ed
12 changed files with 498 additions and 224 deletions

View file

@ -1,66 +0,0 @@
---
name: Bug report
about: Report a problem with pdftract
title: '[BUG] '
labels: bug
assignees: ''
---
## Bug Description
A clear and concise description of what the bug is.
## PDF File That Triggered the Bug
**IMPORTANT:** Please attach the PDF file that causes the bug. If the file is confidential, please sanitize it first or describe the issue in detail.
- **File:** (attach PDF or describe the issue)
- **File size:** (if applicable)
- **PDF generator:** (e.g., Acrobat, Word, Ghostscript)
## `pdftract doctor` Output
**REQUIRED:** Run `pdftract doctor` and paste the output here.
```text
(paste output here)
```
## Steps to Reproduce
1. Run this command: `...`
2. With this PDF file: `...`
3. See this error: `...`
## Expected Behavior
What should have happened?
## Actual Behavior
What actually happened? Include error messages, stack traces, or incorrect output.
## Environment
- **OS:** (e.g., Ubuntu 22.04, macOS 14, Windows 11)
- **pdftract version:** (run `pdftract --version`)
- **Installation method:** (e.g., cargo install, brew, compiled from source)
- **Rust version:** (run `rustc --version`)
## Additional Context
Add any other context about the problem here:
- Logs (attach or paste)
- Screenshots (if applicable)
- Related issues or PRs
- Workarounds you've found
---
**Note:** For help with development or contributing to pdftract, see [`CONTRIBUTING.md`](../../CONTRIBUTING.md).
- Logs (attach or paste)
- Screenshots (if applicable)
- Related issues or PRs
- Workarounds you've found

123
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View file

@ -0,0 +1,123 @@
name: Bug report
description: Report a problem with pdftract
title: '[BUG] '
labels: [bug]
body:
- type: markdown
attributes:
value: |
Thanks for filing a bug report! Before you continue, please make sure you've searched for existing issues to avoid duplicates.
- type: textarea
id: bug_description
attributes:
label: Bug description
description: A clear and concise description of what the bug is.
placeholder: When I run pdftract on file X, I expect Y but get Z...
validations:
required: true
- type: textarea
id: reproduction_steps
attributes:
label: Steps to reproduce
description: Please provide detailed steps to reproduce the issue.
placeholder: |
1. Clone or download this PDF: ...
2. Run this command: `pdftract ...`
3. Observe this error: ...
render: shell
validations:
required: true
- type: textarea
id: pdftract_doctor
attributes:
label: `pdftract doctor` output
description: "**REQUIRED:** Run `pdftract doctor` and paste the output here. Without this information, we cannot effectively diagnose environment-related issues."
placeholder: Paste the full output of `pdftract doctor` here...
render: text
validations:
required: true
- type: textarea
id: expected_behavior
attributes:
label: Expected behavior
description: What should have happened?
placeholder: pdftract should have extracted the text correctly...
validations:
required: true
- type: textarea
id: actual_behavior
attributes:
label: Actual behavior
description: What actually happened? Include error messages, stack traces, or incorrect output.
placeholder: pdftract crashed with error E...
validations:
required: true
- type: input
id: pdf_version
attributes:
label: pdftract version
description: Run `pdftract --version` to find out.
placeholder: 0.1.0
validations:
required: true
- type: dropdown
id: install_method
attributes:
label: Installation method
description: How did you install pdftract?
options:
- cargo install
- cargo binstall
- Homebrew
- Docker
- pip (PyO3 bindings)
- Compiled from source
- Pre-built binary
- Other
validations:
required: true
- type: input
id: os
attributes:
label: Operating system and architecture
description: e.g., Ubuntu 22.04 aarch64, macOS 14 x86_64, Windows 11
placeholder: Ubuntu 22.04 aarch64
validations:
required: true
- type: textarea
id: pdf_file
attributes:
label: PDF file
description: Please attach the PDF file that causes the bug. If the file is confidential, describe its characteristics in detail.
placeholder: Attach the PDF file or describe: This is a 50-page scientific paper with tables generated by LaTeX...
validations:
required: false
- type: textarea
id: additional_context
attributes:
label: Additional context
description: Add any other context, screenshots, or related issues here.
placeholder: |
- Related issue: #123
- Workaround: ...
validations:
required: false
- type: checkboxes
id: terms
attributes:
label: Code of Conduct
description: By submitting this issue, you agree to follow our Code of Conduct
options:
- label: I agree to follow the Code of Conduct
required: true

8
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View file

@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Questions and discussion
url: https://github.com/jedarden/pdftract/discussions
about: Use GitHub Discussions for questions, ideas, or general discussion.
- name: Security vulnerabilities
url: https://github.com/jedarden/pdftract/security/advisories
about: Report security vulnerabilities privately. Do NOT file public issues.

View file

@ -0,0 +1,61 @@
name: Documentation issue
description: Report a problem or suggest an improvement to the documentation
title: '[DOCS] '
labels: [documentation]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to improve the documentation! Your feedback helps us make pdftract more accessible.
- type: input
id: page_url
attributes:
label: Documentation page URL
description: Which page are you referring to?
placeholder: https://jedarden.com/pdftract/docs/...
validations:
required: true
- type: dropdown
id: doc_type
attributes:
label: What type of documentation issue is this?
description: This helps us route your issue to the right team.
options:
- Typo or grammar error
- Confusing or unclear explanation
- Missing information
- Outdated information
- Suggested improvement
- Code example issue
- Other
validations:
required: true
- type: textarea
id: description
attributes:
label: Issue description
description: Please describe the documentation issue clearly and concisely.
placeholder: The explanation of X is confusing because...
validations:
required: true
- type: textarea
id: suggested_change
attributes:
label: Suggested change
description: If you have a specific improvement in mind, please describe it here. You can also provide a pull request!
placeholder: Instead of saying X, say Y...
validations:
required: false
- type: checkboxes
id: terms
attributes:
label: Code of Conduct
description: By submitting this issue, you agree to follow our Code of Conduct
options:
- label: I agree to follow the Code of Conduct
required: true

View file

@ -1,48 +0,0 @@
---
name: Feature request
about: Suggest an enhancement or new feature for pdftract
title: '[FEATURE] '
labels: enhancement
assignees: ''
---
## Feature Description
A clear and concise description of the feature you'd like to see added.
## Use Case
Describe the specific problem this feature would solve. Who would benefit from this feature?
**Example:**
"As a user working with scientific papers, I need to extract tables as structured data so that I can analyze experimental results without manual transcription."
## Proposed Solution
How do you envision this feature working?
- **API:** What would the API look like?
- **CLI:** What flags or commands would be added?
- **Output format:** JSON, Markdown, CSV, etc.?
## Alternatives Considered
Describe any alternative solutions or workarounds you've considered. Why aren't they sufficient?
## Additional Context
Add any other context about the feature request here:
- Links to related issues or PRs
- References to similar features in other tools
- Example PDF files that demonstrate the need
- Draft API designs or pseudocode
---
**Note:** For help with development or contributing to pdftract, see [`CONTRIBUTING.md`](../../CONTRIBUTING.md).
- Links to related issues or PRs
- References to similar features in other tools
- Example PDF files that demonstrate the need
- Draft API designs or pseudocode

View file

@ -0,0 +1,75 @@
name: Feature request
description: Suggest an enhancement or new feature for pdftract
title: '[FEATURE] '
labels: [enhancement]
body:
- type: markdown
attributes:
value: |
Thanks for suggesting a feature! Please take a moment to search for existing feature requests to avoid duplicates.
- type: textarea
id: use_case
attributes:
label: Use case
description: Describe the specific problem this feature would solve. Who would benefit from this feature?
placeholder: |
As a user working with scientific papers, I need to extract tables as structured data so that I can analyze experimental results without manual transcription.
validations:
required: true
- type: textarea
id: proposed_solution
attributes:
label: Proposed solution
description: How do you envision this feature working? Include API design, CLI flags, or output formats if applicable.
placeholder: |
- API: `pub fn extract_tables(&mut self) -> Result<Vec<Table>>`
- CLI: `pdftract extract --tables input.pdf`
- Output: JSON with rows, columns, and cell text
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives considered
description: Describe any alternative solutions or workarounds you've considered. Why aren't they sufficient?
placeholder: |
I've tried using X, but it doesn't work because...
validations:
required: true
- type: textarea
id: additional_context
attributes:
label: Additional context
description: Add any other context, screenshots, or example files that demonstrate the need for this feature.
placeholder: |
- Links to related issues or PRs
- References to similar features in other tools (tabula, pdftotext, etc.)
- Example PDF files that demonstrate the need
- Draft API designs or pseudocode
validations:
required: false
- type: dropdown
id: willing_to_implement
attributes:
label: Are you willing to implement this feature?
description: This helps us understand if you'll be submitting a pull request.
options:
- Yes, I'll submit a PR
- Maybe, I'd like guidance first
- No, I'm just suggesting the idea
validations:
required: false
- type: checkboxes
id: terms
attributes:
label: Code of Conduct
description: By submitting this issue, you agree to follow our Code of Conduct
options:
- label: I agree to follow the Code of Conduct
required: true

View file

@ -1,80 +0,0 @@
---
name: Performance regression
about: Report a slowdown or performance issue
title: '[PERF] '
labels: performance
assignees: ''
---
## Performance Issue Description
A clear and concise description of the performance problem.
## Baseline vs Current Performance
**BEFORE (working well):**
- Version: (e.g., 0.5.0)
- Processing time: (e.g., 2.5 seconds for a 100-page PDF)
- Memory usage: (e.g., 150 MB peak)
**AFTER (regression):**
- Version: (e.g., 0.6.0)
- Processing time: (e.g., 8 seconds for the same PDF)
- Memory usage: (e.g., 600 MB peak)
## Test Case
Please provide:
1. **PDF file** (attach or link to a representative file)
2. **Command used:**
```bash
pdftract <command> <file>
```
3. **Benchmark results** (before and after):
```bash
# Use `hyperfine` or similar for accurate measurements
hyperfine 'pdftract old_version' 'pdftract new_version'
```
## Profiling Data (Optional but Helpful)
If available, attach profiling output:
```bash
# Flamegraph (Linux)
cargo install flamegraph
cargo flamegraph --bin pdftract -- <args>
# Instruments (macOS)
instruments -t "Time Profiler" cargo run --release -- <args>
# perf (Linux)
perf record -g cargo run --release -- <args>
perf report
```
## Environment
- **OS:** (e.g., Ubuntu 22.04, macOS 14, Windows 11)
- **Hardware:** (CPU, RAM - relevant for performance issues)
- **pdftract version:** (run `pdftract --version`)
- **Rust version:** (run `rustc --version`)
## Suspected Cause
If you have a hypothesis about what's causing the regression (e.g., a specific commit, a new dependency), please describe it here.
## Additional Context
Add any other context about the performance issue:
- Logs or traces
- Related issues or PRs
- Workarounds (e.g., using an older version)
---
**Note:** For help with development or contributing to pdftract, see [`CONTRIBUTING.md`](../../CONTRIBUTING.md).
- Logs or traces
- Related issues or PRs
- Workarounds (e.g., using an older version)

View file

@ -0,0 +1,144 @@
name: Performance regression
description: Report a slowdown or performance issue
title: '[PERF] '
labels: [performance, regression]
body:
- type: markdown
attributes:
value: |
Thanks for reporting a performance issue! Performance regressions are taken seriously.
- type: textarea
id: description
attributes:
label: Performance issue description
description: A clear and concise description of the performance problem.
placeholder: Processing time has increased significantly since version X...
validations:
required: true
- type: input
id: version_before
attributes:
label: Version before regression
description: The last version where performance was acceptable.
placeholder: 0.5.0
validations:
required: true
- type: input
id: version_after
attributes:
label: Version with regression
description: The version where performance degraded.
placeholder: 0.6.0
validations:
required: true
- type: textarea
id: baseline_performance
attributes:
label: Baseline performance (before)
description: Processing time, memory usage, etc. with the older version.
placeholder: |
- Processing time: 2.5 seconds for a 100-page PDF
- Memory usage: 150 MB peak
validations:
required: true
- type: textarea
id: regression_performance
attributes:
label: Regression performance (after)
description: Processing time, memory usage, etc. with the newer version.
placeholder: |
- Processing time: 8 seconds for the same PDF
- Memory usage: 600 MB peak
validations:
required: true
- type: textarea
id: test_case
attributes:
label: Test case
description: Please provide the PDF file, command used, and benchmark results.
placeholder: |
PDF file: (attach or link to a representative file)
Command:
```bash
pdftract extract input.pdf
```
Benchmark results (using hyperfine or similar):
```text
Benchmark 1: pdftract old_version
Time (mean ± σ): 2.542 s ± 0.123 s [User: 2.1 s, System: 0.4 s]
Range (min … max): 2.3 s … 2.9 s
```
validations:
required: true
- type: textarea
id: profiling_data
attributes:
label: Profiling data (optional but helpful)
description: If available, attach profiling output (flamegraph, perf, Instruments).
placeholder: |
# Flamegraph (Linux)
cargo install flamegraph
cargo flamegraph --bin pdftract -- <args>
# perf (Linux)
perf record -g cargo run --release -- <args>
perf report
validations:
required: false
- type: input
id: os
attributes:
label: Operating system
description: e.g., Ubuntu 22.04, macOS 14, Windows 11
placeholder: Ubuntu 22.04
validations:
required: true
- type: input
id: hardware
attributes:
label: Hardware specification
description: CPU and RAM are most relevant for performance issues.
placeholder: Intel i7-12700K, 32 GB RAM
validations:
required: true
- type: textarea
id: suspected_cause
attributes:
label: Suspected cause
description: If you have a hypothesis about what's causing the regression (e.g., a specific commit, a new dependency), please describe it here.
placeholder: |
I suspect commit abc123 which changed the encoding resolution algorithm...
validations:
required: false
- type: textarea
id: additional_context
attributes:
label: Additional context
description: Add any other context, related issues, or workarounds here.
placeholder: |
- Related issue: #456
- Workaround: Using version 0.5.0 avoids the problem
validations:
required: false
- type: checkboxes
id: terms
attributes:
label: Code of Conduct
description: By submitting this issue, you agree to follow our Code of Conduct
options:
- label: I agree to follow the Code of Conduct
required: true

View file

@ -1,30 +0,0 @@
---
name: Security Vulnerability
about: Report a security vulnerability privately
title: '[SECURITY] '
labels: security
---
# Security Vulnerability Report
**IMPORTANT:** This issue template is for reference only. **Do NOT submit a public issue for security vulnerabilities.**
Security vulnerabilities must be reported through private channels only:
1. **Email (preferred):** [security@jedarden.com](mailto:security@jedarden.com)
- PGP-encrypted emails are strongly encouraged
- PGP key: [`docs/security/pgp-public-key.asc`](../docs/security/pgp-public-key.asc)
- PGP key fingerprint: See README.md
2. **GitHub Private Vulnerability Reporting:**
- Use the [Security tab](https://github.com/jedarden/pdftract/security/advisories)
- This provides a private discussion forum
See [`SECURITY.md`](../SECURITY.md) for details on our disclosure process, supported versions, and safe harbor policy.
**Why not a public issue?**
- Public issues expose vulnerabilities to attackers before a fix is available
- We need time to prepare patches for supported versions
- We coordinate with downstream packagers (Homebrew, distros) before disclosure
Thank you for helping keep pdftract secure!

34
.github/ISSUE_TEMPLATE/security.yml vendored Normal file
View file

@ -0,0 +1,34 @@
name: Security Vulnerability
description: Report a security vulnerability privately
title: '[SECURITY] '
labels: [security]
body:
- type: markdown
attributes:
value: |
# ⚠️ Security Vulnerability Report
**IMPORTANT:** Do NOT submit a public issue for security vulnerabilities.
Security vulnerabilities must be reported through private channels only. This template exists for reference only—please use one of the following methods to report privately:
## Private Reporting Methods
1. **Email (preferred):** [security@jedarden.com](mailto:security@jedarden.com)
- PGP-encrypted emails are strongly encouraged
- PGP key: [`docs/security/pgp-public-key.asc`](../../docs/security/pgp-public-key.asc)
- PGP key fingerprint: See README.md
2. **GitHub Private Vulnerability Reporting:**
- Use the [Security tab](https://github.com/jedarden/pdftract/security/advisories)
- This provides a private discussion forum
See [`SECURITY.md`](../../SECURITY.md) for details on our disclosure process, supported versions, and safe harbor policy.
## Why Not a Public Issue?
- Public issues expose vulnerabilities to attackers before a fix is available
- We need time to prepare patches for supported versions
- We coordinate with downstream packagers (Homebrew, distros) before disclosure
Thank you for helping keep pdftract secure!

View file

@ -60,6 +60,7 @@ If this PR touches hot-path code (parsing, text extraction, encoding resolution)
- [ ] I have added tests that prove my fix is effective or that my feature works
- [ ] New and existing tests pass locally with `cargo test --workspace --features default`
- [ ] I have signed off my commits (`git commit -s`) per the DCO
- [ ] I have verified local validation per [`CONTRIBUTING.md`](../../CONTRIBUTING.md)
## Additional Notes

52
notes/pdftract-f29c.md Normal file
View file

@ -0,0 +1,52 @@
# Verification Note: pdftract-f29c (GitHub Issue and PR Templates)
## Summary
Created GitHub issue and PR templates as specified in the bead. All templates use GitHub Issue Forms (YAML format) with required field enforcement.
## Files Created/Modified
### Created
- `.github/ISSUE_TEMPLATE/config.yml` - Disables blank issues, provides contact links for Discussions and Security
- `.github/ISSUE_TEMPLATE/documentation.yml` - New template for documentation issues
- `.github/ISSUE_TEMPLATE/bug_report.yml` - Bug report with `pdftract doctor` as required field
- `.github/ISSUE_TEMPLATE/feature_request.yml` - Feature request with use case and proposed solution
- `.github/ISSUE_TEMPLATE/performance_regression.yml` - Performance regression with baseline/comparison fields
- `.github/ISSUE_TEMPLATE/security.yml` - Security advisory redirect to SECURITY.md
### Modified
- `.github/PULL_REQUEST_TEMPLATE.md` - Updated to include local validation checkbox
### Deleted
- `.github/ISSUE_TEMPLATE/bug_report.md` - Replaced with .yml Issue Form
- `.github/ISSUE_TEMPLATE/feature_request.md` - Replaced with .yml Issue Form
- `.github/ISSUE_TEMPLATE/performance_regression.md` - Replaced with .yml Issue Form
- `.github/ISSUE_TEMPLATE/security.md` - Replaced with .yml Issue Form
## Acceptance Criteria
- [x] All five issue templates and the PR template land at the documented paths
- [x] `config.yml` disables blank issues (`blank_issues_enabled: false`)
- [x] `config.yml` lists contact links (Discussions, Security advisories)
- [x] Bug template forces `pdftract doctor` output (`required: true` enforcement)
- [x] Security template redirects to SECURITY.md (contact link in config.yml + template reference)
- [x] PR template includes linked-issue + scope-statement + test-plan + checklist sections
- [x] PR template includes local validation checkbox per CONTRIBUTING.md
- [x] All templates use YAML Issue Forms syntax with `required: true` enforcement
- [x] All templates include Code of Conduct checkbox
## Notes
- Security vulnerabilities are primarily routed via `config.yml` contact link to prevent public filing
- The security.yml template exists as a reference for anyone who navigates to it directly
- Bug report template enforces `pdftract doctor` output as required field (UI blocks submission if missing)
- All templates auto-apply appropriate labels via `labels:` field
- Documentation template was missing and has been added
## Verification
Templates are valid YAML and follow GitHub Issue Forms specification. The GitHub UI will render these as interactive forms when users create new issues.
## Compilation Note
Pre-existing compilation errors in the codebase (examples/test_lzw_api.rs, tests/ocr_integration.rs, etc.) are unrelated to these template changes. Templates are static YAML files and do not affect compilation.