You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tooling.apache.org by "asf-tooling (via GitHub)" <gi...@apache.org> on 2026/05/08 21:27:55 UTC

Re: [I] Compose feature complete (tooling-trusted-releases)

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

   <!-- gofannon-issue-triage-bot v2 -->
   
   **Automated triage** — analyzed at `main@2da7807a`
   
   **Type:** `unclear`  •  **Classification:** `no_action`  •  **Confidence:** `high`
   **Application domain(s):** `release_lifecycle`
   
   ### Summary
   Issue #930 is titled 'Compose feature complete' and described as a 'New master punch list to complete the compose phase,' but the issue body contains no specific action items, checkboxes, or task enumeration. The compose phase already has substantial functionality implemented (file uploads via SSH, file movement, deletion, hash generation, SBOM generation, quarantine handling, check management). Without enumerated punch list items, there is no specific code change to propose.
   
   ### Where this lives in the code today
   
   #### `atr/get/compose.py` — `selected` (lines 47-57)
   _currently does this_
   Main compose page handler that renders the full draft composition UI including file listing, move section, checks summary, quarantine status, SSH upload info, and admin controls.
   
   ```python
   @get.typed
   async def selected(
       session: web.Committer,
       _compose: Literal["compose"],
       project_key: safe.ProjectKey,
       version_key: safe.VersionKey,
   ) -> web.WerkzeugResponse | str:
       """
       URL: /compose/<project_key>/<version_key>
       Show the contents of the release candidate draft.
       """
   ```
   
   #### `atr/post/compose.py` — `selected` (lines 31-44)
   _currently does this_
   POST handler for the compose page, currently only handles the move-file operation.
   
   ```python
   @post.typed
   async def selected(
       session: web.Committer,
       _compose: Literal["compose"],
       project_key: safe.ProjectKey,
       version_key: safe.VersionKey,
       move_form: shared.compose.MoveFileForm,
   ) -> tuple[web.QuartResponse, int] | web.WerkzeugResponse:
       """
       URL: /compose/<project_key>/<version_key>
       """
       respond = _respond_helper(session, project_key, version_key)
   
       return await _move_file_to_revision(move_form, session, project_key, version_key, respond)
   ```
   
   #### `atr/post/draft.py` — `delete_file` (lines 40-51)
   _currently does this_
   One of several draft operations (delete, hashgen, quarantine_clear, recheck, sbomgen, sbomconvert) that support the compose phase.
   
   ```python
   @post.typed
   async def delete_file(
       session: web.Committer,
       _draft_delete_file: Literal["draft/delete-file"],
       project_key: safe.ProjectKey,
       version_key: safe.VersionKey,
       delete_file_form: shared.draft.DeleteFileForm,
   ) -> web.WerkzeugResponse:
       """
       URL: /draft/delete-file/<project_key>/<version_key>
       Delete a specific file from the release candidate, creating a new revision.
       """
   ```
   
   #### `atr/shared/compose.py` — `MoveFileForm` (lines 32-47)
   _currently does this_
   The only compose form variant currently defined, suggesting compose POST currently only supports file movement.
   
   ```python
   class MoveFileForm(form.Form):
       variant: MOVE_FILE = form.value(MOVE_FILE)
       source_files: form.RelPathList = form.label("Files to move")
       target_directory: safe.RelPath = form.label("Target directory")
   
       @pydantic.model_validator(mode="after")
       def validate_move(self) -> "MoveFileForm":
           if not self.source_files:
               raise ValueError("Please select at least one file to move.")
   
           target_dir_path = self.target_directory.as_path()
           for source_path in self.source_files:
               source = source_path.as_path()
               if source.parent == target_dir_path:
                   raise ValueError(f"Target directory cannot be the same as the source directory for {source.name}.")
           return self
   ```
   
   #### `atr/get/compose.py` — `_render_move_section` (lines 236-255)
   _currently does this_
   The move section mentions 'when ATR supports this feature' for SVN publishing, indicating some compose-related features are still pending.
   
   ```python
   def _render_move_section(max_files_to_show: int = 10) -> htm.Element:
       """Render the move files section with JavaScript interaction."""
       section = htm.Block()
   
       section.h2["Move items to a different directory"]
       section.p[
           """
           Move files in the compose area using the form below. You can change
           files freely until holding a vote, and then file locations are frozen.
           Moving files now only moves them on ATR, but as soon as a vote is
           started, if the vote is successful then the current locations will
           determine where they are published to SVN (when ATR supports this
           feature).
           """
           "Files with associated metadata (e.g. ",
           htm.code[".asc"],
           " or ",
           htm.code[".sha512"],
           " files) are treated as a single unit and will be moved together if any one of them is selected for movement.",
       ]
   ```
   
   ### Proposed approach
   This issue cannot be triaged into a specific code change because it is a punch list/tracking issue with no enumerated items in the body. The compose phase already has working implementations for: file uploads via SSH/rsync, file movement between directories, file deletion, SHA512 hash generation, SBOM generation and conversion, quarantine handling, recheck/cache reset, and draft deletion.
   
   To make this issue actionable, someone needs to enumerate the specific remaining items. Based on TODOs and hints in the code, potential items might include: (1) caching the expensive paths_recursive call noted at line ~73 of compose.py, (2) SVN publication support mentioned in the move section text, (3) additional compose form operations beyond just file movement, or (4) performance improvements. However, without the actual punch list, proposing diffs would be speculative.
   
   ### Open questions
   - What are the specific punch list items for completing the compose phase? The issue body contains no enumerated tasks.
   - Is there a related project board, milestone, or external document that contains the actual list of items?
   - Does 'feature complete' mean UI polish, missing operations (rename files, create directories directly), SVN publishing support, or something else entirely?
   
   _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/get/compose.py`
   - `atr/post/compose.py`
   - `atr/get/finish.py`
   - `atr/post/draft.py`
   - `atr/post/finish.py`
   - `atr/shared/compose.py`
   - `atr/shared/finish.py`
   - `atr/get/draft.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: dev-unsubscribe@tooling.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tooling.apache.org
For additional commands, e-mail: dev-help@tooling.apache.org