Skip to content

T2-1: Add runtimes: and metadata: to TycoonProject model #90

Description

@JesuFemi-O

Milestone: #83
Depends on: nothing

Context

src/tycoon/project.py defines TycoonProject. Current fields: name, version, stack, database, sources, ask, sync, transform, notify. No runtimes: or metadata: section exists.

Goal

Add to src/tycoon/project.py:

from typing import Literal

class RuntimeEntry(BaseModel):
    type: Literal["dlt-managed", "dlt-project", "fivetran", "airbyte", "estuary"]
    path: str | None = None   # only used by dlt-project runtimes

class MetadataConfig(BaseModel):
    backend: str = "duckdb_file"
    path: str = ".tycoon/metadata.duckdb"

Add to TycoonProject:

runtimes: dict[str, RuntimeEntry] = Field(default_factory=dict)
metadata: MetadataConfig = Field(default_factory=MetadataConfig)

Both fields have defaults so all existing tycoon.yml files load without error or migration.

Acceptance

  • A tycoon.yml without runtimes: or metadata: keys loads and returns project.runtimes == {} and project.metadata.backend == "duckdb_file"
  • A tycoon.yml with runtimes: {dlt-managed: {type: dlt-managed}} loads and project.runtimes["dlt-managed"].type == "dlt-managed"
  • pytest tests/test_project.py passes with no changes to existing tests

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent-readyClear AC, no open design decisionsarea: configtycoon.yml schema + config singletontype: taskIndividual implementation tasks

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions