Skip to content

docs(security): add a chittymarket-specific SECURITY.md - #100

Merged
chitcommit merged 2 commits into
mainfrom
docs/chittymarket-security
Sep 4, 2026
Merged

docs(security): add a chittymarket-specific SECURITY.md#100
chitcommit merged 2 commits into
mainfrom
docs/chittymarket-security

Conversation

@chitcommit

@chitcommit chitcommit commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Why not the boilerplate

A fleet sweep left an identical templated SECURITY.md untracked in 55 CHITTYOS repos (committed in 3: chittyentity, chittyops, chittysecrets). Stripping the service name and diffing chittymarket's copy against ch1tty-viewport's leaves exactly one differing line — the title.

It isn't merely generic here, it's false. It declares an auth provider, OAuth 2.0 PKCE, JWT verification, and Cloudflare Zero Trust for a repo whose CHARTER.md explicitly disclaims network APIs, identity generation, and token provisioning. Verified: no package.json, no src/, no wrangler.*. A compliance doc asserting controls that don't exist is worse than an absent one.

What replaces it

A policy grounded in the actual exposure — supply chain. This repo is the manifest Claude Code reads via /plugin add, so every artifact listed executes in an operator session with that operator's full tool access. A merge to main reaches developer machines with no sandbox in between.

Each claim was checked against the tree, not assumed:

Claim Verified against
canonical/ is truth; skills/codex-skills/openclaw-agents are projections repo layout + CLAUDE.md
4 plugin sources are external and unpinned (no ref/tag/commit) .claude-plugin/marketplace.json — chittyhelper, chittyagent, chittycommand, legal-arsenal
hooks.json registers a PreToolUse type: command hook matching .* plugins/chittyos-governance/hooks/hooks.json
…but its 10 gating rules live in operator-local ~/.claude/hooks/, referenced by filename only same file's rules[]
Smoke jobs report schema-only vs real-runtime mode local run output

The finding this surfaced

A CI job only gates if branch protection requires it.

Not hypothetical. main had protection enabled with required_status_checks.contexts: []no check could block a merge. PR #99 merged while openclaw runtime smoke was still pending.

Fixed: the three validate-chittymarket jobs are now required contexts on main.

{"contexts":["lint + test + manifest idempotency","codex runtime smoke","openclaw runtime smoke"],"strict":false}

Reviews are deliberately not required — that would block the non-interactive branch-completion flow, and self-approval isn't possible. Force-push and deletion were already blocked; conversation resolution was already required.

This PR is the first live test of that gate.

Deliberately not included

schema.json from the same sweep stays uncommitted (not deleted). It declares a {service,status,timestamp} API response contract for a repo that serves no API.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AKKxbsxh4tozUMzBKADSTd

Summary by CodeRabbit

  • Chores

    • Validation now runs for every pull request, improving consistency across changes regardless of which files are modified.
  • Documentation

    • Added a security policy covering the project’s threat model, trust boundaries, secrets handling, CI validation, and vulnerability reporting process.

A fleet sweep left an identical templated SECURITY.md untracked in 55
CHITTYOS repos (committed in 3). Stripping the service name and diffing
chittymarket's copy against ch1tty-viewport's leaves exactly one
differing line: the title.

That boilerplate is wrong here, not merely generic. It declares an auth
provider, OAuth 2.0 PKCE, JWT verification and Cloudflare Zero Trust for
a repo whose CHARTER explicitly disclaims network APIs, identity
generation, and token provisioning — chittymarket has no package.json,
no src/, no wrangler config, and no runtime. A compliance document
asserting controls that do not exist is worse than an absent one.

Replaced with a policy grounded in the actual exposure, which is supply
chain: this repo is the manifest Claude Code reads via /plugin add, so
every artifact listed here executes in an operator session with that
operator's full tool access. A merge to main reaches developer machines
with no sandbox in between — closer to a deploy than to a docs change.

Documents, each verified against the tree rather than assumed:

- canonical/ is source of truth; plugins/*/skills, codex-skills and
  openclaw-agents are generated projections. Reviewing a projection is
  not reviewing the artifact.
- Four plugin entries resolve to external GitHub repos with no ref, tag
  or commit pinned, so they install whatever the default branch holds.
  Review here does not cover them.
- hooks.json registers a PreToolUse command hook matching .*, but the
  ten rules that actually gate live in operator-local
  ~/.claude/hooks/ and are referenced by filename only — so this repo
  cannot guarantee a rule it names is installed or unmodified.
- Both smoke jobs report schema-only vs real-runtime mode; a green check
  in schema-only mode is weaker evidence than it looks.
- A CI job only gates if branch protection requires it.

That last point was not hypothetical. main had protection enabled with
required_status_checks.contexts empty, so no check could block a merge —
PR #99 merged while openclaw runtime smoke was still pending. The three
validate-chittymarket jobs are now required contexts on main.

schema.json from the same sweep is deliberately left uncommitted: it
declares a {service,status,timestamp} API response contract for a repo
that serves no API.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKKxbsxh4tozUMzBKADSTd
@chitcommit
chitcommit enabled auto-merge (squash) September 3, 2026 23:57
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@coderabbitai

coderabbitai Bot commented Sep 3, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Team

Run ID: 16c4c4c6-7811-46a7-838e-7842daca675c

📥 Commits

Reviewing files that changed from the base of the PR and between b6e18fe and f2912b9.

📒 Files selected for processing (2)
  • .github/workflows/validate-chittymarket.yml
  • SECURITY.md

📝 Walkthrough

Walkthrough

ChittyMarket now runs its validation workflow on every pull request. A new SECURITY.md defines the repository threat model, trust boundaries, credential rules, CI controls, and vulnerability reporting process.

Changes

Security Policy

Layer / File(s) Summary
Policy scope and threat model
SECURITY.md
Adds policy metadata and documents the absence of a runtime attack surface and the supply-chain exposure from installed plugin artifacts.
Trust boundaries and credential controls
SECURITY.md
Documents canonical sources, generated projections, external plugin sources, operator-local hooks, and credential handling through ChittySecrets and ChittyConnect.
CI validation and reporting
.github/workflows/validate-chittymarket.yml, SECURITY.md
Runs validation on every pull request. Documents CI gates, fallback loader behavior, branch protection requirements, and security issue reporting.

Estimated code review effort: 2 (Simple) | ~10 minutes

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/chittymarket-security

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Requiring the three validate-chittymarket jobs on main deadlocked this
very PR. The workflow was `paths:`-filtered to canonical/, plugins/,
.claude-plugin/, marketplace.json, profiles.json and scripts/; a PR
touching only SECURITY.md matches none of them, so the workflow never
ran, the three required checks never reported, and mergeStateStatus sat
at BLOCKED with nothing able to clear it.

Path-filtered workflows and required status checks are mutually
exclusive unless a companion always-runs workflow reports the same check
names — a duplication that drifts the moment a job is renamed. Removing
the filter is the smaller, more honest mechanism.

The repo is public, so the additional runs cost nothing; each job is
under a minute and already carries timeout-minutes: 5 and
cancel-in-progress concurrency.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKKxbsxh4tozUMzBKADSTd
@chitcommit
chitcommit merged commit 5bbe008 into main Sep 4, 2026
6 of 7 checks passed
@chitcommit
chitcommit deleted the docs/chittymarket-security branch September 4, 2026 00:00
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