project

package
v0.8.0 Latest Latest
Warning

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

Go to latest
Published: Jul 4, 2026 License: MIT Imports: 22 Imported by: 0

Documentation

Overview

Package project ties config, catalog, render, and manifest together to sync rendered files into a project and check them for drift.

Index

Constants

View Source
const Version = "0.8.0"

Version is the awf release version — the single version authority (ADR-0049): gate comparisons, the lock stamp, the bootstrap pin, and the CLI output all read this const.

Variables

This section is empty.

Functions

func CatalogNames

func CatalogNames(cat *catalog.Catalog, singular string) ([]string, bool)

CatalogNames returns the catalog pool for a singular CLI kind; ok is false for a kind with no catalog pool (domains).

func CollisionsAt added in v0.6.0

func CollisionsAt(root string, planned []string) []string

CollisionsAt filters planned project-relative paths to those that already exist under root and are not recorded in root's lock (not awf-managed). Split from InitCollisions so init's pre-prompt probe can plan outputs in a throwaway scaffold and test them against the real root; the ADR-0016 collision semantics are unchanged.

func EnabledNames

func EnabledNames(c *config.Config, singular string) ([]string, bool)

EnabledNames returns the config enable array for a singular CLI kind.

func HookNames added in v0.6.0

func HookNames() []string

HookNames returns the git-hook payload names the hooks singleton renders (ADR-0048), for CLI surfaces that enumerate them (the KnownTargets pattern).

func Kinds

func Kinds() []string

Kinds returns the singular CLI kind tokens in display order.

func KnownTargets added in v0.4.0

func KnownTargets() []string

KnownTargets returns the known adapter names in sorted order. The bespoke `awf {add,remove,list} target` path validates against this set (inv: target-cli). invariant: target-cli

func PluralKind

func PluralKind(singular string) (string, bool)

PluralKind maps a singular CLI kind token to its config enable-array key.

func ScaffoldConfig

func ScaffoldConfig(prefix string, vars map[string]string, inv *config.InvariantConfig, trim *config.CatalogTrim, scopes []string) ([]byte, error)

ScaffoldConfig generates the bytes of a .awf/config.yaml that enables the workflow-core skills and docs (ADR-0022) and every agent in the embedded catalog (as flat name arrays), and pre-populates the vars block with the union of all {{ .vars.X }} names referenced by every catalog template. Each var is seeded with an empty string so that strict render (missingkey=zero + <no value> check) does not fail on sync, and so a later `awf add` of an opt-in skill renders cleanly. It also seeds the self-pinning bootstrap (ADR-0040) and the git-hook payloads (ADR-0048) enabled by default, and writes a resolved commit-scope list to audit.allowedScopes (ADR-0051).

func Uninstall

func Uninstall(root string) (int, error)

Uninstall removes awf's generated footprint from root: every file recorded in the lock, the directories left empty by their removal, and the now-stale lock itself. It leaves the authored .awf/ config in place and returns the count of files removed. It is a free function (not a *Project method) so a broken config.yaml does not block uninstall — only the lock and root are needed. invariant: uninstall-removes-lock-tracked

Types

type Backup added in v0.3.0

type Backup struct {
	Path  string // project-relative file that was overwritten
	Bak   string // project-relative backup copy (.awf-bak[.N])
	Index bool   // the file is the generated ADR/domain index (ownership-takeover note)
}

Backup records a foreign file preserved before sync overwrote its path.

type Layout

type Layout struct {
	DocsDir          string
	ADRDir           string
	ActiveMd         string
	AdrReadme        string
	AdrTemplate      string
	PlansDir         string
	PlansReadme      string
	Docs             map[string]string // name -> output path; present iff enabled (inv: layout-docs-enabled-only)
	WorkflowRef      string
	DocStandard      string
	AgentsMdStandard string
	WorkingWithAwf   string
	DomainsDir       string
}

Layout is the fixed, awf-given docs layout derived from cfg.DocsDir, in typed form for Go consumers. These paths are not configurable through vars. templateMap projects it into the .layout template namespace (templates read a map, not unexported struct fields) and into the per-file ConfigHash.

