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]