package extension import ( core "agent-system-core" "context" ) // ProjectHost is an optional actor-scoped host projection capability. Metadata // can be shared by an authorizer; registered-lifecycle metadata masks credentials. // OwnedProject remains an owner-only management lookup. A request-bound // delegated projection may carry a separate real operator and fixed creator; // its final Store transaction checks both accounts and the persisted owner. type ProjectHost interface { Owner() string OwnedProjects() ([]core.Project, error) ProjectMetadata(projectID string) (core.Project, error) OwnedProject(projectID string) (core.Project, error) EnsureProject(projectID, name string) (core.Project, error) RenameOwnedProject(projectID, name string) (core.Project, error) ProjectNameAvailable(name, exceptID string) (bool, error) } // DelegatedProjectProjectionHost is an optional capability of a current, // authenticated RDM request Host. It derives a single-project creator // projection while retaining the original operator for final account fencing. // A globally reconstructed ScopedHost does not implement this capability. type DelegatedProjectProjectionHost interface { ProjectProjectionForCreator(creator, projectID string) (ProjectHost, error) } // ProjectLifecycle supplies the domain's public project lifecycle and live work // authorization. Each Host is scoped to the authenticated actor. Errors with a // StatusCode() int method may report 400, 403, 404, 409, or 503 to HTTP clients. type ProjectLifecycle struct { List func(context.Context, Host) ([]core.Project, error) Create func(context.Context, Host, string) (core.Project, error) Rename func(context.Context, Host, string, string) (core.Project, error) Archive func(context.Context, Host, string) error Work func(context.Context, string, core.ID) (bool, error) } // ProjectLifecycleRegistry is optional so older Registry implementations retain // their contract. Only in-process plugins can register one complete provider. type ProjectLifecycleRegistry interface { RegisterProjectLifecycle(ProjectLifecycle) error }