Skip to content

angee.portfolio.models

Products, initiatives, reports, releases, and same-row planning donors.

Products are phasal subjects: their lifecycle carries no target date, health, or progress. Projects and initiatives are teleological and therefore own health reports. The project/task donors fold optional portfolio placement onto the upstream rows only when this addon is composed.

ProductLifecycle

python
class ProductLifecycle(models.TextChoices)

Phases in a Product's existence, never progress toward completion.

InitiativeStatus

python
class InitiativeStatus(models.TextChoices)

Coarse fulfillment lifecycle for strategic initiatives.

InitiativeHealth

python
class InitiativeHealth(models.TextChoices)

Latest reported health denormalized onto an Initiative.

InitiativeDateResolution

python
class InitiativeDateResolution(models.TextChoices)

Precision carried by an Initiative target date.

UpdateHealth

python
class UpdateHealth(models.TextChoices)

Health assertion required from every portfolio Update.

ReleaseStatus

python
class ReleaseStatus(models.TextChoices)

Lifecycle of a Product release artifact.

WorkspaceVisibleMixin

python
class WorkspaceVisibleMixin(models.Model)

Persist the R11 wildcard-reader tuple for a portfolio row.

Workspace visibility is posture data, so every one of the addon's five persisted resource definitions carries an explicit reader@auth/user:* tuple. Deployments may replace that tuple strategy without changing schema.

Meta

python
class Meta()

Django options for the tuple-reconciliation mixin.

save

python
def save(*args: Any, **kwargs: Any) -> None

Persist the row and idempotently reconcile its wildcard reader.

ProductManager

python
class ProductManager(AngeeManager)

Own the idempotent Project-to-Product maturation write.

from_project

python
def from_project(project: models.Model) -> models.Model

Return the one Product promoted from project with provenance.

Promotion deliberately requires both Project write and portfolio_admin: R11 strategy curation wins over owner prerogative at the Product rung.

Product

python
class Product(WorkspaceVisibleMixin, AuditMixin, AngeeDataModel)

A perpetual subject passing through phases rather than toward fulfillment.

Meta

python
class Meta()

Django options for phasal products.

__str__

python
def __str__() -> str

Return the Product name.

Initiative

python
class Initiative(WorkspaceVisibleMixin, HierarchyMixin, AuditMixin,
                 AngeeDataModel)

A tree-shaped long-horizon intent whose pushes can be fulfilled.

Meta

python
class Meta(HierarchyMixin.Meta)

Django options carrying the hierarchy index and parent-rank invariant.

save

python
def save(*args: Any, **kwargs: Any) -> None

Persist the Initiative, rejecting ancestry-unsafe subtree moves.

__str__

python
def __str__() -> str

Return the Initiative name.

InitiativeProject

python
class InitiativeProject(WorkspaceVisibleMixin, AuditMixin, AngeeDataModel)

An ordered Project placement on an ancestry-safe Initiative tree.

Meta

python
class Meta()

Django options for unique placement and per-Initiative ranks.

clean

python
def clean() -> None

Reject a second Project placement on the same ancestry path.

save

python
def save(*args: Any, **kwargs: Any) -> None

Persist only after serializing the ancestry-path validation.

after_resource_load

python
@classmethod
def after_resource_load(cls,
                        instances: Iterable[Any],
                        *,
                        tier: str,
                        source: str,
                        publish: bool = False) -> None

Seed one idempotent report for each side of demo placements.

UpdateManager

python
class UpdateManager(AngeeManager)

Own target validation, authorization, and health-report creation.

target_relation

python
@classmethod
def target_relation(cls, target: models.Model) -> str

Return the Update relation for one allowed teleological target.

target_model

python
@classmethod
def target_model(cls, model_label: str) -> type[models.Model]

Return the installed model for one allowed target label.

report

python
def report(*,
           target: models.Model,
           health: str | UpdateHealth,
           body: str = "") -> models.Model

Create one report on a writable Project or Initiative.

Update

python
class Update(WorkspaceVisibleMixin, AuditMixin, RecordRefMixin,
             AngeeDataModel)

A required-health report on a Project or Initiative, never a Product.

Meta

python
class Meta()

Django options for target-addressed health reports.

clean

python
def clean() -> None

Require health and a teleological target.

save

python
def save(*args: Any, **kwargs: Any) -> None

Persist the report, its target relation, and the latest-health denorm.

delete

python
def delete(*args: Any, **kwargs: Any) -> tuple[int, dict[str, int]]

Delete the report and restore its target's surviving latest health.

__str__

python
def __str__() -> str

Return a readable target-qualified health assertion.

Release

python
class Release(WorkspaceVisibleMixin, AuditMixin, AngeeDataModel)

The named artifact a ship Project leaves on a Product timeline.

Meta

python
class Meta()

Django options for Product-scoped release names.

__str__

python
def __str__() -> str

Return the Product-qualified release name.

ProjectPortfolio

python
class ProjectPortfolio(AngeeModel)

Same-row portfolio placement folded into projects.Project.

Placement (product, priority, and sort_order) is deliberately project-side.

Meta

python
class Meta()

Abstract donor options folded into the concrete Project table.

promote_to_product

python
def promote_to_product() -> models.Model

Return the one Product matured from this Project.

TaskPortfolio

python
class TaskPortfolio(AngeeModel)

Same-row release attribution folded into projects.Task.

Meta

python
class Meta()

Abstract donor options folded into the concrete Task table.

PortfolioRole

Table-less REBAC anchor for the const-backed portfolio-admin namespace.

Released under the AGPL-3.0 License.