Skip to content

I0601 — Let a policy name a shared source it does not copy

Let a repository's policy name a shared policy source and resolve it offline from the filesystem, so that one statement of a rule can govern more than one repository without being pasted into each.

BLOCKED wave 0 · p3 · deep-work profile · runs alone

Part of shared-policy — Shared policy across repositories and workers.

Blocked. This issue cannot start until milestone:shared-policy is done. The status is derived from that, not declared.

Objective

Let a repository's policy name a shared policy source and resolve it offline from the filesystem, so that one statement of a rule can govern more than one repository without being pasted into each.

Why

Copying is what makes organisational policy drift: every repository holds a fork of the rule and nobody can see which forks moved. A named source is the smallest change that makes drift detectable at all.

Current state

Policy is per repository and entirely local. Nothing refers to anything outside the checkout.

Desired state

A policy names a shared source, the tool resolves it without a network call, and every command that reads policy reads the resolved result.

Scope

  • lib
  • share
  • docs

Out of scope

  • Fetching a policy over a network, from a registry, or from any service
  • A hosted component that must be running for the tool to work

Dependencies

None. This issue is a root of the graph.

What waits on this

Acceptance criteria

  • A shared source is resolved from the filesystem with no network access
  • Every policy reader sees the resolved policy, and no reader bypasses resolution
  • An unresolvable source is a named finding that stops the command, never a silent fallback to local
  • A repository that names no shared source behaves exactly as it does today

Validation

  • bash test/run.sh
  • bin/majordomus doctor

Evidence required

  • suite

Evidence

None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.

Risk

This is where a local-first tool grows a dependency outside its checkout; keeping resolution to the filesystem is what preserves the offline guarantee.

Timeline

started
verified
completed

Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.

Canonical record: .ai/repo/project/issues/I0601.yaml. Read it back with majordomus plan show I0601.