Skip to content

feat: initial build — compose sanitizer#1

Merged
bakerboy448 merged 18 commits intomainfrom
feat/initial-build
Feb 28, 2026
Merged

feat: initial build — compose sanitizer#1
bakerboy448 merged 18 commits intomainfrom
feat/initial-build

Conversation

@bakerboy448
Copy link
Collaborator

Summary

  • Core redaction engine with pattern-based sensitive key detection, email redaction, and home path anonymization
  • Noise stripping for docker-autocompose and docker compose config output (S6_*, default fields, compose labels, empty values)
  • Hardlinks advisory detection for separate media container mounts
  • Input extraction that strips shell commands, blank lines, and trailing prompts
  • Configurable patterns via localStorage settings panel
  • Clipboard copy + PrivateBin/GitHub Gist redirect buttons
  • Full UI assembly with dark/light theme, disclaimers, and PII review warning
  • CI workflow (lint + test + coverage), GitHub Pages deploy, and release workflow
  • 97 tests, 90%+ statement coverage, 60KB single-file build

Test plan

  • All 97 tests pass with npx vitest run
  • TypeScript compiles cleanly with npx tsc --noEmit
  • Build produces single-file output under 500KB
  • Manual test: paste docker-autocompose output, verify redaction
  • Manual test: paste docker compose config, verify noise stripping
  • Manual test: paste raw docker-compose.yml, verify safe keys preserved
  • Verify hardlinks advisory appears for separate media mounts
  • Verify settings panel saves/loads custom patterns
  • Verify copy, PrivateBin, and Gist buttons work

Wire all modules into main.ts — input extraction, redaction, noise
stripping, advisory detection, and YAML dump. Add settings panel,
action buttons (copy/PrivateBin/Gist), stats display, and disclaimers.
Dark/light theme CSS with responsive layout. Zero innerHTML usage.
- prerelease.yml: auto-tags v*-pre.N on every push to main
- stable-release.yml: manual workflow_dispatch for stable releases
  with version validation, test gate, and version bump
- release.yml: marks pre-releases automatically via tag format
- renovate.json: auto-merge minor/digest, label PRs, rebase stale
- .coderabbit.yaml: assertive reviews with security-focused path instructions
- Branch protection: CI required, rebase/squash only, no force push
Bug report and feature request templates only — no blank issues,
no support requests. PR template with test checklist.
Add category dropdowns specific to redaction, noise stripping,
advisories, and input types. Clarify not for Docker support.
Settings panel saved patterns to localStorage but never passed them
to the redaction functions. Added PatternConfig parameter through
redactCompose → redactService → redactEnvDict/redactEnvArray →
isSensitiveKey. Added compileConfig() to convert string patterns
to RegExp at call time. Strengthened isValidConfig to reject
non-string array elements.

102 tests passing, 91.39% statement coverage.
… test

Consolidated isRecord() from 5 duplicate definitions into a single
export in patterns.ts. Added test for long-form volume object
anonymization (type: bind with source field). 103 tests, 93.47%
statement coverage.
compileConfig now skips invalid regex patterns instead of crashing.
Added base-uri 'none' to CSP meta tag to prevent base-href injection.
104 tests passing.
Added tables for redaction examples, noise stripping details,
advisory detection, input format support, architecture diagram,
testing info, and privacy statement.
… guard

vite-plugin-singlefile inlines JS into the HTML, so script-src 'self'
blocks the app from running. Added 'unsafe-inline' to script-src
(acceptable given zero innerHTML usage and no injection vectors).
Added 512 KB input size limit to prevent browser freezes from
oversized YAML input.
@bakerboy448 bakerboy448 merged commit 1315ae5 into main Feb 28, 2026
1 check passed
@bakerboy448 bakerboy448 deleted the feat/initial-build branch February 28, 2026 17:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant