Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
2c10920
docs(rules): author rules to one shared standard
zolotokrylin Jul 14, 2026
32117d0
docs(rules): keep the standard independent of its consumers
zolotokrylin Jul 14, 2026
31d14fd
docs(rules): stand up the rules system and authoring rules
zolotokrylin Jul 14, 2026
d8e473e
docs(rules): address review on the authoring rules
zolotokrylin Jul 14, 2026
4d0939c
docs(rules): run the contribution model as rules
zolotokrylin Jul 14, 2026
b510e1e
docs(rules): run communication and PR requirements as rules
zolotokrylin Jul 14, 2026
5e005a6
docs(rules): run the review process as rules
zolotokrylin Jul 14, 2026
7eaad08
docs(rules): drop the repeated title heading from rules
zolotokrylin Jul 14, 2026
be7f08f
Merge branch 'docs/shared-rule-authoring-standard' into docs/rules-ge…
zolotokrylin Jul 14, 2026
19d7ace
docs(rules): drop the repeated title heading from rules
zolotokrylin Jul 14, 2026
bdf0d87
Merge branch 'docs/rules-getting-started' into docs/rules-pr-requirem…
zolotokrylin Jul 14, 2026
515ab96
docs(rules): drop the repeated title heading from rules
zolotokrylin Jul 14, 2026
eb07cb7
Merge branch 'docs/rules-pr-requirements' into docs/rules-review
zolotokrylin Jul 14, 2026
117ca24
docs(rules): drop the repeated title heading from rules
zolotokrylin Jul 14, 2026
72aa8ad
docs(rules): focus DEV-040 on followable rule links
zolotokrylin Jul 14, 2026
d822edf
Merge branch 'docs/shared-rule-authoring-standard' into docs/rules-ge…
zolotokrylin Jul 14, 2026
3ff2390
Merge branch 'docs/rules-getting-started' into docs/rules-pr-requirem…
zolotokrylin Jul 14, 2026
c01dc7a
Merge branch 'docs/rules-pr-requirements' into docs/rules-review
zolotokrylin Jul 14, 2026
3eb0bb1
docs(rules): enforce markdown lint on push with a pinned hook
zolotokrylin Jul 14, 2026
7365893
Merge branch 'docs/rules-pr-requirements' into docs/rules-review
zolotokrylin Jul 14, 2026
62d3e5d
docs(rules): stop DEV-040 duplicating the lint rule
zolotokrylin Jul 14, 2026
ea3ca9e
Merge branch 'docs/shared-rule-authoring-standard' into docs/rules-ge…
zolotokrylin Jul 14, 2026
6a41b64
chore: stop tracking node_modules
zolotokrylin Jul 14, 2026
ec11e7d
Merge branch 'docs/shared-rule-authoring-standard' into docs/rules-ge…
zolotokrylin Jul 14, 2026
4debe41
Merge branch 'docs/rules-getting-started' into docs/rules-pr-requirem…
zolotokrylin Jul 14, 2026
2b2ce94
Merge branch 'docs/rules-pr-requirements' into docs/rules-review
zolotokrylin Jul 14, 2026
3d97d23
docs(rules): cap the Problem statement length
zolotokrylin Jul 14, 2026
986f684
Merge branch 'docs/shared-rule-authoring-standard' into docs/rules-ge…
zolotokrylin Jul 14, 2026
4048c46
Merge branch 'docs/rules-getting-started' into docs/rules-pr-requirem…
zolotokrylin Jul 14, 2026
a83db41
docs(rules): tighten the DEV-380 problem statement
zolotokrylin Jul 14, 2026
35281c6
Merge branch 'docs/rules-pr-requirements' into docs/rules-review
zolotokrylin Jul 14, 2026
ebff41a
docs(rules): distinguish the Solution from the acceptance checks
zolotokrylin Jul 14, 2026
98eff77
Merge branch 'docs/shared-rule-authoring-standard' into docs/rules-ge…
zolotokrylin Jul 14, 2026
19b4764
Merge branch 'docs/rules-getting-started' into docs/rules-pr-requirem…
zolotokrylin Jul 14, 2026
7d0107e
Merge branch 'docs/rules-pr-requirements' into docs/rules-review
zolotokrylin Jul 14, 2026
5ed41a5
docs(rules): rewrite authoring-rule solutions as method not checks
zolotokrylin Jul 14, 2026
6fe86e7
Merge branch 'docs/shared-rule-authoring-standard' into docs/rules-ge…
zolotokrylin Jul 14, 2026
903b03a
Merge branch 'docs/rules-getting-started' into docs/rules-pr-requirem…
zolotokrylin Jul 14, 2026
0f9fd3e
Merge branch 'docs/rules-pr-requirements' into docs/rules-review
zolotokrylin Jul 14, 2026
13c2e78
docs(rules): allow numbered-list solutions for steps
zolotokrylin Jul 14, 2026
801a62f
Merge branch 'docs/shared-rule-authoring-standard' into docs/rules-ge…
zolotokrylin Jul 14, 2026
ea16954
Merge branch 'docs/rules-getting-started' into docs/rules-pr-requirem…
zolotokrylin Jul 14, 2026
4e26ffe
Merge branch 'docs/rules-pr-requirements' into docs/rules-review
zolotokrylin Jul 14, 2026
a1bc3e2
Merge remote-tracking branch 'origin/main' into docs/rules-getting-st…
zolotokrylin Jul 14, 2026
c74e409
Merge branch 'docs/rules-getting-started' into docs/rules-pr-requirem…
zolotokrylin Jul 14, 2026
2198a7d
Merge branch 'docs/rules-pr-requirements' into docs/rules-review
zolotokrylin Jul 14, 2026
78751cc
docs(rules): split goal intake into ownership, spec, ETA, and problems
zolotokrylin Jul 15, 2026
c0e096d
Merge branch 'docs/rules-getting-started' into docs/rules-pr-requirem…
zolotokrylin Jul 15, 2026
78d7e84
Merge branch 'docs/rules-pr-requirements' into docs/rules-review
zolotokrylin Jul 15, 2026
88dac03
Merge branch 'main' into docs/rules-pr-requirements
zolotokrylin Jul 15, 2026
e2fc967
docs(rules): link canonical docs for external facts in DEV-330
zolotokrylin Jul 15, 2026
d4b119b
Merge branch 'docs/rules-pr-requirements' into docs/rules-review
zolotokrylin Jul 15, 2026
e6aca17
docs(rules): rewrite review-rule solutions as method not checks
zolotokrylin Jul 15, 2026
d57ecab
docs(rules): scope a PR to one or two hours
zolotokrylin Jul 15, 2026
98e7b61
docs(rules): update user-facing docs in the same PR
zolotokrylin Jul 15, 2026
48339d1
docs(rules): keep each fact in one canonical place
zolotokrylin Jul 15, 2026
be4e6c4
docs(rules): audit the rules system on push
zolotokrylin Jul 15, 2026
d457e9d
docs(rules): point user-facing docs at the shipped docs path
zolotokrylin Jul 15, 2026
5b11323
docs(rules): index the docs tree and give end users their own folder
zolotokrylin Jul 15, 2026
eface59
docs(rules): audit docs-tree reachability on push
zolotokrylin Jul 15, 2026
f8fb6b9
docs(rules): require a complete root README
zolotokrylin Jul 15, 2026
c180747
docs(rules): index docs through the nearest README, not shortcuts
zolotokrylin Jul 15, 2026
86d321c
docs(rules): apply review fixes across PR requirement and review rules
zolotokrylin Jul 15, 2026
f69a1c1
docs(rules): split the PR lifecycle into draft-open and ready gates
zolotokrylin Jul 15, 2026
b1f9d8e
docs(rules): stop DEV-338 restating the docs-index link DEV-337 owns
zolotokrylin Jul 15, 2026
f6408d7
docs(rules): re-request review explicitly after addressing changes
zolotokrylin Jul 15, 2026
3430eb6
docs(rules): thin CONTRIBUTING to a pointer at the canonical rules index
zolotokrylin Jul 15, 2026
eb42916
docs(rules): write a Spec in the standard format
zolotokrylin Jul 15, 2026
9f225e1
Revise DEV-125 documentation format and sections
zolotokrylin Jul 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 78 additions & 0 deletions .githooks/pre-push
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
#!/usr/bin/env bash

