worktree

package
v0.31.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 11, 2026 License: MIT Imports: 3 Imported by: 0

Documentation

Overview

Package worktree 工作区隔离的**声明面与冲突判据**(不碰真实文件系统)。

为什么是「声明面」而不是「实现」

本仓至今不碰 FS 语义:建目录、挂载、chroot、git worktree 都是宿主与执行后端 的事。但**并行工作区之间会不会互相踩**这件事没有人判——两个 agent 各自 「在自己的目录里工作」,而它们的可写区完全重叠时,任何一边的写入都会 让另一边的结论失效,报告里却只有两份「各自成功」。

故本包只做三件可机械判定的事:

  1. **声明**:每个工作区声明它的可写区与只读区(@@Workspace@@);
  2. **自检**:声明本身不能自相矛盾(同一工作区里既只读又可写、路径穿出 工作区、绝对路径……);
  3. **冲突判据**:两个工作区的**可写区重叠**即冲突(@@Plan.Conflicts@@)。 只读区重叠不算——多个人读同一份文件没有危害,而**写**没有第二份真相。

fail-closed 的方向

@@CanWrite@@ / @@CanRead@@ 在「没有任何声明命中」时返回 false。默认允许会让 一个漏写的声明变成**全域可写**,而漏写在配置里看不出来(它只是「少了一行」)。

不支持通配(写明的局限)

只支持三种形态:**目录前缀**(以 / 结尾)、**后缀**(以 . 开头)、 **精确路径**。不支持 * 与 **:它们的语义(是否跨层、是否匹配目录本身) 各实现不同,一旦进了契约就会出现「按 A 的理解写、按 B 的理解判」的夹缝。 需要更强表达力时,宿主自己展开成多条精确声明——展开是宿主的活,判定归本包。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Conflict

type Conflict struct {
	// A, B 冲突的两个工作区 id(按字典序,A < B)。
	A, B string
	// PatternA, PatternB 命中的声明项(让维护者知道该改哪一条)。
	PatternA, PatternB string
	// Why 人读的说明。
	Why string
}

Conflict 两个工作区之间的可写区冲突。

type Plan

type Plan struct {
	// contains filtered or unexported fields
}

Plan 一组工作区的声明。

func New

func New(ws []Workspace) (*Plan, error)

New 建计划并做**声明自检**(任一不满足即报错,不静默修正)。

自检项:

  • ID 非空且唯一;
  • 声明项非空串(空串会匹配一切);
  • 声明项不得以 / 开头(绝对路径让「分区」这件事失去意义);
  • 声明项不得含 ..(穿出工作区);
  • **同一工作区里可写区与只读区不得重叠**(既只读又可写是自相矛盾, 而两边的读取者会得到不同的结论)。

func (*Plan) Conflicts

func (p *Plan) Conflicts() []Conflict

Conflicts 判**可写区重叠**,按 (A, B) 排序返回(确定性)。

只判写:读的重叠没有危害——多个人读同一份文件不会产生第二份真相。

func (*Plan) Workspaces

func (p *Plan) Workspaces() []Workspace

Workspaces 返回全部工作区(已按 ID 排序)。

type Workspace

type Workspace struct {
	// ID 工作区标识(唯一)。
	ID string
	// ReadOnly 只读区(目录前缀 / 后缀 / 精确路径)。
	ReadOnly []string
	// Writable 可写区(形态同上)。可以为空——纯只读工作区(如审查助手)是
	// 合法且常见的形态,此时任何写操作都被拒。
	Writable []string
}

Workspace 一个并行工作区的路径声明。

func (Workspace) CanRead

func (w Workspace) CanRead(path string) bool

CanRead 判该工作区能否读这个路径(可写区天然可读)。

func (Workspace) CanWrite

func (w Workspace) CanWrite(path string) bool

CanWrite 判该工作区能否写这个路径。

没有命中即 false:默认允许会让一个漏写的声明变成全域可写, 而漏写在配置里看不出来(它只是「少了一行」)。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL