asf-tooling commented on issue #935:
URL: 
https://github.com/apache/tooling-trusted-releases/issues/935#issuecomment-4409971252

   <!-- gofannon-issue-triage-bot v2 -->
   
   **Automated triage** — analyzed at `main@2da7807a`
   
   **Type:** `unclear`  •  **Classification:** `no_action`  •  **Confidence:** 
`medium`
   **Application domain(s):** `project_committee_management`, 
`shared_infrastructure`
   
   ### Summary
   This issue is titled 'Project schema and models complete' and describes 
itself as a 'Punchlist to finishing features related to projects and project 
cycles,' but the issue body contains NO actual list of items or tasks. 
Significant related work already exists in the codebase: migration 0074 (issue 
#912) adds ProjectCycle and version metadata, migration 0076 (issue #914) adds 
LifecycleEvent, and the query builders and model definitions are in place. 
Without knowing what specific items were on this punchlist, it's impossible to 
determine what work remains.
   
   ### Where this lives in the code today
   
   #### `atr/models/sql.py` — `Project` (lines 714-728)
   _currently does this_
   The Project model already includes version metadata fields and a 
ProjectCycle relationship, suggesting issue #912 work is done.
   
   ```python
   class Project(sqlmodel.SQLModel, table=True):
       key: str = sqlmodel.Field(primary_key=True, unique=True, 
**example("example"))
       name: str | None = sqlmodel.Field(default=None, **example("Apache 
Example"))
       status: ProjectStatus = sqlmodel.Field(default=ProjectStatus.ACTIVE, 
**example(ProjectStatus.ACTIVE))
       ...
       version_method: VersionMethod = 
sqlmodel.Field(default=VersionMethod.SIMPLE, **example(VersionMethod.SIMPLE))
       version_pattern: str | None = sqlmodel.Field(default=None, 
**example(r"^\d+\.\d+\.\d+$"))
       cycle_match: str | None = sqlmodel.Field(default=None, 
**example(r"^(\d+)\.\d+\.\d+$"))
       branch_template: str | None = sqlmodel.Field(default=None, 
**example("release-{cycle}"))
       ...
       cycles: list["ProjectCycle"] = sqlmodel.Relationship(
           back_populates="project",
           cascade_delete=True,
           sa_relationship_kwargs={"cascade": "all, delete-orphan"},
       )
   ```
   
   #### `atr/models/sql.py` — `VersionMethod` (lines 244-247)
   _currently does this_
   The VersionMethod enum supports the three versioning strategies referenced 
in the project cycle design.
   
   ```python
   class VersionMethod(enum.StrEnum):
       SIMPLE = "simple"
       SEMVER = "semver"
       CALVER = "calver"
   ```
   
   #### `atr/models/sql.py` — `LifecycleEventType` (lines 262-268)
   _currently does this_
   The LifecycleEventType enum is already defined, corresponding to the 
migration in 0076 (issue #914).
   
   ```python
   class LifecycleEventType(enum.StrEnum):
       RELEASE = "release"
       ARCHIVE = "archive"
       WITHDRAW = "withdraw"
       EOD = "eod"
       EOS = "eos"
       EOL = "eol"
   ```
   
   #### `atr/models/sql.py` — `ProjectStatus` (lines 163-167)
   _currently does this_
   ProjectStatus enum already exists with four lifecycle states.
   
   ```python
   class ProjectStatus(enum.StrEnum):
       ACTIVE = "active"
       DORMANT = "dormant"
       RETIRED = "retired"
       STANDING = "standing"
   ```
   
   #### `migrations/versions/0074_2026.05.04_0d6e9554.py` — `upgrade` (lines 
22-37)
   _currently does this_
   Migration 0074 (for issue #912) adds ProjectCycle table and version metadata 
to the project table.
   
   ```python
   def upgrade() -> None:
       # project: add version-scheme metadata. Existing rows default to 
"simple".
       with op.batch_alter_table("project", schema=None) as batch_op:
           batch_op.add_column(
               sa.Column(
                   "version_method",
                   sa.Enum("SIMPLE", "SEMVER", "CALVER", name="versionmethod"),
                   nullable=False,
                   server_default="SIMPLE",
               )
           )
           ...
       op.create_table(
           "projectcycle",
           ...
       )
   ```
   
   #### `migrations/versions/0076_2026.05.06_e5fa9b30.py` — `upgrade` (lines 
39-52)
   _currently does this_
   Migration 0076 (for issue #914) creates the LifecycleEvent table with full 
schema.
   
   ```python
   def upgrade() -> None:
       op.create_table(
           "lifecycleevent",
           sa.Column("id", sa.Integer(), nullable=False),
           sa.Column("project_key", sa.String(), nullable=False),
           sa.Column("cycle_key", sa.String(), nullable=True),
           sa.Column("version_key", sa.String(), nullable=True),
           sa.Column(
               "event",
               sa.Enum("RELEASE", "ARCHIVE", "WITHDRAW", "EOD", "EOS", "EOL", 
name="lifecycleeventtype"),
               nullable=False,
           ),
           ...
       )
   ```
   
   #### `atr/db/__init__.py` — `Session.project_cycle` (lines 432-454)
   _currently does this_
   The project_cycle query builder is already implemented in the Session class.
   
   ```python
       def project_cycle(
           self,
           cycle_key: Opt[str] = NOT_SET,
           project_key: Opt[str] = NOT_SET,
           cycle: Opt[str] = NOT_SET,
           _project: bool = False,
           _releases: bool = False,
       ) -> Query[sql.ProjectCycle]:
           query = sqlmodel.select(sql.ProjectCycle)
   
           if is_defined(cycle_key):
               query = query.where(sql.ProjectCycle.cycle_key == cycle_key)
           if is_defined(project_key):
               query = query.where(sql.ProjectCycle.project_key == project_key)
           if is_defined(cycle):
               query = query.where(sql.ProjectCycle.cycle == cycle)
   
           if _project:
               query = query.options(joined_load(sql.ProjectCycle.project))
           if _releases:
               query = query.options(select_in_load(sql.ProjectCycle.releases))
   
           return Query(self, query)
   ```
   
   ### Proposed approach
   Cannot determine a concrete approach because the issue body contains no 
specific punchlist items. The schema-level work appears substantially complete: 
ProjectCycle, LifecycleEvent, version metadata on Project, and related query 
builders all exist. Possible remaining work could include UI pages for managing 
project cycles, API endpoints for lifecycle events, validation of version 
patterns against the configured VersionMethod, or documentation of the new 
models — but none of this is specified in the issue.
   
   To make this issue actionable, the author would need to enumerate the 
specific remaining tasks. Alternatively, if all punchlist items have been 
completed via issues #912 and #914 and their associated PRs, this issue may be 
ready to close.
   
   ### Open questions
   - What specific items were intended to be on this punchlist? The issue body 
lists none.
   - Have issues #912 (ProjectCycle + version metadata) and #914 
(LifecycleEvent) fully addressed this issue's scope?
   - Are there remaining UI, API, or validation features related to project 
cycles that still need implementation?
   - Is the ProjectCycle SQLModel class definition complete (the sql.py file 
was truncated, so full definition wasn't visible)?
   - Is there a LifecycleEvent SQLModel class defined (migration exists but 
model definition wasn't visible in truncated file)?
   
   _The agent reviewed this issue and is not proposing patches in this run. 
Review the existing-code citations and open questions above before deciding 
next steps._
   
   ### Files examined
   - `atr/models/sql.py`
   - `migrations/versions/0074_2026.05.04_0d6e9554.py`
   - `atr/db/__init__.py`
   - `migrations/versions/0076_2026.05.06_e5fa9b30.py`
   - `migrations/versions/0001_2025.05.15_1d3ee5a0.py`
   - `atr/docs/database.md`
   - `atr/models/schema.py`
   - `migrations/versions/0072_2026.04.29_5e6dd4e8.py`
   
   ---
   *Draft from a triage agent. A human reviewer should validate before merging 
any change. The agent did not run tests or verify diffs apply.*


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to