Conversation
…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>
Contributor
There was a problem hiding this comment.
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
+xexecutable andLFline ending mode. - Verify that there are no duplicate files with different case names.
- Verify that shell files are
**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>
ptr727
disabled auto-merge
January 15, 2026 23:55
Contributor
This was referenced Jul 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>
This was referenced Jul 20, 2026
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.