The doctor: one .doctor.just, distributed from the steward #8
No reviewers
Labels
No labels
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Meta/Campaign
Meta/Epic
Meta/Session
Priority/Critical
Priority/High
Priority/Low
Priority/Medium
Reviewed/Confirmed
Reviewed/Curated
Reviewed/Duplicate
Reviewed/Invalid
Reviewed/Won't Fix
Scope/Campaign
Status/Abandoned
Status/Blocked
Status/Conflicted
Status/In Progress
Status/In Review
Status/Need Grooming
Status/Need More Info
Status/Ready
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Ting/Jostoph!8
Loading…
Reference in a new issue
No description provided.
Delete branch "agent.teyla/Jostoph:tango/7-doctor-just"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Lands the canonical
.doctor.justhere, beside.fastlane.toml(#6). Three hand-copied variants exist today —vordr/.doctor.just,dendrite/.justfile, and modron's — and they had drifted apart silently;dendrite'simmutable_heads()carries(trunk().. & ~mine())that the others do not. One copy, fetched rather than copied, is the fix.In scope
.doctor.justat the repository root, fetched raw over anonymous HTTPS by every consuming repo.sync— fetches the canonical copy over the local one ondefault, so a repo self-updates.check— one table of settings with ascopecolumn (gitrepo-local,jjrepo-local).governance— report-only: does a repo on a Ting forge remote declare Ting governance inAGENTS.md.Out of scope
governancereports and does not editAGENTS.md— a governance declaration belongs in a reviewed commit, not a side effect of a setup tool.git --globalwould make every repo on a machine inherit whatever the last one wanted.jj git pushbypasses git hooks entirely (apre-pushhook blockedgit push, then jj pushed the same branch past it), and jj has no per-remote push allowlist. Nothing here pretends otherwise; that is server-side work.doctor-fastlane, which follows once this lands and #6 defines the manifest.Boundary
Public repo, executed by every consumer: no credential values, only the
$FORGEJO_ACCESS_TOKENreference inside the helper string.syncmakes local edits deliberately temporary — improvements land here or they are lost. The write is staged beside the target and renamed, since the file is read by the process rewriting it.nix := require("nix")is the only host dependency.nuandgumdeliberately are not: they come from the consuming repo's devShell, and requiring them on PATH would test the wrong environment — passing on a machine that has them ambiently whileflake.nixomits them, failing on a clean machine where the devShell is correct.Two things this deliberately does not catch, measured rather than assumed, and recorded in the file so nobody re-derives them:
gumstill runs green, becausenix developdoes not isolate the environment and the host's~/.nix-profile/bin/gumleaks in.--ignore-envdoes catch it but is unusable — it also strips$FORGEJO_ACCESS_TOKENand dropsnixoff PATH.git config --localneeds a real git work tree, so a jj/tango workspace (no.git) exits 128. That raises rather than pretending; run the doctor from the colocated checkout.Acceptance
Verified against this machine's repos:
doctorreports every row and is idempotent — second run rewrites nothing,fixed: falsethroughout.release_horizon()→❌ → 🔧→ correct value); a key already correct is left alone.git.write-change-id-headeristrueby jj built-in default since 0.43 (upstream change for Gerrit compatibility), so it reads ✅ without a repo-local write. The row stays to catch a user-level config turning it off.git config --getandjj config getexit 1 on a missing key, which is a value; anything above raises. A malformed key surfaced as a real error during development instead of becoming"???".syncreplaces on difference (+94/-119against a real remote), is silent when identical, and soft-fails keeping the local copy on 404 and on DNS failure.Note for review: this repo has no
fastlanebranch, so the doctor'strunk()resolves toroot()when run here. That is #6's territory, not this PR's.Closes #7