Skip to content

Add self-hosted CRM intake and service request flow - #3

Merged
ohgeeceee merged 11 commits into
mainfrom
codex/self-hosted-crm
Oct 5, 2026
Merged

ohgeeceee merged 11 commits into
mainfrom
codex/self-hosted-crm

Conversation

@ohgeeceee

@ohgeeceee ohgeeceee commented Oct 4, 2026 •

Copy link
Copy Markdown
Owner

What this adds

  • Builds the public Montana support guides and on-site service portal from the portfolio repository.
  • Adds a privacy-aware intake endpoint, PostgreSQL CRM schema, projects, tickets, assets, contacts, and service history, plus Directus for private administration.
  • Publishes the site with GitHub Actions and builds the intake image for GHCR.
  • Runs the home-hosted services under rootless Podman; Directus is loopback-bound and private administration uses Tailscale Serve. Public intake is routed through the Tailscale Funnel endpoint on port 8443.

Current operating state

  • Local Directus, PostgreSQL, and intake containers are healthy. The public Funnel health check responds successfully.
  • Directus collection permissions for the public policy are empty. The intake DB account can call only the constrained intake function and has no direct read permission on CRM tables.
  • There are no client records in the database.
  • PUBLIC_INTAKE_ENABLED=false remains set. Intake POSTs return 503 until full-disk encryption and encrypted off-host backup/restore verification are complete. Do not enter customer data before then.
  • The host update timer is not enabled: GHCR host pull authentication still needs a restricted read:packages credential.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / Security Evidence

Commit: a6a8a384a4f23d7ba19af043190263950cd0b917

Security evidence gate passed (success)

No security-sensitive scanner-evidence gap detected.

Mode: enforce

Scanned 38 changed file(s). No missing scanner-evidence signal was detected.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / PR Risk Taxonomy

Commit: a6a8a384a4f23d7ba19af043190263950cd0b917

PR taxonomy review recommended (neutral)

Detected 3 PR taxonomy bucket(s): Security Evidence, Install Manifest Integrity, CI/CD Recommendation.

Scanned 38 changed file(s).

Roadmap taxonomy buckets:

Security Evidence

Security-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.

Signals:

  • 1 security-sensitive path(s) changed

Paths:

  • .github/workflows/deploy.yml

Install Manifest Integrity

Install manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.

Signals:

  • 1 install or manifest path(s) changed

Paths:

  • services/intake/pnpm-lock.yaml

CI/CD Recommendation

CI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.

Signals:

  • Regression coverage may lag behind the diff
  • CI workflow changes may ship without failure-mode evidence
  • 2 CI or workflow path(s) changed

Paths:

  • .github/workflows/deploy.yml
  • services/intake/pnpm-lock.yaml
  • build/generate.mjs
  • content/guides.json
  • intake.js
  • ops/crm/compose.yaml
  • services/intake/package.json
  • services/intake/src/server.mjs

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / Reference Set Readiness

Commit: a6a8a384a4f23d7ba19af043190263950cd0b917

Reference set readiness gaps detected (neutral)

Reference evidence present for 1/7 areas (14%) across 38 changed file(s).

This check is based on files changed in this PR. Repository-level readiness is still reported by /ecc-tools analyze comments and generated manifests.

Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Missing Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior.
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Missing Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces.
Security evidence Present tech-support/security/index.html, tech-support/security/password-recovery-password-managers-2fa/index.html, tech-support/security/spot-avoid-phishing-text-scams-robocalls/index.html
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / Hosted Promotion Readiness

Commit: a6a8a384a4f23d7ba19af043190263950cd0b917

Hosted promotion readiness passed (success)

No hosted promotion evidence gaps detected across 38 changed file(s); 0 corpus scenarios had matching evidence.

This check compares PR file changes against the evaluator/RAG promotion corpus in src/analyzers/fixtures/evaluator-rag-corpus.ts.
Hosted output scoring inspected 0 completed cached hosted job results.

