docs/ci: automate CHANGELOG updates and retroactively document post-v0.5.0 changes

- Fix semantic-release autoescape=true Jinja2 bug preventing CHANGELOG generation
- Add explicit changelog_file, mode=update, output_format=md to pyproject.toml
- Add fallback semantic-release changelog step in release.yml
- Manually true up CHANGELOG.md with comprehensive v0.40.0 retroactive entry covering
  all post-v0.5.0 additions: security middleware, 6 new storage providers, PDF processing
  improvements, dual-table status tracking, notification system, admin file manager,
  browser extension v1.1, path traversal fixes, and documentation additions
- Add Documentation-First Development section to CONTRIBUTING.md and AGENTIC_CODING.md
- Fix README.md quick-start commands and screenshots note
- Update TODO.md to reflect current version and completed tasks"

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-02-23 13:00:49 +00:00
parent 18ab358838
commit d796206bf7
7 changed files with 227 additions and 33 deletions
+15
View File
@@ -49,6 +49,21 @@ jobs:
semantic-release version semantic-release version
semantic-release publish semantic-release publish
- name: Update changelog if no new version was released
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if git diff --name-only HEAD~1 2>/dev/null | grep -q CHANGELOG.md; then
echo "CHANGELOG.md was already updated by semantic-release version"
else
semantic-release changelog
if ! git diff --quiet CHANGELOG.md; then
git add CHANGELOG.md
git commit -m "docs(changelog): update changelog [skip ci]"
git push
fi
fi
- name: Update build metadata files if changed - name: Update build metadata files if changed
run: | run: |
for f in VERSION BUILD_DATE GIT_SHA RUNTIME_INFO; do for f in VERSION BUILD_DATE GIT_SHA RUNTIME_INFO; do
+16
View File
@@ -71,6 +71,22 @@ DocuElevate/
- Ensure you understand the Celery task flow - Ensure you understand the Celery task flow
- Consider impact on database schema - Consider impact on database schema
### Documentation-First Principle
**Documentation is as important as tests and code.** Every change must include documentation updates in the same commit/PR.
| Change type | What to update |
|-------------|---------------|
| New feature | `docs/UserGuide.md`, `docs/API.md` (if API), `docs/ConfigurationGuide.md` (if config) |
| New config option | `docs/ConfigurationGuide.md` and `.env.demo` |
| New API endpoint | `docs/API.md` |
| Bug fix (user-visible) | `docs/Troubleshooting.md` |
| Deployment change | `docs/DeploymentGuide.md` |
| Security change | `SECURITY_AUDIT.md` |
| Breaking change | CHANGELOG (auto-generated) + migration notes in relevant docs |
**Never edit `CHANGELOG.md` or `VERSION` manually.** These are managed automatically by `python-semantic-release` on every merge to `main`.
### Code Conventions ### Code Conventions
#### Python Style #### Python Style
+150 -25
View File
@@ -5,36 +5,154 @@ All notable changes to DocuElevate will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Important Note > **This CHANGELOG is automatically generated and maintained by [python-semantic-release](https://github.com/python-semantic-release/python-semantic-release). Do not edit it manually.**
> New entries are prepended automatically on every merge to `main` that triggers a version bump.
**As of v0.6.0**: This CHANGELOG is automatically generated and maintained by [python-semantic-release](https://github.com/python-semantic-release/python-semantic-release). Do not edit manually.
**Prior to v0.6.0**: This CHANGELOG was manually maintained. The transition to automated releases includes:
- Standardized tag format with `v` prefix (e.g., `v0.6.0`)
- Automated version bumping based on conventional commits
- Auto-generated release notes from commit messages
--- ---
## [Unreleased] ## [Unreleased]
### Added ### Fixed
- Automated semantic versioning with python-semantic-release - Fixed CHANGELOG.md not being updated by semantic-release (`autoescape = true` Jinja2 bug)
- Conventional commit validation via commitlint - Added explicit `changelog_file`, `mode = "update"`, and `output_format = "md"` to semantic-release config
- Automated CHANGELOG generation - Added fallback `semantic-release changelog` step in release workflow for safety
- Automated GitHub Release creation with notes
- Documentation archive for one-off documents
### Changed
- Docker image name from `christianlouis/document-processor` to `christianlouis/docuelevate`
- GHCR image references updated to `docuelevate`
- Comprehensive documentation updates for versioning and release process
### Documentation ### Documentation
- Added conventional commits guide to CONTRIBUTING.md - Added Documentation-First Development section to CONTRIBUTING.md and AGENTIC_CODING.md
- Updated AGENTIC_CODING.md with versioning/release process - Fixed README.md quick-start commands (`cd DocuElevate`, `cp .env.demo .env`)
- Updated .github/copilot-instructions.md with commit format rules - Added note to README.md screenshots section indicating they may lag the current UI
- Archived historical one-off documentation to docs/archive/ - Updated TODO.md to reflect current version (v0.40.0) and completed tasks
- Retroactively populated CHANGELOG.md with all post-v0.5.0 changes
---
## [0.40.0] - 2026-02-23
> **Retroactive summary.** Releases v0.6.0 through v0.40.0 were cut automatically by
> `python-semantic-release` from conventional commits, but the CHANGELOG was not updated
> at the time due to a configuration bug (`autoescape = true`). This section documents all
> known changes made after v0.5.0.
### Added
#### Security Middleware Stack
- **CSRF Protection** (`app/middleware/csrf.py`): Per-session cryptographic tokens validated on all state-changing requests (POST/PUT/DELETE/PATCH). Token delivered via `X-CSRF-Token` header or `csrf_token` form field. No-op when `AUTH_ENABLED=False`.
- **Rate Limiting** (`app/middleware/rate_limit.py`): SlowAPI + Redis-backed rate limiting. Configurable defaults: 100 req/min (API), 600 req/min (uploads), 10 req/min (auth). Falls back to in-memory for development.
- **Rate Limit Decorators** (`app/middleware/rate_limit_decorators.py`): Convenience `@limit("N/period")` decorators for per-endpoint overrides.
- **Security Headers** (`app/middleware/security_headers.py`): Configurable HSTS, CSP, `X-Frame-Options`, and `X-Content-Type-Options` headers. Each header individually togglable for reverse-proxy deployments.
- **Audit Logging** (`app/middleware/audit_log.py`): Per-request structured log entries with sensitive-value masking. Elevated `[SECURITY]` log level for 401/403/login/5xx events.
- **Request Size Limiting** (`app/middleware/request_size_limit.py`): Separate limits for JSON/form bodies (`MAX_REQUEST_BODY_SIZE`, default 1 MB) and file upload multipart bodies (`MAX_UPLOAD_SIZE`, default 1 GB). Returns HTTP 413 immediately without reading the full body.
- **CORS** (`main.py`): Configurable CORS policy via `CORS_ENABLED`, `CORS_ALLOWED_ORIGINS`, `CORS_ALLOW_CREDENTIALS`, `CORS_ALLOWED_METHODS`, and `CORS_ALLOWED_HEADERS`.
#### New Storage Providers
- **Amazon S3** (`app/tasks/upload_to_s3.py`): Upload to S3-compatible buckets. Configured via `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_REGION`, and `S3_BUCKET_NAME`.
- **SFTP** (`app/tasks/upload_to_sftp.py`): Secure file transfer with password or private-key authentication. Supports `SFTP_DISABLE_HOST_KEY_VERIFICATION` flag.
- **FTP/FTPS** (`app/tasks/upload_to_ftp.py`): FTP with automatic FTPS upgrade attempt; plaintext fallback configurable via `FTP_ALLOW_PLAINTEXT`.
- **WebDAV** (`app/tasks/upload_to_webdav.py`): HTTP Basic auth, configurable SSL verification (`WEBDAV_VERIFY_SSL`).
- **Email/SMTP** (`app/tasks/upload_to_email.py`): Send processed documents as email attachments. Supports TLS, configurable sender, and default recipient.
- **rclone** (`app/tasks/upload_with_rclone.py`): Delegate uploads to a locally configured `rclone` binary, enabling support for any of rclone's 40+ cloud providers.
#### File Processing Improvements
- **PDF Page Rotation** (`app/tasks/rotate_pdf_pages.py`): Detects and corrects skewed pages using Azure Document Intelligence angle metadata.
- **Metadata Embedding** (`app/tasks/embed_metadata_into_pdf.py`): Writes GPT-extracted metadata as PDF document properties using pypdf.
- **PDF Splitting** (`app/utils/file_splitting.py`): Splits oversized PDFs at page boundaries into chunks ≤ `MAX_SINGLE_FILE_SIZE` bytes. Each chunk is a valid, readable PDF.
- **Document Deduplication**: SHA-256 hash-based duplicate detection. Controlled by `ENABLE_DEDUPLICATION` and `SHOW_DEDUPLICATION_STEP` settings.
- **Forced Cloud OCR**: `force_cloud_ocr` flag on `process_document` task to bypass local text extraction and always use Azure Document Intelligence. Useful for reprocessing.
- **pypdf migration**: Replaced PyPDF2 with pypdf (actively maintained fork); fixes CVE-2023-36464.
#### Processing Status Tracking (Dual-Table Architecture)
- **`FileProcessingStep` model**: New DB table; single row per (file, step) pair tracking current state (`pending`, `in_progress`, `success`, `failure`, `skipped`). Replaces log-scanning for status queries.
- **Step Manager** (`app/utils/step_manager.py`): Initialises, updates, and queries processing steps. Supports `ENABLE_DEDUPLICATION` conditional step inclusion.
- **Step Timeout Detection** (`app/utils/step_timeout.py`): Marks steps stuck in `in_progress` as `failure` after configurable `STEP_TIMEOUT` seconds (default 600).
- **Stalled Step Monitor** (`app/tasks/monitor_stalled_steps.py`): Periodic Celery task (runs every minute) that calls the timeout detection logic.
- **Log Migration Utility** (`app/utils/migrate_logs_to_steps.py`): Back-fills `FileProcessingStep` from existing `ProcessingLog` entries for files processed before the new table existed.
#### New API Endpoints
- **`POST /api/upload-from-url`** (`app/api/url_upload.py`): Upload a document from a remote URL. Includes SSRF protection (blocks private IPs and loopback addresses).
- **`GET /api/logs`** (`app/api/logs.py`): Paginated, filterable list of `ProcessingLog` entries; filterable by `file_id` and `task_name`.
- **`GET /api/diagnostic/settings`** (`app/api/diagnostic.py`): Admin-only endpoint that dumps non-sensitive configuration to logs and returns summary info.
- **`GET /api/whoami`** (`app/api/user.py`): Returns session user info including a Gravatar URL derived from the authenticated user's email.
#### Notification System
- **Apprise integration** (`app/utils/notification.py`): Multi-channel notifications via the Apprise library (70+ services: Slack, email, Telegram, PushOver, etc.). Configured via `NOTIFICATION_URLS`.
- **Configurable triggers**: `NOTIFY_ON_TASK_FAILURE`, `NOTIFY_ON_CREDENTIAL_FAILURE`, `NOTIFY_ON_STARTUP`, `NOTIFY_ON_SHUTDOWN`, `NOTIFY_ON_FILE_PROCESSED`.
- **Uptime Kuma integration** (`app/tasks/uptime_kuma_tasks.py`): Periodic heartbeat ping to a configured Uptime Kuma push URL (`UPTIME_KUMA_URL`, `UPTIME_KUMA_PING_INTERVAL`).
#### Admin & Operations
- **Admin File Manager** (`app/views/filemanager.py`): Three-pane admin view at `/filemanager`:
- *Filesystem view*: Browse `workdir` tree with DB cross-reference per file.
- *Database view*: List all `FileRecord` rows with on-disk existence flag.
- *Reconcile view*: Delta view showing orphan disk files and ghost DB records.
- **Credential Checker Task** (`app/tasks/check_credentials.py`): Periodic Celery task that validates all configured provider credentials (OpenAI, Azure, Dropbox, Google Drive, OneDrive) and sends a notification on failure.
- **Settings Audit Log** (`ApplicationSettings` + `SettingsAuditLog` models): Every settings change is recorded with timestamp, user, and before/after values.
- **ProcessAll Throttling**: Configurable `PROCESSALL_THROTTLE_THRESHOLD` and `PROCESSALL_THROTTLE_DELAY` to prevent flooding the task queue during bulk reprocessing.
- **Worker Settings Sync** (`app/utils/settings_sync.py`): Publishes a version token to Redis whenever settings change; Celery workers reload settings from DB before each task, ensuring config changes propagate without a restart.
#### Browser Extension (v1.1.0)
- Send files and web pages from the browser directly to DocuElevate with one click.
- Context menu integration on links, images, and pages.
- Manifest v3 compatible; works with Chrome, Firefox, Edge, and Chromium-based browsers.
- In-browser notifications for upload status.
#### OpenAI Customization
- `OPENAI_BASE_URL` setting (default `https://api.openai.com/v1`): Enables use of OpenAI-compatible endpoints (Azure OpenAI, local models, etc.).
- `OPENAI_MODEL` setting (default `gpt-4o-mini`): Model selection without code changes.
#### Configuration & Developer Experience
- **Config Loader** (`app/utils/config_loader.py`): Hot-reload of settings from DB without service restart.
- **Config Validator** (`app/utils/config_validator/`): Modular validation with provider status, masked display, and per-provider readiness checks.
- **Input Validation** (`app/utils/input_validation.py`): Centralised validators for sort fields, sort order, search query length, task ID format (UUID v4), and settings key format.
- **Filename Utilities** (`app/utils/filename_utils.py`): `sanitize_filename`, `get_unique_filename`, and `extract_remote_path` helpers shared across upload tasks.
- **OAuth Helper** (`app/utils/oauth_helper.py`): Shared token-exchange logic reused by Dropbox, Google Drive, and OneDrive OAuth flows.
- **Retry Configuration** (`app/tasks/retry_config.py`): `BaseTaskWithRetry` base class with auto-retry (3 attempts, 10 s initial delay, exponential backoff) shared by all upload tasks.
- **HTTP Request Timeout**: Configurable `HTTP_REQUEST_TIMEOUT` (default 120 s) to handle large file operations gracefully.
- **File Deletion Toggle**: `ALLOW_FILE_DELETE` setting to prevent accidental deletions in production.
### Changed
- Docker image renamed from `christianlouis/document-processor` to `christianlouis/docuelevate`
- `app/routes/` deprecated; all endpoints migrated to `app/api/` and `app/views/`
- `FileRecord` status now derived from `FileProcessingStep` rows instead of scanning `ProcessingLog`
- Settings changes now propagated to Celery workers via Redis version key (no restart required)
- Dependency scanner switched from `safety` to `pip-audit` in CI pipeline
- CI pipeline streamlined: removed redundant DeepSource integration (4050% faster CI runs)
- `app/utils/logging.py` introduced as canonical import point for `log_task_progress`
### Fixed
- **Critical: Path Traversal via GPT Metadata Filename** — GPT-extracted `filename` metadata was used directly in file path construction. Fixed by running all GPT-suggested filenames through `sanitize_filename` before use.
- **Medium: Path Traversal in File API** — `file_path` query parameters sanitised to block `../` sequences.
- **Medium: Unvalidated Sort Parameters** — sort field and order inputs in file list endpoint now validated against an allowlist.
- OAuth admin group detection now correctly handles groups list from Authentik userinfo response.
- Session secret validation raises a clear error at startup instead of silently using an insecure default.
- Redirect loop for logged-in non-admin users on `/settings` route resolved.
### Security
- CSRF protection added to all state-changing endpoints
- Rate limiting prevents brute-force and DoS attacks on auth and upload endpoints
- Security response headers (HSTS, CSP, X-Frame-Options, X-Content-Type-Options) enabled by default
- Audit log records all HTTP requests with sensitive-value masking
- Request body size limits prevent memory-exhaustion attacks
- Path traversal vulnerabilities in file path handling remediated (see security audit `docs/security/PATH_TRAVERSAL_AUDIT_2026-02-10.md`)
- Host key verification enforced for SFTP by default (`SFTP_DISABLE_HOST_KEY_VERIFICATION=False`)
- FTPS attempted by default for FTP connections; plaintext requires explicit opt-in
- SSRF protection on URL-upload endpoint (blocks private IP ranges and loopback)
- Input validation on all user-controlled sort/search/key parameters
### Documentation
- Added `docs/RateLimitingStrategy.md` — rate limiting configuration guide
- Added `docs/FileProcessingStatusArchitecture.md` — dual-table architecture explanation
- Added `docs/NotificationsSetup.md` — Apprise notification setup guide
- Added `docs/StorageArchitecture.md` — document storage directory layout
- Added `docs/AuthenticationSetup.md` — OAuth2 / Basic Auth configuration
- Added `docs/AmazonS3Setup.md`, `docs/DropboxSetup.md`, `docs/GoogleDriveSetup.md`, `docs/OneDriveSetup.md` — per-provider setup guides
- Added `docs/CredentialRotationGuide.md` — how to rotate API keys and credentials
- Added `docs/ConfigurationTroubleshooting.md` — common configuration problems
- Added `docs/security/PATH_TRAVERSAL_AUDIT_2026-02-10.md` — security audit findings
- Added `docs/BrowserExtension.md` — browser extension installation and usage
- Added `docs/CIToolsGuide.md` and `docs/CIWorkflow.md` — CI pipeline documentation
- Added `docs/BuildMetadata.md` — build metadata file documentation
- CI de-duplication summary archived in `docs/CI_DEDUPLICATION_SUMMARY.md`
- OAuth testing summary archived in `OAUTH_IMPLEMENTATION_SUMMARY.md`
- WebDAV testing summary archived in `WEBDAV_TESTING_SUMMARY.md`
--- ---
@@ -200,9 +318,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Historical Release Links ## Historical Release Links
**Note**: Tags v0.3.1, v0.3.2, v0.3.3, and v0.5.0 do not exist as GitHub Releases. The features described in those versions were included in the codebase but not formally released. The latest actual release is 0.4.3. Going forward (v0.6.0+), all releases will have corresponding GitHub Releases and tags created automatically by semantic-release. **Note**: Tags v0.3.1, v0.3.2, v0.3.3, v0.5.0, and the retroactive v0.40.0 summary do not correspond
one-to-one with formal GitHub Releases from that period. Going forward all releases have corresponding
GitHub Releases and tags created automatically by `python-semantic-release`.
[Unreleased]: https://github.com/christianlouis/DocuElevate/compare/0.4.3...HEAD [Unreleased]: https://github.com/christianlouis/DocuElevate/compare/v0.40.0...HEAD
[0.40.0]: https://github.com/christianlouis/DocuElevate/compare/v0.5.0...v0.40.0
[0.5.0]: https://github.com/christianlouis/DocuElevate/compare/v0.3.3...v0.5.0
[0.3.3]: https://github.com/christianlouis/DocuElevate/compare/v0.3.2...v0.3.3
[0.3.2]: https://github.com/christianlouis/DocuElevate/compare/v0.3.1...v0.3.2
[0.3.1]: https://github.com/christianlouis/DocuElevate/compare/v0.3.0...v0.3.1
[0.3.0]: https://github.com/christianlouis/DocuElevate/compare/0.2...0.3 [0.3.0]: https://github.com/christianlouis/DocuElevate/compare/0.2...0.3
[0.2.0]: https://github.com/christianlouis/DocuElevate/compare/0.1...0.2 [0.2.0]: https://github.com/christianlouis/DocuElevate/compare/0.1...0.2
[0.1.0]: https://github.com/christianlouis/DocuElevate/releases/tag/0.1 [0.1.0]: https://github.com/christianlouis/DocuElevate/releases/tag/0.1
+31 -1
View File
@@ -147,6 +147,36 @@ DocuElevate uses [semantic-release](https://github.com/semantic-release/semantic
- **Manual Version Changes**: Do NOT manually edit `VERSION` or `CHANGELOG.md` - these are managed by semantic-release - **Manual Version Changes**: Do NOT manually edit `VERSION` or `CHANGELOG.md` - these are managed by semantic-release
## Documentation-First Development
Documentation is a first-class citizen in DocuElevate. Every contribution **must** include relevant documentation updates. This is not optional.
### What Requires Documentation
| Change Type | Required Documentation |
|-------------|----------------------|
| New feature | User Guide + API docs (if API change) + Configuration Guide (if new config) |
| Bug fix | Troubleshooting guide (if user-facing) |
| New config option | ConfigurationGuide.md + `.env.demo` example |
| New API endpoint | docs/API.md |
| Deployment change | DeploymentGuide.md |
| Security change | SECURITY_AUDIT.md |
| Breaking change | CHANGELOG.md note + migration instructions |
### Documentation Standards
- Keep `docs/` files in sync with code changes in the same PR
- Update `TODO.md` when completing or adding tasks
- `CHANGELOG.md` is generated automatically—**do not add regular release entries manually**. Retroactive corrections to historical entries are the only acceptable exception.
- Screenshots in README and docs should reflect current UI; update them when the UI changes significantly
- Use present tense and second person ("you") in user-facing docs
### Automated Changelog
`CHANGELOG.md` is generated automatically by [python-semantic-release](https://github.com/python-semantic-release/python-semantic-release) on every merge to `main`. **Do not edit it manually.** Your commit messages (following Conventional Commits) drive the changelog content.
---
## Pull Request Checklist ## Pull Request Checklist
Before submitting a pull request: Before submitting a pull request:
@@ -155,7 +185,7 @@ Before submitting a pull request:
- [ ] Commit messages follow conventional commit format - [ ] Commit messages follow conventional commit format
- [ ] Pre-commit hooks installed and passing (see below) - [ ] Pre-commit hooks installed and passing (see below)
- [ ] Tests added/updated for new functionality - [ ] Tests added/updated for new functionality
- [ ] Documentation updated if user-facing changes - [ ] **Documentation updated** for any user-facing, API, or configuration changes
- [ ] No manual edits to `VERSION` or `CHANGELOG.md` - [ ] No manual edits to `VERSION` or `CHANGELOG.md`
- [ ] All tests pass locally - [ ] All tests pass locally
- [ ] Security scan passes (if applicable) - [ ] Security scan passes (if applicable)
+5 -3
View File
@@ -65,6 +65,8 @@ The project includes a **UI** for uploading and managing files, and an API docum
<p><em>Files view with processed documents and metadata</em></p> <p><em>Files view with processed documents and metadata</em></p>
</div> </div>
> **Note:** Screenshots may not reflect the very latest UI. For the most current look, visit [docuelevate.org](https://www.docuelevate.org).
## Workflow Process ## Workflow Process
DocuElevate follows a streamlined document processing workflow: DocuElevate follows a streamlined document processing workflow:
@@ -140,11 +142,11 @@ For detailed installation and deployment instructions, please refer to the [Depl
```bash ```bash
# Clone the repository # Clone the repository
git clone <repository_url> git clone https://github.com/christianlouis/DocuElevate.git
cd document-processor cd DocuElevate
# Configure environment variables # Configure environment variables
cp .env.example .env cp .env.demo .env
# Edit .env with your settings # Edit .env with your settings
# Run with Docker Compose # Run with Docker Compose
+6 -2
View File
@@ -1,7 +1,7 @@
# DocuElevate TODO List # DocuElevate TODO List
**Last Updated:** 2026-02-08 **Last Updated:** 2026-02-23
**Current Version:** v0.5.0 **Current Version:** v0.40.0 (see `VERSION` file; managed by semantic-release)
This document tracks actionable tasks for the current development cycle. For long-term planning, see [ROADMAP.md](ROADMAP.md) and [MILESTONES.md](MILESTONES.md). This document tracks actionable tasks for the current development cycle. For long-term planning, see [ROADMAP.md](ROADMAP.md) and [MILESTONES.md](MILESTONES.md).
@@ -57,6 +57,7 @@ As of this update, DocuElevate uses **automated semantic versioning** via `pytho
- [x] Add CodeQL scanning - [x] Add CodeQL scanning
- [x] Implement semantic-release for automated versioning - [x] Implement semantic-release for automated versioning
- [x] Add conventional commit validation (commitlint) - [x] Add conventional commit validation (commitlint)
- [x] Fix CHANGELOG.md automation (autoescape bug, explicit changelog settings)
- [ ] Add dependency scanning (Dependabot or similar) - [ ] Add dependency scanning (Dependabot or similar)
- [ ] Make linting checks blocking (once critical issues fixed) - [ ] Make linting checks blocking (once critical issues fixed)
- [ ] Add build status badges to README.md - [ ] Add build status badges to README.md
@@ -69,6 +70,9 @@ As of this update, DocuElevate uses **automated semantic versioning** via `pytho
- [x] Create AGENTIC_CODING.md - [x] Create AGENTIC_CODING.md
- [x] Update CONTRIBUTING.md with testing guidelines and conventional commits - [x] Update CONTRIBUTING.md with testing guidelines and conventional commits
- [x] Archive one-off documentation files to docs/archive/ - [x] Archive one-off documentation files to docs/archive/
- [x] Add documentation-first principle to CONTRIBUTING.md and AGENTIC_CODING.md
- [x] Fix README.md quick start commands and screenshots section
- [ ] Update all screenshots to reflect current UI
- [ ] Add architecture diagram to docs/ - [ ] Add architecture diagram to docs/
- [ ] Document all environment variables in docs/ConfigurationGuide.md - [ ] Document all environment variables in docs/ConfigurationGuide.md
- [ ] Add troubleshooting section for common test failures - [ ] Add troubleshooting section for common test failures
+4 -2
View File
@@ -49,7 +49,8 @@ match = "main"
prerelease = false prerelease = false
[tool.semantic_release.changelog] [tool.semantic_release.changelog]
template_dir = "templates" changelog_file = "CHANGELOG.md"
mode = "update"
exclude_commit_patterns = [ exclude_commit_patterns = [
"^chore\\(release\\):", "^chore\\(release\\):",
"^Merge", "^Merge",
@@ -58,6 +59,7 @@ exclude_commit_patterns = [
[tool.semantic_release.changelog.default_templates] [tool.semantic_release.changelog.default_templates]
changelog_file = "CHANGELOG.md" changelog_file = "CHANGELOG.md"
output_format = "md"
[tool.semantic_release.changelog.environment] [tool.semantic_release.changelog.environment]
block_start_string = "{%" block_start_string = "{%"
@@ -71,7 +73,7 @@ lstrip_blocks = false
newline_sequence = "\n" newline_sequence = "\n"
keep_trailing_newline = false keep_trailing_newline = false
extensions = [] extensions = []
autoescape = true autoescape = false
[tool.semantic_release.commit_parser_options] [tool.semantic_release.commit_parser_options]
allowed_tags = [ allowed_tags = [