From e1c1ce2856e8d9a594595ee60ac2f95a9be8f897 Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Tue, 17 Feb 2026 13:16:01 -0600 Subject: [PATCH] integrate generalized quality-rails into mosaic bootstrap --- README.md | 30 +++ STANDARDS.md | 1 + bin/mosaic-bootstrap-repo | 20 ++ bin/mosaic-doctor | 3 + bin/mosaic-quality-apply | 65 ++++++ bin/mosaic-quality-verify | 52 +++++ rails/quality/PHILOSOPHY.md | 189 ++++++++++++++++++ rails/quality/README.md | 166 +++++++++++++++ rails/quality/docs/CI-SETUP.md | 174 ++++++++++++++++ rails/quality/docs/TYPESCRIPT-SETUP.md | 164 +++++++++++++++ rails/quality/scripts/install.ps1 | 53 +++++ rails/quality/scripts/install.sh | 75 +++++++ rails/quality/scripts/verify.ps1 | 57 ++++++ rails/quality/scripts/verify.sh | 92 +++++++++ .../templates/monorepo/.eslintrc.strict.js | 64 ++++++ .../templates/monorepo/.husky/pre-commit | 2 + .../templates/monorepo/.lintstagedrc.js | 29 +++ .../templates/monorepo/.woodpecker.yml | 67 +++++++ .../templates/monorepo/README-STRUCTURE.md | 96 +++++++++ .../templates/monorepo/package.json.snippet | 30 +++ .../monorepo/pnpm-workspace.yaml.snippet | 3 + .../templates/monorepo/tsconfig.base.json | 39 ++++ .../templates/monorepo/turbo.json.snippet | 23 +++ .../typescript-nextjs/.eslintrc.strict.js | 40 ++++ .../typescript-nextjs/.husky/pre-commit | 2 + .../typescript-nextjs/.lintstagedrc.js | 9 + .../typescript-nextjs/.woodpecker.yml | 67 +++++++ .../typescript-nextjs/next.config.js.snippet | 50 +++++ .../typescript-nextjs/package.json.snippet | 33 +++ .../typescript-nextjs/tsconfig.strict.json | 45 +++++ .../typescript-node/.eslintrc.strict.js | 53 +++++ .../typescript-node/.husky/pre-commit | 2 + .../typescript-node/.lintstagedrc.js | 9 + .../templates/typescript-node/.woodpecker.yml | 66 ++++++ .../typescript-node/package.json.snippet | 22 ++ .../typescript-node/tsconfig.strict.json | 42 ++++ templates/repo/.mosaic/README.md | 16 ++ templates/repo/.mosaic/quality-rails.yml | 10 + 38 files changed, 1960 insertions(+) create mode 100755 bin/mosaic-quality-apply create mode 100755 bin/mosaic-quality-verify create mode 100644 rails/quality/PHILOSOPHY.md create mode 100644 rails/quality/README.md create mode 100644 rails/quality/docs/CI-SETUP.md create mode 100644 rails/quality/docs/TYPESCRIPT-SETUP.md create mode 100644 rails/quality/scripts/install.ps1 create mode 100755 rails/quality/scripts/install.sh create mode 100644 rails/quality/scripts/verify.ps1 create mode 100755 rails/quality/scripts/verify.sh create mode 100644 rails/quality/templates/monorepo/.eslintrc.strict.js create mode 100644 rails/quality/templates/monorepo/.husky/pre-commit create mode 100644 rails/quality/templates/monorepo/.lintstagedrc.js create mode 100644 rails/quality/templates/monorepo/.woodpecker.yml create mode 100644 rails/quality/templates/monorepo/README-STRUCTURE.md create mode 100644 rails/quality/templates/monorepo/package.json.snippet create mode 100644 rails/quality/templates/monorepo/pnpm-workspace.yaml.snippet create mode 100644 rails/quality/templates/monorepo/tsconfig.base.json create mode 100644 rails/quality/templates/monorepo/turbo.json.snippet create mode 100644 rails/quality/templates/typescript-nextjs/.eslintrc.strict.js create mode 100644 rails/quality/templates/typescript-nextjs/.husky/pre-commit create mode 100644 rails/quality/templates/typescript-nextjs/.lintstagedrc.js create mode 100644 rails/quality/templates/typescript-nextjs/.woodpecker.yml create mode 100644 rails/quality/templates/typescript-nextjs/next.config.js.snippet create mode 100644 rails/quality/templates/typescript-nextjs/package.json.snippet create mode 100644 rails/quality/templates/typescript-nextjs/tsconfig.strict.json create mode 100644 rails/quality/templates/typescript-node/.eslintrc.strict.js create mode 100644 rails/quality/templates/typescript-node/.husky/pre-commit create mode 100644 rails/quality/templates/typescript-node/.lintstagedrc.js create mode 100644 rails/quality/templates/typescript-node/.woodpecker.yml create mode 100644 rails/quality/templates/typescript-node/package.json.snippet create mode 100644 rails/quality/templates/typescript-node/tsconfig.strict.json create mode 100644 templates/repo/.mosaic/quality-rails.yml diff --git a/README.md b/README.md index 8f4c502..6880c66 100644 --- a/README.md +++ b/README.md @@ -103,6 +103,30 @@ Inside any compatible repository: Wrapper commands call local repo scripts under `scripts/agent/`. +## Quality Rails (Generalized) + +Mosaic includes vendored quality-rails templates and scripts at: + +- `~/.mosaic/rails/quality/` + +Apply to a repo: + +```bash +~/.mosaic/bin/mosaic-quality-apply --template typescript-node --target /path/to/repo +``` + +Verify enforcement: + +```bash +~/.mosaic/bin/mosaic-quality-verify --target /path/to/repo +``` + +Templates currently supported: + +- `typescript-node` +- `typescript-nextjs` +- `monorepo` + ## Bootstrap Any Repo (Slave Linkage) Attach any repository/workspace to the master layer: @@ -111,6 +135,12 @@ Attach any repository/workspace to the master layer: ~/.mosaic/bin/mosaic-bootstrap-repo /path/to/repo ``` +Attach and apply quality rails in one step: + +```bash +~/.mosaic/bin/mosaic-bootstrap-repo --quality-template typescript-node /path/to/repo +``` + This creates/updates: - `.mosaic/` (repo-specific hook/config surface) diff --git a/STANDARDS.md b/STANDARDS.md index e47ab68..d7a98c2 100644 --- a/STANDARDS.md +++ b/STANDARDS.md @@ -20,6 +20,7 @@ Master/slave model: - Pull before edits when collaborating in shared repos. - Run validation checks before claiming completion. - Apply quality rails from `~/.mosaic/rails/` when relevant (review, QA, git workflow). +- For project-level mechanical enforcement templates, use `~/.mosaic/rails/quality/` via `~/.mosaic/bin/mosaic-quality-apply`. - Avoid hardcoded secrets and token leakage in remotes/commits. - Do not perform destructive git/file actions without explicit instruction. diff --git a/bin/mosaic-bootstrap-repo b/bin/mosaic-bootstrap-repo index efea456..71d09d5 100755 --- a/bin/mosaic-bootstrap-repo +++ b/bin/mosaic-bootstrap-repo @@ -3,6 +3,7 @@ set -euo pipefail TARGET_DIR="$(pwd)" FORCE=0 +QUALITY_TEMPLATE="" while [[ $# -gt 0 ]]; do case "$1" in @@ -10,6 +11,10 @@ while [[ $# -gt 0 ]]; do FORCE=1 shift ;; + --quality-template) + QUALITY_TEMPLATE="${2:-}" + shift 2 + ;; *) TARGET_DIR="$1" shift @@ -48,6 +53,7 @@ copy_file() { copy_file "$TEMPLATE_ROOT/.mosaic/README.md" "$TARGET_DIR/.mosaic/README.md" copy_file "$TEMPLATE_ROOT/.mosaic/repo-hooks.sh" "$TARGET_DIR/.mosaic/repo-hooks.sh" +copy_file "$TEMPLATE_ROOT/.mosaic/quality-rails.yml" "$TARGET_DIR/.mosaic/quality-rails.yml" for file in "$TEMPLATE_ROOT"/scripts/agent/*.sh; do base="$(basename "$file")" @@ -90,3 +96,17 @@ fi echo "[mosaic] Repo bootstrap complete: $TARGET_DIR" echo "[mosaic] Next: edit $TARGET_DIR/.mosaic/repo-hooks.sh with project workflows" +echo "[mosaic] Optional: apply quality rails via ~/.mosaic/bin/mosaic-quality-apply --template