No evaluator corpus scenarios matched this PR.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / PR Config Audit

Commit: a6a8a384a4f23d7ba19af043190263950cd0b917

No changed-config issues detected (success)

Scanned 1 config file(s) present at this commit across 1 changed config path(s) and found no issues in the supported security rules.

Changed config files:

  • .github/workflows/deploy.yml

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / PR Harness Audit

Commit: a6a8a384a4f23d7ba19af043190263950cd0b917

No harness issues detected (success)

Scanned 1 changed config file(s) and found no harness issues.

Changed config files:

  • .github/workflows/deploy.yml

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / Security Evidence

Commit: 790675000334205ca11a83acd561f6f84a860cbc

Security evidence gate passed (success)

No security-sensitive scanner-evidence gap detected.

Mode: enforce

Scanned 38 changed file(s). No missing scanner-evidence signal was detected.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / PR Risk Taxonomy

Commit: 790675000334205ca11a83acd561f6f84a860cbc

PR taxonomy review recommended (neutral)

Detected 3 PR taxonomy bucket(s): Security Evidence, Install Manifest Integrity, CI/CD Recommendation.

Scanned 38 changed file(s).

Roadmap taxonomy buckets:

Security Evidence

Security-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.

Signals:

  • 1 security-sensitive path(s) changed

Paths:

  • .github/workflows/deploy.yml

Install Manifest Integrity

Install manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.

Signals:

  • 1 install or manifest path(s) changed

Paths:

  • services/intake/pnpm-lock.yaml

CI/CD Recommendation

CI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.

Signals:

  • Regression coverage may lag behind the diff
  • CI workflow changes may ship without failure-mode evidence
  • 2 CI or workflow path(s) changed

Paths:

  • .github/workflows/deploy.yml
  • services/intake/pnpm-lock.yaml
  • build/generate.mjs
  • content/guides.json
  • intake.js
  • ops/crm/compose.yaml
  • services/intake/package.json
  • services/intake/src/server.mjs

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / Reference Set Readiness

Commit: 790675000334205ca11a83acd561f6f84a860cbc

Reference set readiness gaps detected (neutral)

Reference evidence present for 1/7 areas (14%) across 38 changed file(s).

This check is based on files changed in this PR. Repository-level readiness is still reported by /ecc-tools analyze comments and generated manifests.

Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Missing Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior.
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Missing Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces.
Security evidence Present tech-support/security/index.html, tech-support/security/password-recovery-password-managers-2fa/index.html, tech-support/security/spot-avoid-phishing-text-scams-robocalls/index.html
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / Hosted Promotion Readiness

Commit: 790675000334205ca11a83acd561f6f84a860cbc

Hosted promotion readiness passed (success)

No hosted promotion evidence gaps detected across 38 changed file(s); 0 corpus scenarios had matching evidence.

This check compares PR file changes against the evaluator/RAG promotion corpus in src/analyzers/fixtures/evaluator-rag-corpus.ts.
Hosted output scoring inspected 0 completed cached hosted job results.

No evaluator corpus scenarios matched this PR.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / PR Config Audit

Commit: 790675000334205ca11a83acd561f6f84a860cbc

No changed-config issues detected (success)

Scanned 1 config file(s) present at this commit across 1 changed config path(s) and found no issues in the supported security rules.

Changed config files:

  • .github/workflows/deploy.yml

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / PR Harness Audit

Commit: 790675000334205ca11a83acd561f6f84a860cbc

No harness issues detected (success)

Scanned 1 changed config file(s) and found no harness issues.

Changed config files:

  • .github/workflows/deploy.yml

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / Security Evidence

Commit: 4ffebf26b8c72f398e8ae01f5f6de1d9936cad9b

Security evidence gate passed (success)

No security-sensitive scanner-evidence gap detected.

Mode: enforce

Scanned 38 changed file(s). No missing scanner-evidence signal was detected.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / PR Risk Taxonomy

Commit: 4ffebf26b8c72f398e8ae01f5f6de1d9936cad9b

PR taxonomy review recommended (neutral)

Detected 3 PR taxonomy bucket(s): Security Evidence, Install Manifest Integrity, CI/CD Recommendation.

Scanned 38 changed file(s).

Roadmap taxonomy buckets:

Security Evidence

Security-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.

Signals:

  • 1 security-sensitive path(s) changed

Paths:

  • .github/workflows/deploy.yml

Install Manifest Integrity

Install manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.

Signals:

  • 1 install or manifest path(s) changed

Paths:

  • services/intake/pnpm-lock.yaml

CI/CD Recommendation

CI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.

Signals:

  • Regression coverage may lag behind the diff
  • CI workflow changes may ship without failure-mode evidence
  • 2 CI or workflow path(s) changed

Paths:

  • .github/workflows/deploy.yml
  • services/intake/pnpm-lock.yaml
  • build/generate.mjs
  • content/guides.json
  • intake.js
  • ops/crm/compose.yaml
  • services/intake/package.json
  • services/intake/src/server.mjs

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / Reference Set Readiness

Commit: 4ffebf26b8c72f398e8ae01f5f6de1d9936cad9b

Reference set readiness gaps detected (neutral)

Reference evidence present for 1/7 areas (14%) across 38 changed file(s).

This check is based on files changed in this PR. Repository-level readiness is still reported by /ecc-tools analyze comments and generated manifests.

Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Missing Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior.
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Missing Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces.
Security evidence Present tech-support/security/index.html, tech-support/security/password-recovery-password-managers-2fa/index.html, tech-support/security/spot-avoid-phishing-text-scams-robocalls/index.html
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / Hosted Promotion Readiness

Commit: 4ffebf26b8c72f398e8ae01f5f6de1d9936cad9b

Hosted promotion readiness passed (success)

No hosted promotion evidence gaps detected across 38 changed file(s); 0 corpus scenarios had matching evidence.

This check compares PR file changes against the evaluator/RAG promotion corpus in src/analyzers/fixtures/evaluator-rag-corpus.ts.
Hosted output scoring inspected 0 completed cached hosted job results.

No evaluator corpus scenarios matched this PR.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / PR Config Audit

Commit: 4ffebf26b8c72f398e8ae01f5f6de1d9936cad9b

No changed-config issues detected (success)

Scanned 1 config file(s) present at this commit across 1 changed config path(s) and found no issues in the supported security rules.

Changed config files:

  • .github/workflows/deploy.yml

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / PR Harness Audit

Commit: 4ffebf26b8c72f398e8ae01f5f6de1d9936cad9b

No harness issues detected (success)

Scanned 1 changed config file(s) and found no harness issues.

Changed config files:

  • .github/workflows/deploy.yml

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / Security Evidence

Commit: 5b731ce655f4d6cff8e7b83f1b65562c3f2bcbcd

Security evidence gate passed (success)

No security-sensitive scanner-evidence gap detected.

Mode: enforce

Scanned 38 changed file(s). No missing scanner-evidence signal was detected.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / PR Risk Taxonomy

Commit: 5b731ce655f4d6cff8e7b83f1b65562c3f2bcbcd

PR taxonomy review recommended (neutral)

Detected 3 PR taxonomy bucket(s): Security Evidence, Install Manifest Integrity, CI/CD Recommendation.

Scanned 38 changed file(s).

Roadmap taxonomy buckets:

Security Evidence

Security-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.

Signals:

  • 1 security-sensitive path(s) changed

Paths:

  • .github/workflows/deploy.yml

Install Manifest Integrity

Install manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.

Signals:

  • 1 install or manifest path(s) changed

Paths:

  • services/intake/pnpm-lock.yaml

CI/CD Recommendation

CI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.

Signals:

  • Regression coverage may lag behind the diff
  • CI workflow changes may ship without failure-mode evidence
  • 2 CI or workflow path(s) changed

Paths:

  • .github/workflows/deploy.yml
  • services/intake/pnpm-lock.yaml
  • build/generate.mjs
  • content/guides.json
  • intake.js
  • ops/crm/compose.yaml
  • services/intake/package.json
  • services/intake/src/server.mjs

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / Reference Set Readiness

Commit: 5b731ce655f4d6cff8e7b83f1b65562c3f2bcbcd

Reference set readiness gaps detected (neutral)

Reference evidence present for 1/7 areas (14%) across 38 changed file(s).

This check is based on files changed in this PR. Repository-level readiness is still reported by /ecc-tools analyze comments and generated manifests.

Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Missing Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior.
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Missing Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces.
Security evidence Present tech-support/security/index.html, tech-support/security/password-recovery-password-managers-2fa/index.html, tech-support/security/spot-avoid-phishing-text-scams-robocalls/index.html
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / Hosted Promotion Readiness

Commit: 5b731ce655f4d6cff8e7b83f1b65562c3f2bcbcd

Hosted promotion readiness passed (success)

No hosted promotion evidence gaps detected across 38 changed file(s); 0 corpus scenarios had matching evidence.

This check compares PR file changes against the evaluator/RAG promotion corpus in src/analyzers/fixtures/evaluator-rag-corpus.ts.
Hosted output scoring inspected 0 completed cached hosted job results.

No evaluator corpus scenarios matched this PR.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / PR Config Audit

Commit: 5b731ce655f4d6cff8e7b83f1b65562c3f2bcbcd

No changed-config issues detected (success)

Scanned 1 config file(s) present at this commit across 1 changed config path(s) and found no issues in the supported security rules.

Changed config files:

  • .github/workflows/deploy.yml

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / Security Evidence

Commit: 07788d6202f93bed9b9e06b6372b5dec99987c31

Security evidence gate passed (success)

No security-sensitive scanner-evidence gap detected.

Mode: enforce

Scanned 38 changed file(s). No missing scanner-evidence signal was detected.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / PR Risk Taxonomy

Commit: 07788d6202f93bed9b9e06b6372b5dec99987c31

PR taxonomy review recommended (neutral)

Detected 3 PR taxonomy bucket(s): Security Evidence, Install Manifest Integrity, CI/CD Recommendation.

Scanned 38 changed file(s).

Roadmap taxonomy buckets:

Security Evidence

Security-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.

Signals:

  • 1 security-sensitive path(s) changed

Paths:

  • .github/workflows/deploy.yml

Install Manifest Integrity

Install manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.

Signals:

  • 1 install or manifest path(s) changed

Paths:

  • services/intake/pnpm-lock.yaml

CI/CD Recommendation

CI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.

Signals:

  • Regression coverage may lag behind the diff
  • CI workflow changes may ship without failure-mode evidence
  • 2 CI or workflow path(s) changed

Paths:

  • .github/workflows/deploy.yml
  • services/intake/pnpm-lock.yaml
  • build/generate.mjs
  • content/guides.json
  • intake.js
  • ops/crm/compose.yaml
  • services/intake/package.json
  • services/intake/src/server.mjs

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / Reference Set Readiness

Commit: 07788d6202f93bed9b9e06b6372b5dec99987c31

Reference set readiness gaps detected (neutral)

Reference evidence present for 1/7 areas (14%) across 38 changed file(s).

This check is based on files changed in this PR. Repository-level readiness is still reported by /ecc-tools analyze comments and generated manifests.

Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Missing Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior.
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Missing Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces.
Security evidence Present tech-support/security/index.html, tech-support/security/password-recovery-password-managers-2fa/index.html, tech-support/security/spot-avoid-phishing-text-scams-robocalls/index.html
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / Hosted Promotion Readiness

Commit: 07788d6202f93bed9b9e06b6372b5dec99987c31

Hosted promotion readiness passed (success)

No hosted promotion evidence gaps detected across 38 changed file(s); 0 corpus scenarios had matching evidence.

This check compares PR file changes against the evaluator/RAG promotion corpus in src/analyzers/fixtures/evaluator-rag-corpus.ts.
Hosted output scoring inspected 0 completed cached hosted job results.

No evaluator corpus scenarios matched this PR.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / PR Config Audit

Commit: 07788d6202f93bed9b9e06b6372b5dec99987c31

No changed-config issues detected (success)

Scanned 1 config file(s) present at this commit across 1 changed config path(s) and found no issues in the supported security rules.

Changed config files:

  • .github/workflows/deploy.yml

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 4, 2026

Copy link
Copy Markdown

ECC Tools / PR Harness Audit

Commit: 07788d6202f93bed9b9e06b6372b5dec99987c31

No harness issues detected (success)

Scanned 1 changed config file(s) and found no harness issues.

Changed config files:

  • .github/workflows/deploy.yml

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 5, 2026

Copy link
Copy Markdown

ECC Tools / Security Evidence

Commit: 6cb1252a812cd7897f59f853a12b15e5a85ec916

Security evidence gate passed (success)

No security-sensitive scanner-evidence gap detected.

Mode: enforce

Scanned 41 changed file(s). No missing scanner-evidence signal was detected.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 5, 2026

Copy link
Copy Markdown

ECC Tools / PR Risk Taxonomy

Commit: 6cb1252a812cd7897f59f853a12b15e5a85ec916

PR taxonomy review recommended (neutral)

Detected 3 PR taxonomy bucket(s): Security Evidence, Install Manifest Integrity, CI/CD Recommendation.

Scanned 41 changed file(s).

Roadmap taxonomy buckets:

Security Evidence

Security-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.

Signals:

  • 1 security-sensitive path(s) changed

Paths:

  • .github/workflows/deploy.yml

Install Manifest Integrity

Install manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.

Signals:

  • 1 install or manifest path(s) changed

Paths:

  • services/intake/pnpm-lock.yaml

CI/CD Recommendation

CI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.

Signals:

  • Regression coverage may lag behind the diff
  • CI workflow changes may ship without failure-mode evidence
  • 2 CI or workflow path(s) changed

Paths:

  • .github/workflows/deploy.yml
  • services/intake/pnpm-lock.yaml
  • build/generate.mjs
  • content/guides.json
  • intake.js
  • ops/crm/compose.yaml
  • services/intake/package.json
  • services/intake/src/server.mjs

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 5, 2026

Copy link
Copy Markdown

ECC Tools / Reference Set Readiness

Commit: 6cb1252a812cd7897f59f853a12b15e5a85ec916

Reference set readiness gaps detected (neutral)

Reference evidence present for 1/7 areas (14%) across 41 changed file(s).

This check is based on files changed in this PR. Repository-level readiness is still reported by /ecc-tools analyze comments and generated manifests.

Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Missing Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior.
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Missing Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces.
Security evidence Present tech-support/security/index.html, tech-support/security/password-recovery-password-managers-2fa/index.html, tech-support/security/spot-avoid-phishing-text-scams-robocalls/index.html
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 5, 2026

Copy link
Copy Markdown

ECC Tools / Hosted Promotion Readiness

Commit: 6cb1252a812cd7897f59f853a12b15e5a85ec916

Hosted promotion readiness passed (success)

No hosted promotion evidence gaps detected across 41 changed file(s); 0 corpus scenarios had matching evidence.

This check compares PR file changes against the evaluator/RAG promotion corpus in src/analyzers/fixtures/evaluator-rag-corpus.ts.
Hosted output scoring inspected 0 completed cached hosted job results.

No evaluator corpus scenarios matched this PR.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 5, 2026

Copy link
Copy Markdown

ECC Tools / PR Config Audit

Commit: 6cb1252a812cd7897f59f853a12b15e5a85ec916

No changed-config issues detected (success)

Scanned 1 config file(s) present at this commit across 1 changed config path(s) and found no issues in the supported security rules.

Changed config files:

  • .github/workflows/deploy.yml

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 5, 2026

Copy link
Copy Markdown

ECC Tools / PR Harness Audit

Commit: 6cb1252a812cd7897f59f853a12b15e5a85ec916

No harness issues detected (success)

Scanned 1 changed config file(s) and found no harness issues.

Changed config files:

  • .github/workflows/deploy.yml

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 5, 2026

Copy link
Copy Markdown

ECC Tools / Security Evidence

Commit: e3aac4549b5ef94dabccc8e79c41017233a71caa

Security evidence gate passed (success)

No security-sensitive scanner-evidence gap detected.

Mode: enforce

Scanned 41 changed file(s). No missing scanner-evidence signal was detected.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 5, 2026

Copy link
Copy Markdown

ECC Tools / PR Risk Taxonomy

Commit: e3aac4549b5ef94dabccc8e79c41017233a71caa

PR taxonomy review recommended (neutral)

Detected 3 PR taxonomy bucket(s): Security Evidence, Install Manifest Integrity, CI/CD Recommendation.

Scanned 41 changed file(s).

Roadmap taxonomy buckets:

Security Evidence

Security-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.

Signals:

  • 1 security-sensitive path(s) changed

Paths:

  • .github/workflows/deploy.yml

Install Manifest Integrity

Install manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.

Signals:

  • 1 install or manifest path(s) changed

Paths:

  • services/intake/pnpm-lock.yaml

CI/CD Recommendation

CI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.

Signals:

  • Regression coverage may lag behind the diff
  • CI workflow changes may ship without failure-mode evidence
  • 2 CI or workflow path(s) changed

Paths:

  • .github/workflows/deploy.yml
  • services/intake/pnpm-lock.yaml
  • build/generate.mjs
  • content/guides.json
  • intake.js
  • ops/crm/compose.yaml
  • services/intake/package.json
  • services/intake/src/server.mjs

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 5, 2026

Copy link
Copy Markdown

ECC Tools / Reference Set Readiness

Commit: e3aac4549b5ef94dabccc8e79c41017233a71caa

Reference set readiness gaps detected (neutral)

Reference evidence present for 1/7 areas (14%) across 41 changed file(s).

This check is based on files changed in this PR. Repository-level readiness is still reported by /ecc-tools analyze comments and generated manifests.

Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Missing Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior.
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Missing Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces.
Security evidence Present tech-support/security/index.html, tech-support/security/password-recovery-password-managers-2fa/index.html, tech-support/security/spot-avoid-phishing-text-scams-robocalls/index.html
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 5, 2026

Copy link
Copy Markdown

ECC Tools / Hosted Promotion Readiness

Commit: e3aac4549b5ef94dabccc8e79c41017233a71caa

Hosted promotion readiness passed (success)

No hosted promotion evidence gaps detected across 41 changed file(s); 0 corpus scenarios had matching evidence.

This check compares PR file changes against the evaluator/RAG promotion corpus in src/analyzers/fixtures/evaluator-rag-corpus.ts.
Hosted output scoring inspected 0 completed cached hosted job results.

No evaluator corpus scenarios matched this PR.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 5, 2026

Copy link
Copy Markdown

ECC Tools / PR Config Audit

Commit: e3aac4549b5ef94dabccc8e79c41017233a71caa

No changed-config issues detected (success)

Scanned 1 config file(s) present at this commit across 1 changed config path(s) and found no issues in the supported security rules.

Changed config files:

  • .github/workflows/deploy.yml

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 5, 2026

Copy link
Copy Markdown

ECC Tools / PR Harness Audit

Commit: e3aac4549b5ef94dabccc8e79c41017233a71caa

No harness issues detected (success)

Scanned 1 changed config file(s) and found no harness issues.

Changed config files:

  • .github/workflows/deploy.yml

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 5, 2026

Copy link
Copy Markdown

ECC Tools / Security Evidence

Commit: ffcee6f47e418b3f85067165004faea029dab439

Security evidence gate passed (success)

No security-sensitive scanner-evidence gap detected.

Mode: enforce

Scanned 42 changed file(s). No missing scanner-evidence signal was detected.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 5, 2026

Copy link
Copy Markdown

ECC Tools / PR Risk Taxonomy

Commit: ffcee6f47e418b3f85067165004faea029dab439

PR taxonomy review recommended (neutral)

Detected 3 PR taxonomy bucket(s): Security Evidence, Install Manifest Integrity, CI/CD Recommendation.

Scanned 42 changed file(s).

Roadmap taxonomy buckets:

Security Evidence

Security-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.

Signals:

  • 1 security-sensitive path(s) changed

Paths:

  • .github/workflows/deploy.yml

Install Manifest Integrity

Install manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.

Signals:

  • 1 install or manifest path(s) changed

Paths:

  • services/intake/pnpm-lock.yaml

CI/CD Recommendation

CI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.

Signals:

  • Regression coverage may lag behind the diff
  • CI workflow changes may ship without failure-mode evidence
  • 2 CI or workflow path(s) changed

Paths:

  • .github/workflows/deploy.yml
  • services/intake/pnpm-lock.yaml
  • build/generate.mjs
  • content/guides.json
  • intake.js
  • ops/crm/compose.yaml
  • services/intake/package.json
  • services/intake/src/server.mjs

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 5, 2026

Copy link
Copy Markdown

ECC Tools / Reference Set Readiness

Commit: ffcee6f47e418b3f85067165004faea029dab439

Reference set readiness gaps detected (neutral)

Reference evidence present for 1/7 areas (14%) across 42 changed file(s).

This check is based on files changed in this PR. Repository-level readiness is still reported by /ecc-tools analyze comments and generated manifests.

Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Missing Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior.
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Missing Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces.
Security evidence Present tech-support/security/index.html, tech-support/security/password-recovery-password-managers-2fa/index.html, tech-support/security/spot-avoid-phishing-text-scams-robocalls/index.html
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 5, 2026

Copy link
Copy Markdown

ECC Tools / Hosted Promotion Readiness

Commit: ffcee6f47e418b3f85067165004faea029dab439

Hosted promotion readiness passed (success)

No hosted promotion evidence gaps detected across 42 changed file(s); 0 corpus scenarios had matching evidence.

This check compares PR file changes against the evaluator/RAG promotion corpus in src/analyzers/fixtures/evaluator-rag-corpus.ts.
Hosted output scoring inspected 0 completed cached hosted job results.

No evaluator corpus scenarios matched this PR.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 5, 2026

Copy link
Copy Markdown

ECC Tools / PR Config Audit

Commit: ffcee6f47e418b3f85067165004faea029dab439

No changed-config issues detected (success)

Scanned 1 config file(s) present at this commit across 1 changed config path(s) and found no issues in the supported security rules.

Changed config files:

  • .github/workflows/deploy.yml

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Oct 5, 2026

Copy link
Copy Markdown

ECC Tools / PR Harness Audit

Commit: ffcee6f47e418b3f85067165004faea029dab439

No harness issues detected (success)

Scanned 1 changed config file(s) and found no harness issues.

Changed config files:

  • .github/workflows/deploy.yml

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ohgeeceee
ohgeeceee marked this pull request as ready for review October 5, 2026 01:31
@ohgeeceee
ohgeeceee merged commit 7f8cab6 into main Oct 5, 2026
3 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ffcee6f47e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

await app.register(rateLimit, {
max: 12,
timeWindow: '10 minutes',
keyGenerator: (request) => request.headers['cf-connecting-ip'] || request.ip,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Derive rate-limit keys from trusted Funnel metadata

When deployed behind the documented Tailscale Funnel proxy, normal requests reach Fastify from the same local peer, and trustProxy: false makes request.ip that proxy address, so every visitor shares the single 12-request/10-minute budget. Conversely, a direct client can supply arbitrary cf-connecting-ip values because no Cloudflare proxy verifies that header, allowing bots to bypass the limit. Configure trust only for the Funnel proxy and derive the key from its verified forwarded client address.

Useful? React with 👍 / 👎.

Comment on lines +166 to +171
IF p_email_normalized IS NOT NULL THEN
INSERT INTO contacts(full_name, phone, phone_normalized, email, email_normalized, location_label,
preferred_contact_method, consent_to_contact, source)
VALUES (p_full_name, NULLIF(p_phone, ''), p_phone_normalized, NULLIF(p_email, ''), p_email_normalized,
NULLIF(p_location, ''), p_preferred_contact, true, 'website')
ON CONFLICT (email_normalized) WHERE email_normalized IS NOT NULL

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Reconcile contacts before selecting one conflict key

When an existing phone-only contact later submits an email, or an existing contact changes email while retaining the same phone, this branch attempts a new row and handles only an email conflict; the separate unique phone index raises an unhandled violation, the entire intake transaction rolls back, and the user receives a 503. Resolve the contact against both normalized identifiers before inserting or merging it.

Useful? React with 👍 / 👎.

Comment on lines +171 to +172
ON CONFLICT (email_normalized) WHERE email_normalized IS NOT NULL
DO UPDATE SET updated_at = now()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve updated contact details during repeated intake

When a returning requester matches an existing email but supplies a new phone, name, location, or preferred contact method, the conflict update changes only updated_at. Since the ticket does not retain the submitted phone or preferred-contact value, the new information is discarded and the CRM may use stale contact details when following up; update the mutable contact fields or store the submitted contact details with the ticket.

Useful? React with 👍 / 👎.

Comment thread privacy.html
<body>
<main class="wrap wrap--narrow">
<p class="kicker">PRIVACY · SERVICE REQUESTS</p>
<h1>What happens to your service request</h1>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Identify Tailscale correctly in the privacy notice

The deployed form endpoint and deployment documentation use Tailscale Funnel, but this customer-facing privacy notice states that submissions pass through Cloudflare Tunnel. Users are therefore given an inaccurate description of the processor/network path for their personal information; replace this with the actual Tailscale transport before publishing the notice.

Useful? React with 👍 / 👎.

Comment thread ops/crm/deploy.sh
@@ -0,0 +1,42 @@
#!/bin/sh

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Mark the updater script executable

This script is committed with mode 100644, but both systemd service units use it directly as ExecStart and the deployment documentation also instructs operators to run it directly. Those invocations fail with permission denied before any pull or health check occurs, so the automatic update and rollback flow never runs; commit it with an executable mode or explicitly invoke it through /bin/sh everywhere.

Useful? React with 👍 / 👎.

Comment on lines +44 to +49
const normPhone = (value) => {
const digits = value.replace(/\D/g, '');
if (!digits.length) return null;
if (digits.length === 10) return `+1${digits}`;
if (digits.length === 11 && digits.startsWith('1')) return `+${digits}`;
return `+${digits}`;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Reject invalid phone numbers before inserting

When phone or SMS is selected, the request handler checks only that the raw field is nonempty, while this normalization accepts any number of digits and turns a letters-only value into null. A short value such as 1 is stored as an unusable contact number, while a letters-only phone without an email reaches the database function and produces a generic 503; validate an acceptable US/E.164 digit count and return a field-level 400 before calling the function.

Useful? React with 👍 / 👎.

Comment on lines +67 to +70
app.get('/healthz', { config: { rateLimit: false } }, async (_request, reply) => {
try {
await pool.query('SELECT 1');
return reply.send({ ok: true });

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Make health checks verify the intake contract

On an existing or incompletely migrated database, this query succeeds as soon as the API role can connect even if create_public_intake(...) is absent, has an incompatible signature, or is not executable by that role. The container is consequently reported healthy and deploy.sh accepts the rollout, although every real submission returns 503; have the health check verify the required function signature and the current role's execute privilege without creating a submission.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant