Skip to content

Improve setup instructions and documentation consistency - #15

Closed
ptr727 wants to merge 3 commits into
mainfrom
develop
Closed

Improve setup instructions and documentation consistency#15
ptr727 wants to merge 3 commits into
mainfrom
develop

Conversation

@ptr727

@ptr727 ptr727 commented Jan 15, 2026

Copy link
Copy Markdown
Owner

Enhance the README with clearer setup instructions and extension recommendations. Update branding for consistency and clarify merge rules in the documentation. Ensure all general merge types are enabled for rulesets.

…sion recommendations

Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>
* Branding

Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>

* Allow only squash merging

Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>

---------

Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>
Clarify the requirements for merge rules in the README and ensure all
general merge types are enabled for rulesets to be honored.

---------

Signed-off-by: Pieter Viljoen <ptr727@users.noreply.github.com>
Copilot AI review requested due to automatic review settings January 15, 2026 23:48
@ptr727
ptr727 enabled auto-merge (squash) January 15, 2026 23:48

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This pull request significantly improves the README documentation structure and clarity by reorganizing setup instructions into logical sections, adding new workflow documentation, and ensuring consistency in formatting. The changes make it easier for developers to set up their environment and understand the project's branching and GitHub configuration strategies.

Changes:

  • Reorganized developer environment setup into clear subsections (Tools, Git, Project Workspace, GitHub Local Actions)
  • Added comprehensive Branching Workflow and GitHub Actions Workflow sections
  • Updated GitHub Project Settings with clearer formatting and ruleset configuration
  • Alphabetized VS Code extension recommendations in workspace file
  • Added spell check entries for new Git configuration terms and author name

Reviewed changes

Copilot reviewed 1 out of 1 changed files in this pull request and generated 3 comments.

File Description
README.md Restructured documentation with improved organization, added workflow sections, clarified setup instructions, removed duplicate ruleset line
ProjectTemplate.code-workspace Alphabetized extension recommendations and added spell check words for Git configuration terms
Comments suppressed due to low confidence (3)

README.md:126

  • The instruction to save NUGET_API_KEY in "GitHub Local Actions Settings / Secrets" has been removed, but the same secret is still being referenced for Docker Hub and GitHub tokens in the "Update local secrets" section (lines 114-116). This creates an inconsistency where the GitHub Local Actions secrets setup is now split between two different sections. Consider either: (1) keeping line 126 to maintain consistency with lines 114-116, or (2) consolidating all local secrets configuration into the "GitHub Local Actions Setup" section.
  • Linux / macOS:
    • Verify that shell files are +x executable and LF line ending mode.
    • Verify that there are no duplicate files with different case names.
**README.md:138**
* Line 138 references a GitHub community discussion about merge rules not working, but the PR description states "Ensure all general merge types are enabled for rulesets." This seems contradictory - if the TODO indicates that ruleset merge rules don't work, why would the goal be to enable all merge types in rulesets? This inconsistency between the TODO comment and the stated PR objective should be clarified.
  • Update settings to start the artifact server.
**README.md:25**
* The product name should be "VS Code" (with a space) to match the official Microsoft branding, not "VSCode". This is inconsistent with the usage in .github/copilot-instructions.md which correctly uses "VS Code".
  • Install VSCode and / or Visual Studio
</details>

Comment thread README.md Outdated
Comment thread README.md Outdated
Comment thread README.md Outdated
@ptr727
ptr727 disabled auto-merge January 15, 2026 23:55

Copilot AI commented Jan 15, 2026

Copy link
Copy Markdown
Contributor

@ptr727 I've opened a new pull request, #16, to work on those changes. Once the pull request is ready, I'll request review from you.

@ptr727 ptr727 closed this Jan 16, 2026
ptr727 added a commit that referenced this pull request Jul 16, 2026
…324)

The "runner next" half of the #310 roadmap decision (docs + matrix
landed in #311). Scope per owner direction: **on-demand only,
owner-initiated** (onboarding, suspected drift, deliberate changes) - no
scheduled workflow, no App-token machinery; it runs under the local `gh`
auth.

## What it does

`python3 spec/audit.py [RepoName ...]` (default: all 21 cataloged repos)
executes the deterministic subset of `AUDIT.md` per repo, read-only:

- **Settings** vs `repo-config/settings.json` (+ computed
`has_discussions`/`default_branch`)
- **Rulesets** vs the model's payloads (normalized diff;
missing/stray/duplicate flagged; `operational` repos compare
`operational/develop.json`)
- **Secrets (names only)** vs `spec/secrets.json`: baseline +
per-mechanism required in the right stores, forbidden anywhere,
unclaimed flagged as stale
- **File presence** on the ground-truth branch per `spec/files.json`
(model-aware `develop` payload path)
- **Branch facts**: main/develop existence, registry `hasDevelop` vs
reality, and content divergence via **tree compare** - commit counts
mislead under merge-commit promotions, so only a `develop...main` diff
with changed files (main carries content develop lacks) reports

