Ship the repository doctor as a devenv module, beside .doctor.just #95
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#95
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Proposal
Ship Ting's repository doctor as a devenv module (
ting-doctor.nix) alongside the existing.doctor.just, so repos can migrate offjust+direnv+nix developonto devenv without a flag day..doctor.juststays in this repo for every repo not yet migrated. It is removed only when the last consumer has moved.Design
ting-doctor.nixis the same doctor, as devenvtaskswithpackage = pkgs.nushell. The nushell bodies are carried over byte-for-byte; what changed is the surrounding mechanism:flake(56 lines, textually patchednushell/guminto the firstmkShellinflake.nix) — deleted.packagesin the module is the declaration now, and a missing package fails the shell loudly.environment(40 lines, enforced an.envrcheader and gated every recipe on a hand-setTING_DEVSHELL="active"marker) — deleted.$env.DEVENV_ROOTis set by devenv itself, so it is both the repo-root lookup and the proof of a loaded environment.doctor-cached([cache(inputs=..., extra=datetime_utc("%Y%m%d%H"))]) — deleted. A sharedstatusgate script carries the same policy: re-run when a lockfile is newer than the last success, or hourly.sync(raw-HTTP self-fetch from this repo's main branch into an ignored dotfile) — deleted. Consumers take this file as a devenv input;devenv updateis the sync and the rev lands in theirdevenv.lock.ting:pin— new. The only check with no ancestor in.doctor.just: consumers now pin nixpkgs twice (flake.lockanddevenv.lock), so this asserts the two agree. Warns rather than rewriting a lockfile behind the operator.Everything else —
openspec-reference,openspec-health,check,remotes,default-branch,governance,gitignore,fastlane,wire,adopt— is Ting forge policy and ports over unchanged.wireandadoptbecome devenvscriptson PATH guarded bygum confirm, since they edit tracked files and must stay deliberate acts.Specification Delta
ting-doctor.nixat repo root: a devenv module exportingpackages,tasks."ting:*", andscripts.ting-{wire,adopt}..doctor.justremains, serving unmigrated repos.Tasks
ting-doctor.nix..envrc/.doctor.justusage.Verification
Proven from
lar.ad/flake-opsagainst this file as apath:input:devenv tasks listrenders the chainting:pin -> openspec-reference -> openspec-health -> config -> remotes -> default-branch -> governance -> gitignore -> fastlane -> ting:doctor -> devenv:enterShell, every task carrying the status gate.devenv tasks run ting:doctorcompletes green..doctor.justoriginals after the Nix''-string round-trip (0 mismatches).