From ee9a2712401e150915f780e696d30883f907b7de Mon Sep 17 00:00:00 2001 From: Laksh Sadhwani Date: Sun, 1 Nov 2026 11:28:02 +0530 Subject: [PATCH] Move Go module path to github.com/attentionfs/writ Co-Authored-By: Claude Opus 5.5 --- .goreleaser.yml | 6 +++--- AGENTS.md | 8 ++++---- CHANGELOG.md | 22 ++++++++++++++-------- CONTRIBUTING.md | 2 +- README.md | 22 +++++++++++----------- SECURITY.md | 4 ++-- cmd/writ/approve.go | 2 +- cmd/writ/approve_test.go | 2 +- cmd/writ/attest.go | 2 +- cmd/writ/attest_test.go | 2 +- cmd/writ/discard.go | 2 +- cmd/writ/discard_test.go | 2 +- cmd/writ/merge.go | 6 +++--- cmd/writ/merge_test.go | 4 ++-- cmd/writ/propose.go | 2 +- cmd/writ/status.go | 10 +++++----- cmd/writ/status_test.go | 2 +- go.mod | 2 +- internal/drift/compute_test.go | 2 +- internal/drift/drift.go | 2 +- internal/evidence/run.go | 2 +- internal/evidence/run_test.go | 2 +- internal/gate/gate.go | 6 +++--- internal/gate/gate_test.go | 6 +++--- internal/render/render.go | 8 ++++---- internal/render/render_test.go | 8 ++++---- 26 files changed, 72 insertions(+), 66 deletions(-) diff --git a/.goreleaser.yml b/.goreleaser.yml index 14ba32a..228b4f0 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -34,7 +34,7 @@ checksum: release: github: - owner: Laaaaksh + owner: attentionfs name: writ draft: false prerelease: auto @@ -43,10 +43,10 @@ brews: - name: writ directory: Formula repository: - owner: Laaaaksh + owner: attentionfs name: homebrew-writ token: "{{ .Env.HOMEBREW_TAP_TOKEN }}" - homepage: "https://github.com/Laaaaksh/writ" + homepage: "https://github.com/attentionfs/writ" description: "Agreed scope of work, approved before any code exists" license: "MIT" install: | diff --git a/AGENTS.md b/AGENTS.md index 44a25f8..57c0d82 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -3,20 +3,20 @@ This file is the project's committed home for project-intrinsic agent knowledge: build, test, release, architecture, and sharp-edge notes that should travel with the code. - Add durable project-specific notes here as they are discovered through real work. -- Module path: `github.com/Laaaaksh/writ`. Only dependencies allowed: `spf13/cobra` and `BurntSushi/toml` — do not add others without a decision. +- Module path: `github.com/attentionfs/writ`. Only dependencies allowed: `spf13/cobra` and `BurntSushi/toml` — do not add others without a decision. - All internal packages (`writ`, `gate`, `render`, `evidence`, `drift`) are fully implemented; do not change exported signatures without a decision. - The writ lifecycle is `propose` (agent drafts a complete writ, unapproved) → `approve` (human tightens it in `$EDITOR`, `--yes` to skip) → implement → `attest`/`unattest ` (claim or clear a criterion as met, `--human` for a human claim) → `status`/`merge`, with `discard` throwing away an unwanted open writ (rejected proposal, abandoned work, corrupt state file) so `propose` is unblocked. There is no `writ open`: a hand-authored writ from a blank file was the failure mode this replaced. `writ.Writ.Approved` (nil = proposed) and `Criterion.Attestation` gate `gate.Decide`'s auto-merge path; `render.Status` keeps agent claims visually distinct from human confirmation and from machine-verified evidence — never blur the three. Intake (`propose` and `approve`) validates via `writ.Writ.ValidateProposal`, which additionally refuses criteria arriving with `met`/`attestation` set — claims exist only after approval, so pre-assessed drafts cannot self-bless through `approve --yes`; plain `Validate` stays the validator for mid-flight state. Author-written TOML (stdin/`--file` drafts, `$EDITOR` saves) parses through exported `writ.Parse`, which refuses keys naming no Writ field so typos are reported instead of silently dropped; `writ.Load` deliberately stays lenient for Save-written `.writ/current.toml` reads so version skew cannot strand an open writ. - `.writ/current.toml` is runtime output, never committed. Package-level constant `writPath` in `internal/writ/writ.go` is the source of truth for its location. Two defenses keep it that way: `propose` seeds `.writ/` into the repo-local `.git/info/exclude` (best-effort, skipped when an ignore rule already covers it; resolved via `--git-common-dir` because git reads info/exclude only from the common dir — seeding a linked worktree's own gitdir silently does nothing) so blanket `git add -A` cannot track the state file, and `decide()` (status/merge) refuses a git-indexed state file (`cmd/writ.writStateTracked`, staged counts too) with `git rm --cached` guidance — a tracked copy leaves stale state on base and blocks checkout with raw git errors. - `cmd/writ` commands signal a specific process exit code (0 auto-mergeable, 1 needs human, 2 no writ open) by returning the unexported `exitCodeErr{code}` from `RunE`; `main()` unwraps it via `errors.As` before falling back to the default exit-1 path. Command tests that need a real repo `os.Chdir` into a `t.TempDir()` git repo, since `repoRoot()` shells out to `git rev-parse --show-toplevel` against the process cwd rather than taking a directory argument. - The README's FAQ section states verifiable facts about the codebase ("no HTTP client anywhere in it or its two dependencies", "reads no API keys — only `EDITOR`/`VISUAL`/`NO_COLOR`/`WRIT_VERIFY_TIMEOUT`", "only child processes are `git` and POSIX `sh`"), and its `$ writ status` fence embeds byte-real output for the same writ the propose example creates. These rot silently when reality changes: adding a dependency, an env read, a subprocess, or changing `render.Status` output means re-verifying/updating them (`rg "net/http|Getenv|LookupEnv|exec.Command" --type go` covers the FAQ trio). Capture doc examples by running the real binary in a throwaway repo, never by hand-typing output. -- This repo is on the captain's **personal** GitHub account (`Laaaaksh`). The default `gh` login has changed between the personal and work profiles over time (as of 2026-08-22 the personal account is the default and `~/.config/gh-personal` no longer exists), so never assume either way: verify with `gh api user --jq .login` (must print `Laaaaksh`) before any GitHub CLI operation, and if it prints a work account, export `GH_CONFIG_DIR="$HOME/.config/gh-personal"` first — recreating that dir via `gh auth login` if needed. The default branch is `master`, not `main`. +- This repo is on the captain's **personal** GitHub account (`attentionfs`). The default `gh` login has changed between the personal and work profiles over time (as of 2026-08-22 the personal account is the default and `~/.config/gh-personal` no longer exists), so never assume either way: verify with `gh api user --jq .login` (must print `attentionfs`) before any GitHub CLI operation, and if it prints a work account, export `GH_CONFIG_DIR="$HOME/.config/gh-personal"` first — recreating that dir via `gh auth login` if needed. The default branch is `master`, not `main`. - A repo commit-identity guard hook requires the git author email to match the personal class (`laksh.sadhwani07@gmail.com`) for this remote — set via local (not global) `git config user.email` if a commit is rejected. -- Release packaging: `.github/workflows/ci.yml` (ubuntu build/vet/gofmt/test plus a separate `Test (macOS)` job for the darwin release target; the macOS job must stay its own job, not a matrix on `test`, because branch protection requires the literal check name `Test` and matrix suffixes like `Test (ubuntu-latest)` would never satisfy it — the gofmt gate lives inside `Test` so unformatted code cannot land even though only that one check is required), `.github/workflows/release.yml` (goreleaser on `v*` tag push), and `.goreleaser.yml` (darwin/linux amd64/arm64, publishing a Homebrew formula to `Laaaaksh/homebrew-writ` via `brews:`) mirror the sibling `Laaaaksh/vessel` repo's setup. Releasing requires a `HOMEBREW_TAP_TOKEN` repo secret — without it goreleaser falls back to `GITHUB_TOKEN`, which cannot write to the separate tap repo and the release fails (this is what broke vessel's first release). The tap repo's README.md is hand-maintained (goreleaser writes only `Formula/`), so when writ's README install instructions change, mirror them there too — it kept serving a stale broken one-liner for releases after the main README was fixed (corrected 2026-08-22). `.github/dependabot.yml` runs weekly `gomod` + `github-actions` version-update PRs on top of the GitHub-side Dependabot alerts/security-fixes toggles (those live in repo settings, not files); expect its PRs against `master`. `.github/workflows/codeql.yml` runs CodeQL code scanning (languages go,actions) on PRs, pushes to `master`, and a weekly cron — its status check is named `CodeQL`; activity is proven by `/code-scanning/analyses` entries, not default-setup state. `.github/ISSUE_TEMPLATE/` holds GitHub issue-form YAML (`bug_report.yml`, `feature_request.yml`) plus `config.yml`; keep new templates in that schema rather than markdown bodies. `CHANGELOG.md` is the human-readable release record in Keep a Changelog format — GitHub release bodies are just goreleaser commit dumps — so land user-facing changes with an `[Unreleased]` entry as part of the change itself, and when cutting a tag move `[Unreleased]` into a dated section with compare links (backfilled 0.1.0–0.2.4 from per-tag `git log --no-merges ..` ranges, since goreleaser's release notes misattribute commits across the tightly-spaced v0.2.x tags). +- Release packaging: `.github/workflows/ci.yml` (ubuntu build/vet/gofmt/test plus a separate `Test (macOS)` job for the darwin release target; the macOS job must stay its own job, not a matrix on `test`, because branch protection requires the literal check name `Test` and matrix suffixes like `Test (ubuntu-latest)` would never satisfy it — the gofmt gate lives inside `Test` so unformatted code cannot land even though only that one check is required), `.github/workflows/release.yml` (goreleaser on `v*` tag push), and `.goreleaser.yml` (darwin/linux amd64/arm64, publishing a Homebrew formula to `attentionfs/homebrew-writ` via `brews:`) mirror the sibling `attentionfs/vessel` repo's setup. Releasing requires a `HOMEBREW_TAP_TOKEN` repo secret — without it goreleaser falls back to `GITHUB_TOKEN`, which cannot write to the separate tap repo and the release fails (this is what broke vessel's first release). The tap repo's README.md is hand-maintained (goreleaser writes only `Formula/`), so when writ's README install instructions change, mirror them there too — it kept serving a stale broken one-liner for releases after the main README was fixed (corrected 2026-08-22). `.github/dependabot.yml` runs weekly `gomod` + `github-actions` version-update PRs on top of the GitHub-side Dependabot alerts/security-fixes toggles (those live in repo settings, not files); expect its PRs against `master`. `.github/workflows/codeql.yml` runs CodeQL code scanning (languages go,actions) on PRs, pushes to `master`, and a weekly cron — its status check is named `CodeQL`; activity is proven by `/code-scanning/analyses` entries, not default-setup state. `.github/ISSUE_TEMPLATE/` holds GitHub issue-form YAML (`bug_report.yml`, `feature_request.yml`) plus `config.yml`; keep new templates in that schema rather than markdown bodies. `CHANGELOG.md` is the human-readable release record in Keep a Changelog format — GitHub release bodies are just goreleaser commit dumps — so land user-facing changes with an `[Unreleased]` entry as part of the change itself, and when cutting a tag move `[Unreleased]` into a dated section with compare links (backfilled 0.1.0–0.2.4 from per-tag `git log --no-merges ..` ranges, since goreleaser's release notes misattribute commits across the tightly-spaced v0.2.x tags). - `go.mod`'s `go` directive is the single source of the Go toolchain for CI and releases: both workflows pass `go-version-file: go.mod` to actions/setup-go, so that line decides which compiler (and which stdlib security patches) ship inside released binaries — v0.2.x shipped go1.22.12, EOL since Feb 2025, before the directive was bumped to a supported line. Audit it against the two-current-versions support policy whenever cutting a release. - `master` is branch-protected: required `Test` status check (strict), enforced for admins, conversation resolution required, no direct pushes — land every change through a PR and wait for its `Test` check (`gh pr merge` honors the rules); `CONTRIBUTING.md` documents the contributor-facing flow. Repo settings keep `delete_branch_on_merge` on: after any PR merges (including this run's own gnhf branch PRs), GitHub deletes that head branch from origin — re-push the local branch to recreate it; don't misread the vanished origin ref as data loss. Wiki/Projects tabs are deliberately disabled; don't re-enable them when auditing settings. - `cmd/writ/main.go`'s `version`, `commit`, and `date` must stay package-level `var`s (with `default*` const placeholders), never `const` — goreleaser's `-X main.version=...` ldflags silently no-op against a `const` string, so every released binary would misreport itself. `versionString` is the single place that renders them; it omits the `(commit ..., built ...)` suffix when both are still at their defaults. - `goreleaser check`/`release` (v2.16+) soft-deprecate the `brews:` key in favor of `homebrew_casks:`; kept `brews:` here to match vessel's existing convention and the tap's `bin.install`-style formula. `dist/` (goreleaser's output dir) is gitignored. -- `brews:` sets `directory: Formula` so the generated formula writes to `Formula/writ.rb` in `Laaaaksh/homebrew-writ`, not the tap root. Homebrew resolves a tap's formulae from `Formula/` first, then `HomebrewFormula/`, then the root — a formula anywhere in `Formula/` always wins over one at the root, so omitting `directory` risks silently serving a stale root formula the moment anything else creates a `Formula/` dir in the tap (this happened to vessel's tap). Confirm the key name (`directory` vs the older `folder`) against the installed goreleaser's own schema (`goreleaser jsonschema`) before touching this, not from memory. +- `brews:` sets `directory: Formula` so the generated formula writes to `Formula/writ.rb` in `attentionfs/homebrew-writ`, not the tap root. Homebrew resolves a tap's formulae from `Formula/` first, then `HomebrewFormula/`, then the root — a formula anywhere in `Formula/` always wins over one at the root, so omitting `directory` risks silently serving a stale root formula the moment anything else creates a `Formula/` dir in the tap (this happened to vessel's tap). Confirm the key name (`directory` vs the older `folder`) against the installed goreleaser's own schema (`goreleaser jsonschema`) before touching this, not from memory. - The README's `## Demo` embeds `docs/assets/demo.gif` (960px, ~12fps, palette-quantized, must stay under 10 MB) and links `docs/assets/demo.mp4` (1280px H.264/yuv420p) for full quality — GitHub does not play a committed MP4 inline. Both are regenerated by `make demo` (`scripts/record-demo/record.sh`), which builds the real `writ` binary, seeds a throwaway repo, and drives it live through [VHS](https://github.com/charmbracelet/vhs) via `scripts/record-demo/demo.tape` — the tape is the actual recording script, not a mockup, so re-run it (never hand-edit the assets) whenever CLI output changes. See `scripts/record-demo/README.md` for the full mechanics. ## Maintaining this file diff --git a/CHANGELOG.md b/CHANGELOG.md index c9b4c77..ba1df0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.2.5] - 2026-11-01 + +### Changed +- Go module path is now `github.com/attentionfs/writ`, following the GitHub account rename. Update imports and `go install` commands. Homebrew users: `brew tap attentionfs/writ`. + ### Added - FAQ answering what AI-coding-agent users actually ask: writ needs no AI subscription or API key, works with any agent that can pipe TOML and run shell commands, allows one open writ per repo (parallel agents need separate git worktrees), and each worktree should use its own provider key or subscription because sharing one invites rate-limit retry storms. @@ -106,11 +111,12 @@ Public-release hardening of the core shipped in 0.1.x. - Human attestation kept visually distinct from machine claims and from agent attestations. - Cross-platform releases (darwin/linux × amd64/arm64) with Homebrew tap publishing. -[Unreleased]: https://github.com/Laaaaksh/writ/compare/v0.2.4...HEAD -[0.2.4]: https://github.com/Laaaaksh/writ/compare/v0.2.3...v0.2.4 -[0.2.3]: https://github.com/Laaaaksh/writ/compare/v0.2.2...v0.2.3 -[0.2.2]: https://github.com/Laaaaksh/writ/compare/v0.2.1...v0.2.2 -[0.2.1]: https://github.com/Laaaaksh/writ/compare/v0.2.0...v0.2.1 -[0.2.0]: https://github.com/Laaaaksh/writ/compare/v0.1.1...v0.2.0 -[0.1.1]: https://github.com/Laaaaksh/writ/compare/v0.1.0...v0.1.1 -[0.1.0]: https://github.com/Laaaaksh/writ/releases/tag/v0.1.0 +[Unreleased]: https://github.com/attentionfs/writ/compare/v0.2.5...HEAD +[0.2.5]: https://github.com/attentionfs/writ/compare/v0.2.4...v0.2.5 +[0.2.4]: https://github.com/attentionfs/writ/compare/v0.2.3...v0.2.4 +[0.2.3]: https://github.com/attentionfs/writ/compare/v0.2.2...v0.2.3 +[0.2.2]: https://github.com/attentionfs/writ/compare/v0.2.1...v0.2.2 +[0.2.1]: https://github.com/attentionfs/writ/compare/v0.2.0...v0.2.1 +[0.2.0]: https://github.com/attentionfs/writ/compare/v0.1.1...v0.2.0 +[0.1.1]: https://github.com/attentionfs/writ/compare/v0.1.0...v0.1.1 +[0.1.0]: https://github.com/attentionfs/writ/releases/tag/v0.1.0 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 26d35fb..9755852 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -41,7 +41,7 @@ CI runs the same build, vet, and test steps on every pull request and on pushes `base`, and `merge` refuses a dirty working tree. Keep these guarantees intact in any change to those commands. -- The module path is `github.com/Laaaaksh/writ`. Only `spf13/cobra` and `BurntSushi/toml` +- The module path is `github.com/attentionfs/writ`. Only `spf13/cobra` and `BurntSushi/toml` are allowed as dependencies; do not add others without prior agreement. - If you are a coding agent working in this repo, read [AGENTS.md](AGENTS.md) first. It documents the lifecycle commands and invariants your changes must respect, including diff --git a/README.md b/README.md index e71df3e..3dc83bc 100644 --- a/README.md +++ b/README.md @@ -18,12 +18,12 @@ green verification, merges with no human at all. A writ that declares its scope as the whole repository makes drift meaningless, so writ refuses to accept one - at intake and again before any status or merge decision. -[![Star this repo](https://img.shields.io/github/stars/Laaaaksh/writ?style=for-the-badge&logo=github&label=star%20this%20repo&color=yellow)](https://github.com/Laaaaksh/writ/stargazers) +[![Star this repo](https://img.shields.io/github/stars/attentionfs/writ?style=for-the-badge&logo=github&label=star%20this%20repo&color=yellow)](https://github.com/attentionfs/writ/stargazers) [![Built for agent workflows](https://img.shields.io/badge/built_for-agent_workflows-8957e5?style=for-the-badge&logo=githubactions&logoColor=white)](#the-loop-propose---approve---implement---attest---merge) -[![CI](https://github.com/Laaaaksh/writ/actions/workflows/ci.yml/badge.svg)](https://github.com/Laaaaksh/writ/actions/workflows/ci.yml) -[![CodeQL](https://github.com/Laaaaksh/writ/actions/workflows/codeql.yml/badge.svg)](https://github.com/Laaaaksh/writ/actions/workflows/codeql.yml) -[![Release](https://img.shields.io/github/v/release/Laaaaksh/writ?color=green&display_name=tag)](https://github.com/Laaaaksh/writ/releases) +[![CI](https://github.com/attentionfs/writ/actions/workflows/ci.yml/badge.svg)](https://github.com/attentionfs/writ/actions/workflows/ci.yml) +[![CodeQL](https://github.com/attentionfs/writ/actions/workflows/codeql.yml/badge.svg)](https://github.com/attentionfs/writ/actions/workflows/codeql.yml) +[![Release](https://img.shields.io/github/v/release/attentionfs/writ?color=green&display_name=tag)](https://github.com/attentionfs/writ/releases) [![License: MIT](https://img.shields.io/badge/license-MIT-purple.svg)](LICENSE) [![Go](https://img.shields.io/badge/go-1.26+-00ADD8?logo=go&logoColor=white)](go.mod) [![Platform](https://img.shields.io/badge/platform-macOS%20%E2%80%A2%20Linux-lightgrey)](#install) @@ -49,7 +49,7 @@ work. [Full-quality video](docs/assets/demo.mp4). ``` brew tap laaaaksh/writ brew trust laaaaksh/writ -brew install Laaaaksh/writ/writ +brew install attentionfs/writ/writ ``` The `brew trust` step is required once: current Homebrew refuses to load formulae from @@ -60,7 +60,7 @@ which every command uses to compute drift and merge, and a POSIX `sh`, which runs verification commands and `$EDITOR` launches. Alternatively, with a Go toolchain: ``` -go install github.com/Laaaaksh/writ/cmd/writ@latest +go install github.com/attentionfs/writ/cmd/writ@latest ``` ## Shell completions @@ -245,13 +245,13 @@ independently instead of failing together. ## Star this repo -If `writ` makes reviewing agent PRs tractable, [leave a star](https://github.com/Laaaaksh/writ/stargazers) - it helps other people find it. +If `writ` makes reviewing agent PRs tractable, [leave a star](https://github.com/attentionfs/writ/stargazers) - it helps other people find it. - + - - - Star History Chart + + + Star History Chart diff --git a/SECURITY.md b/SECURITY.md index 285a688..72a6ea1 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,7 +2,7 @@ ## Supported versions -Only the [latest tagged release](https://github.com/Laaaaksh/writ/releases) is +Only the [latest tagged release](https://github.com/attentionfs/writ/releases) is supported with security fixes. If you are running an older version, upgrade first and see whether the problem still reproduces. @@ -12,7 +12,7 @@ Please do **not** open a public issue for anything you believe is security-relev Use GitHub's private vulnerability reporting: -https://github.com/Laaaaksh/writ/security/advisories/new +https://github.com/attentionfs/writ/security/advisories/new Please include what you can of: diff --git a/cmd/writ/approve.go b/cmd/writ/approve.go index 43e5109..557ef54 100644 --- a/cmd/writ/approve.go +++ b/cmd/writ/approve.go @@ -8,7 +8,7 @@ import ( "github.com/spf13/cobra" - "github.com/Laaaaksh/writ/internal/writ" + "github.com/attentionfs/writ/internal/writ" ) func newApproveCmd() *cobra.Command { diff --git a/cmd/writ/approve_test.go b/cmd/writ/approve_test.go index c7d226d..a8261a1 100644 --- a/cmd/writ/approve_test.go +++ b/cmd/writ/approve_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - "github.com/Laaaaksh/writ/internal/writ" + "github.com/attentionfs/writ/internal/writ" ) // proposeValidWrit runs `writ propose` with validWritTOML on stdin against diff --git a/cmd/writ/attest.go b/cmd/writ/attest.go index e5b7a1d..e14f919 100644 --- a/cmd/writ/attest.go +++ b/cmd/writ/attest.go @@ -8,7 +8,7 @@ import ( "github.com/spf13/cobra" - "github.com/Laaaaksh/writ/internal/writ" + "github.com/attentionfs/writ/internal/writ" ) func newAttestCmd() *cobra.Command { diff --git a/cmd/writ/attest_test.go b/cmd/writ/attest_test.go index ee52a80..1c39957 100644 --- a/cmd/writ/attest_test.go +++ b/cmd/writ/attest_test.go @@ -5,7 +5,7 @@ import ( "strings" "testing" - "github.com/Laaaaksh/writ/internal/writ" + "github.com/attentionfs/writ/internal/writ" ) // setupApprovedWrit proposes and approves validWritTOML in a fresh test diff --git a/cmd/writ/discard.go b/cmd/writ/discard.go index 6caadc6..08222f8 100644 --- a/cmd/writ/discard.go +++ b/cmd/writ/discard.go @@ -8,7 +8,7 @@ import ( "github.com/spf13/cobra" - "github.com/Laaaaksh/writ/internal/writ" + "github.com/attentionfs/writ/internal/writ" ) func newDiscardCmd() *cobra.Command { diff --git a/cmd/writ/discard_test.go b/cmd/writ/discard_test.go index 7e9e916..d5429c5 100644 --- a/cmd/writ/discard_test.go +++ b/cmd/writ/discard_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - "github.com/Laaaaksh/writ/internal/writ" + "github.com/attentionfs/writ/internal/writ" ) func TestRunDiscardRemovesOpenWrit(t *testing.T) { diff --git a/cmd/writ/merge.go b/cmd/writ/merge.go index 704c641..3aa5710 100644 --- a/cmd/writ/merge.go +++ b/cmd/writ/merge.go @@ -11,9 +11,9 @@ import ( "github.com/spf13/cobra" - "github.com/Laaaaksh/writ/internal/gate" - "github.com/Laaaaksh/writ/internal/render" - "github.com/Laaaaksh/writ/internal/writ" + "github.com/attentionfs/writ/internal/gate" + "github.com/attentionfs/writ/internal/render" + "github.com/attentionfs/writ/internal/writ" ) func newMergeCmd() *cobra.Command { diff --git a/cmd/writ/merge_test.go b/cmd/writ/merge_test.go index 225a404..96aa37e 100644 --- a/cmd/writ/merge_test.go +++ b/cmd/writ/merge_test.go @@ -10,8 +10,8 @@ import ( "github.com/spf13/cobra" - "github.com/Laaaaksh/writ/internal/gate" - "github.com/Laaaaksh/writ/internal/writ" + "github.com/attentionfs/writ/internal/gate" + "github.com/attentionfs/writ/internal/writ" ) func mustRunGit(t *testing.T, dir string, args ...string) string { diff --git a/cmd/writ/propose.go b/cmd/writ/propose.go index 955c9c0..0bc213f 100644 --- a/cmd/writ/propose.go +++ b/cmd/writ/propose.go @@ -12,7 +12,7 @@ import ( "github.com/spf13/cobra" - "github.com/Laaaaksh/writ/internal/writ" + "github.com/attentionfs/writ/internal/writ" ) func newProposeCmd() *cobra.Command { diff --git a/cmd/writ/status.go b/cmd/writ/status.go index b113cc2..98b395f 100644 --- a/cmd/writ/status.go +++ b/cmd/writ/status.go @@ -7,11 +7,11 @@ import ( "github.com/spf13/cobra" - "github.com/Laaaaksh/writ/internal/drift" - "github.com/Laaaaksh/writ/internal/evidence" - "github.com/Laaaaksh/writ/internal/gate" - "github.com/Laaaaksh/writ/internal/render" - "github.com/Laaaaksh/writ/internal/writ" + "github.com/attentionfs/writ/internal/drift" + "github.com/attentionfs/writ/internal/evidence" + "github.com/attentionfs/writ/internal/gate" + "github.com/attentionfs/writ/internal/render" + "github.com/attentionfs/writ/internal/writ" ) func newStatusCmd() *cobra.Command { diff --git a/cmd/writ/status_test.go b/cmd/writ/status_test.go index eb146e6..6d9c94a 100644 --- a/cmd/writ/status_test.go +++ b/cmd/writ/status_test.go @@ -10,7 +10,7 @@ import ( "github.com/spf13/cobra" - "github.com/Laaaaksh/writ/internal/writ" + "github.com/attentionfs/writ/internal/writ" ) func TestRunStatusNoWritOpen(t *testing.T) { diff --git a/go.mod b/go.mod index 35a276c..4236ca7 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/Laaaaksh/writ +module github.com/attentionfs/writ go 1.26 diff --git a/internal/drift/compute_test.go b/internal/drift/compute_test.go index a221268..1fc3eea 100644 --- a/internal/drift/compute_test.go +++ b/internal/drift/compute_test.go @@ -7,7 +7,7 @@ import ( "strings" "testing" - "github.com/Laaaaksh/writ/internal/writ" + "github.com/attentionfs/writ/internal/writ" ) // newTestRepo creates a git repo with an initial commit on "main". Tests call diff --git a/internal/drift/drift.go b/internal/drift/drift.go index 6de8849..af6ffad 100644 --- a/internal/drift/drift.go +++ b/internal/drift/drift.go @@ -13,7 +13,7 @@ import ( "strconv" "strings" - "github.com/Laaaaksh/writ/internal/writ" + "github.com/attentionfs/writ/internal/writ" ) // FileChange describes a single changed file. diff --git a/internal/evidence/run.go b/internal/evidence/run.go index f1f3ad1..00e3145 100644 --- a/internal/evidence/run.go +++ b/internal/evidence/run.go @@ -13,7 +13,7 @@ import ( "syscall" "time" - "github.com/Laaaaksh/writ/internal/writ" + "github.com/attentionfs/writ/internal/writ" ) // Report is the outcome of running a writ's verification command. diff --git a/internal/evidence/run_test.go b/internal/evidence/run_test.go index 04f5b28..674f980 100644 --- a/internal/evidence/run_test.go +++ b/internal/evidence/run_test.go @@ -6,7 +6,7 @@ import ( "testing" "time" - "github.com/Laaaaksh/writ/internal/writ" + "github.com/attentionfs/writ/internal/writ" ) func TestRun_ExitZeroPasses(t *testing.T) { diff --git a/internal/gate/gate.go b/internal/gate/gate.go index a59237e..a83a3b3 100644 --- a/internal/gate/gate.go +++ b/internal/gate/gate.go @@ -6,9 +6,9 @@ import ( "fmt" "strings" - "github.com/Laaaaksh/writ/internal/drift" - "github.com/Laaaaksh/writ/internal/evidence" - "github.com/Laaaaksh/writ/internal/writ" + "github.com/attentionfs/writ/internal/drift" + "github.com/attentionfs/writ/internal/evidence" + "github.com/attentionfs/writ/internal/writ" ) // Decision is the merge/no-merge outcome for a writ. diff --git a/internal/gate/gate_test.go b/internal/gate/gate_test.go index e96b80b..971d366 100644 --- a/internal/gate/gate_test.go +++ b/internal/gate/gate_test.go @@ -4,9 +4,9 @@ import ( "strings" "testing" - "github.com/Laaaaksh/writ/internal/drift" - "github.com/Laaaaksh/writ/internal/evidence" - "github.com/Laaaaksh/writ/internal/writ" + "github.com/attentionfs/writ/internal/drift" + "github.com/attentionfs/writ/internal/evidence" + "github.com/attentionfs/writ/internal/writ" ) func boolPtr(b bool) *bool { return &b } diff --git a/internal/render/render.go b/internal/render/render.go index ef1dcd6..24a73bd 100644 --- a/internal/render/render.go +++ b/internal/render/render.go @@ -7,10 +7,10 @@ import ( "strconv" "strings" - "github.com/Laaaaksh/writ/internal/drift" - "github.com/Laaaaksh/writ/internal/evidence" - "github.com/Laaaaksh/writ/internal/gate" - "github.com/Laaaaksh/writ/internal/writ" + "github.com/attentionfs/writ/internal/drift" + "github.com/attentionfs/writ/internal/evidence" + "github.com/attentionfs/writ/internal/gate" + "github.com/attentionfs/writ/internal/writ" ) // maxDriftLines is how many drifted files are listed individually before diff --git a/internal/render/render_test.go b/internal/render/render_test.go index fa1b8cb..cbf4367 100644 --- a/internal/render/render_test.go +++ b/internal/render/render_test.go @@ -4,10 +4,10 @@ import ( "strings" "testing" - "github.com/Laaaaksh/writ/internal/drift" - "github.com/Laaaaksh/writ/internal/evidence" - "github.com/Laaaaksh/writ/internal/gate" - "github.com/Laaaaksh/writ/internal/writ" + "github.com/attentionfs/writ/internal/drift" + "github.com/attentionfs/writ/internal/evidence" + "github.com/attentionfs/writ/internal/gate" + "github.com/attentionfs/writ/internal/writ" ) func boolPtr(b bool) *bool { return &b }