# Exit immediately on error, treat unset variables as errors, fail on pipe errors
set -euo pipefail

ROOT=$(git rev-parse --show-toplevel)
RUMDL="$ROOT/node_modules/.bin/rumdl"

# Intentionally only use the npm-pinned rumdl (package.json devDependency),
# never a globally installed binary (e.g. via cargo/brew) on PATH. Different
# rumdl versions format markdown differently, so falling back to whatever
# version a dev happens to have installed causes the pre-push hook to
# reformat files inconsistently across machines and block pushes with
# unrelated formatting diffs. See:
# https://github.com/holdex/marketing-website/issues/1138
if [ ! -x "$RUMDL" ]; then
echo "rumdl not found — run npm install in the repo root"
exit 1
fi

cd "$ROOT"

# git passes one line per ref being pushed via stdin:
# <local_ref> <local_sha> <remote_ref> <remote_sha>
while IFS=' ' read -r local_ref local_sha remote_ref remote_sha; do
# All-zeros local SHA means the ref is being deleted — nothing to check
if [ "$local_sha" = "0000000000000000000000000000000000000000" ]; then
continue
fi

if [ "$remote_sha" = "0000000000000000000000000000000000000000" ]; then
# All-zeros remote SHA means the branch doesn't exist on the remote yet.
# Diffing against git's empty-tree object would treat every file in the repo
# as "added" and lint the whole tree, blocking the push on unrelated
# pre-existing formatting debt. Instead, scope to only what this branch
# changed relative to its base: the merge-base against the default branch.
# Fall back to the empty-tree object if that can't be resolved (e.g. no
# origin/HEAD and no origin/main), so a first push is never left unchecked.
default_ref=$(git symbolic-ref --quiet --short refs/remotes/origin/HEAD 2>/dev/null || echo "origin/main")
base=$(git merge-base "$default_ref" "$local_sha" 2>/dev/null || echo "4b825dc642cb6eb9a060e54bf8d69288fbee4904")
else
# Branch already exists — only check files changed in the commits being pushed
base="$remote_sha"
fi