Findings are typed `DEFECT` / `LETTER` (file absent, intent unverified
per AUDIT.md section 7) / `DRIFT`; exit is non-zero on defect/letter.
`AUDIT.md` section 0 references the runner.

## Live-tested (read-only)

- **Financial-Modeling** - reports exactly its known standup state: the
#14 files (`WORKFLOW.md`, `version.json`, `repo-config/*`,
`dependabot.yml`) absent on `main` pending PR #15;
settings/rulesets/secrets clean (as applied).
- **ProjectTemplate / PlexCleaner / HomeAutomation-Config** - exercised
the release, docker-secrets, and operational paths. Genuine drift
surfaced (stale hub secrets incl. `NINJA_API_KEY`/`NUGET_API_KEY`;
HomeAutomation-Config missing the baseline App pair; PlexCleaner missing
the repo-config carry) - reported to the maintainer separately, not
acted on.

Refs #310 (the cold-start self-test matrix remains the roadmap's open
acceptance item).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ptr727 added a commit that referenced this pull request Jul 20, 2026
…write rules, runbook fix, and a portable enforcement kit (#364/#365/#366) (#367)

Addresses the cross-repo comment incident (#364, #365, #366): an
autonomous PR-review loop hand-fabricated a GraphQL thread node id and
fired a reply mutation with output suppressed (`>/dev/null 2>&1 ||
true`). Because node ids resolve globally, the guessed id landed on a
real thread in a **stranger's repo** (`mankatcheung/job-finder` #15) and
the write **succeeded under the maintainer's identity**, while the
suppressed output read as a harmless failure.

Three root causes -> three rules, applied in three guard layers.

## 1. Carried template rule (travels to the fleet)

New `AGENTS.md` section **`## Repository Boundaries and Write Safety`**
(after Foundational Principles, beside the existing never-force-push
safety rules), added to the carried-sections allowlist in
`spec/files.json`:

- **Write only to the current project's own repository** - a broad
identity is capability, not permission.
- **Never fabricate, guess, or reuse an identifier passed to a write** -
capture every id from a live query in the same session.
- **A write is never a probe, and its output is never suppressed** - a
write that appears to fail is verified, not assumed harmless.

## 2. Runbook fix (`.github/copilot-instructions.md`, carried whole)

The reply/resolve example **modeled the footgun**: a disembodied `-F
threadId="PRRT_..."` literal disconnected from the
`reviewThreads(first:100)` query above it. Rewritten to capture `$TID`
from that live query with an empty-result guard, use `-F
threadId="$TID"`, show the mutation output, and confirm `isResolved`
before closing. Added an intra-doc cross-reference to the new section.
(The `requestReviews` example already captured its ids from live
queries.)

## 3. Portable per-machine safety kit (`host-setup/agent-safety/`, not
carried)

The prose layers are necessary but not sufficient - the incident
happened *under* a "Verification Discipline" section. This adds the
mechanical backstop and makes it deployable everywhere as the first
thing on a new system:

- **`gh-write-guard.py`** - a PreToolUse hook that DENIES the three
write footguns (suppressed-output mutation, literal-node-id mutation,
cross-origin explicit target). Reads pass through. It fires even in
autonomous / bypass-permissions sessions - the exact condition of the
incident. `--selftest` runs an 11-case decision matrix.
- **`claude-md-safety.md`** - the same rules as host-scope guidance,
appended into `~/.claude/CLAUDE.md` so every session on a machine
inherits them, including ad-hoc work outside any project.
- **`install.py`** + thin `install.sh` / `install.ps1` wrappers - one
tested cross-platform installer: self-tests the hook before registering
it, merges the settings.json entry without clobbering other keys,
updates the CLAUDE.md block in place. Fully idempotent.

This is the rollout #365 tracks; its per-machine checklist becomes "run
`install.sh` / `install.ps1`".

## Deliberately out of scope
- **Credentials** stay out-of-band (per owner decision): a fine-grained
PAT limited to owned repos is stronger structural defense but is
per-machine credential setup, not a carried rule.
- **No `spec/audit.py` change**: section carriage is intent-checked, not
mechanized; a literal-id grep on a whole-carried runbook is fragile.
Raised separately: "Verification Discipline" is also absent from the
carried-sections allowlist - a follow-up, not bundled here.

## Verification (driven, not assumed)
- Hook `--selftest`: 11/11 incl. the exact incident (deny), the empty-id
guard idiom (allow), reads (allow).
- Real stdin path emits `hookSpecificOutput`/`permissionDecision:
"deny"` for the incident command; reads and non-Bash tools pass through;
malformed input never interferes.
- Installer: fresh install, same-version re-run (idempotent), and
version-upgrade replace-in-place all verified against throwaway homes;
`settings.json` merge preserves other keys.
- `spec/validate.py`, markdownlint (whole-repo `**/*.md`),
editorconfig-checker: clean.

**Note on the section-name/anchor lockstep:** the copilot-instructions
cross-reference `#repository-boundaries-and-write-safety` and the
`spec/files.json` `sections` entry both depend on the section title;
rename them together if ever changed.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.

3 participants