type Project

type Project struct {
	Root    string
	Cfg     *config.Config
	Cat     *catalog.Catalog
	Targets []Target
	// contains filtered or unexported fields
}

func Open

func Open(root string) (*Project, error)

func (*Project) Audit

func (p *Project) Audit(baseOverride string) ([]audit.Finding, error)

Audit runs the process-conformance audit (ADR-0017) over the branch range. baseOverride wins over the configured base branch when non-empty.

func (*Project) BackupFile

func (p *Project) BackupFile(rel string) (string, error)

BackupFile copies a colliding project-relative file to a free <path>.awf-bak[.N] sibling (never clobbering a prior backup) and returns the backup's project-relative path. invariant: init-force-backs-up

func (*Project) Check

func (p *Project) Check() ([]manifest.Drift, error)

func (*Project) CheckInvariants

func (p *Project) CheckInvariants() ([]invariants.Finding, error)

CheckInvariants reports Implemented-ADR invariant slugs that lack a backing `<marker> invariant: <slug>` comment (per the project's configured invariant sources) under the project root.

func (*Project) InitCollisions

func (p *Project) InitCollisions() ([]string, error)

InitCollisions returns planned output paths that already exist on disk and are not recorded in the prior lock (i.e. not awf-managed). An awf-managed path that already exists is not a collision — re-init is idempotent.

func (*Project) NewADR added in v0.6.0

func (p *Project) NewADR(title string) (string, error)

NewADR scaffolds a new ADR file under the project's decisions dir: the next sequential number, the rendered template with its title/date filled in and marker comments stripped, refusing to overwrite an existing file. Mirrors the CheckInvariants/Audit pattern — cmd/awf reaches this only through this exported method, never internal/project.Layout directly.

func (*Project) PlannedOutputs

func (p *Project) PlannedOutputs() ([]string, error)

PlannedOutputs returns the project-relative paths Sync would write: every RenderAll output plus the generated ACTIVE.md and domain docs. Used by awf init to detect collisions before writing (ADR-0016).

func (*Project) RenderAll

func (p *Project) RenderAll() ([]RenderedFile, error)

func (*Project) SkillsRequiringAgent added in v0.6.0

func (p *Project) SkillsRequiringAgent(agent string) []string

SkillsRequiringAgent returns the enabled, non-local skills whose catalog spec requires agent — exactly the set the pairing validation would fail on if the agent left the enable array. `awf remove agent` refuses while it is non-empty (ADR-0050).

func (*Project) Sync

func (p *Project) Sync() error

func (*Project) SyncReport added in v0.3.0

func (p *Project) SyncReport() ([]Backup, error)

SyncReport renders and writes the project like Sync, additionally backing up any foreign file (on disk but absent from the start-of-sync lock) before overwriting it, and returning those backups (ADR-0035).

func (*Project) UnsetVarNotes added in v0.6.0

func (p *Project) UnsetVarNotes() ([]string, error)

UnsetVarNotes reports, per rendered artifact, the vars its assembled template references that are unset (missing or empty) in config — the non-failing render-completeness advisory (ADR-0045 item 4). One line per artifact with at least one hit, sorted; adapter duplicates are collapsed by template id.

type RenderedFile

type RenderedFile struct {
	Path         string
	Content      string
	TemplateID   string
	TemplateHash string
	ConfigHash   string
	// contains filtered or unexported fields
}

type Target

type Target struct {
	Name       string
	SkillDir   string // dir holding rendered skills, e.g. ".claude/skills"
	AgentDir   string // dir holding rendered agents, e.g. ".claude/agents"
	BridgeFile string // adapter bridge file at repo root, "" if none
}

Target places adapter (tool-specific) artifacts for one runtime. Neutral artifacts (AGENTS.md, docs, domains) are not target-scoped (ADR-0016).

func (Target) AgentPath

func (t Target) AgentPath(name string) string

AgentPath is the output path for a rendered agent under this target.

func (Target) SkillPath

func (t Target) SkillPath(prefix, name string) string

SkillPath is the output path for a rendered skill under this target.

Jump to

Keyboard shortcuts

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