# List markdown files touched by the commits about to be pushed.
# --diff-filter=ACMR keeps Added/Copied/Modified/Renamed (the new path) and
# excludes Deleted, so renamed-away or removed files aren't linted (they no
# longer exist on disk and would fail rumdl with "File not found").
files=$(git diff --name-only --diff-filter=ACMR "$base" "$local_sha" -- '*.md' 2>/dev/null || true)

if [ -n "$files" ]; then
echo "$files" | xargs "$RUMDL" check --fix

# If rumdl modified any of the linted files the working tree will be dirty —
# block the push. Scope the check to the linted files so unrelated uncommitted
# changes elsewhere in the tree are not misattributed to rumdl.
if ! git diff --quiet -- $files; then
echo ""
echo "rumdl check --fix modified the following files — commit the fixes and push again:"
git diff --name-only -- $files
exit 1
fi
fi

# When any doc changed, audit the rules system and the docs tree. The checks
# are holistic (cross-file: id-to-filename, dependency resolution, index
# completeness, and reachability from the root README), so a change to one
# file can orphan or break an invariant in another. Query git directly (not the
# ACMR-filtered $files) so a deletion — e.g. removing a rule — still triggers
# the audit and cannot silently break a dependency or index link.
docs_changed=$(git diff --name-only "$base" "$local_sha" -- 'docs/' 'README.md' 2>/dev/null || true)
if [ -n "$docs_changed" ]; then
node "$ROOT/scripts/check-rules.mjs"
fi
done

exit 0
33 changes: 22 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,36 @@ starts here.

## For Developers

_Developers_ are everyone creating valuebusiness developers, designers,
_Developers_ are everyone creating value: business developers, designers,
engineers, marketers, and beyond. We build businesses, products, partnerships,
customer relationships, processes, and delivery methods, crafting the future we
envision.

Align with:

- [Contributing Guidelines](./docs/CONTRIBUTING.md)
- [Developer Rules](./docs/rules/README.md)
- [Advocacy Guidelines](./docs/ADVOCACY.md)
- [Code of Conduct](./docs/CODE_OF_CONDUCT.md)
- [Leave Policy](./docs/LEAVE_POLICY.md)
- [Compensation Guide](./docs/COMPENSATION.md)
- [Referral Program](./docs/REFERRAL.md)
- [Expenses](./docs/EXPENSES.md)
Everything is indexed from the [documentation index](./docs/README.md): start
there to reach the contributing guide, the developer rules, and the rest.

Subscribe to repository notifications to stay updated with frequent fixes and
improvements.

## Setup

### Local

After cloning, run `npm install` once to install the pinned `rumdl` version and
enable the markdown lint and rules-audit checks on push (`postinstall` sets
`core.hooksPath` to `.githooks` automatically).

### Stage / Preview

This repository is documentation, not a deployed service. Open a pull request to
preview changes: reviewers read the rendered markdown on the PR branch before it
merges.

### Production

The `main` branch is the published source of truth, and merged changes are live
for the whole organization immediately. There is no separate hosting to deploy.

## Claude Code Skills

Clone this repository locally and symlink the commands directory to make all
Expand Down
Loading
Loading