Skip to content

refactor(tools): move skill token measurement to Go #810

Description

@tbhb-agent

Problem

Pull request #836 merged the Go port of skill token measurement: agentrepo skill-tokens (internal/agentrepo/skilltokens.go:12) over internal/tokens/measure.go:64. It left activation to a follow-up. The skill-tokens task still runs bash tools/skill-tokens.sh (mise.toml:487), so the shell backend selection, manifest partitioning, file discovery, record assembly and budget reporting (tools/skill-tokens.sh:69, tools/skill-tokens.sh:110, tools/skill-tokens.sh:139, tools/skill-tokens.sh:166, tools/skill-tokens.sh:203, tools/skill-tokens.sh:224) are still what the repository runs, on origin/main at 44be762a34eec4a832e1ed608c77ebf188357719. The Go command has no caller.

The remaining work is to activate and verify that command through the task, with parity fixes only where a check finds a difference from the frozen shell.

This is the token-measurement split of #332. Part of #588.

Acceptance criteria

  1. AC1: Default and explicit skill selection, including missing-manifest skips, equals the frozen command's selection.
  2. AC2: Each skill selects the same counting backend, model and encoding under the existing defaults and environment precedence.
  3. AC3: Codex skill measurement remains local and never invokes the Anthropic counting backend.
  4. AC4: Manifest, frontmatter, description, body and bundled-file counts equal the frozen command's for identical backend responses. Merged into AC6, whose record bytes contain every count.
  5. AC5: Bundled-file selection includes tracked and nonignored untracked text and excludes manifests, token records, ignored files and non-text files as the frozen command does. Merged into AC6, whose record rows list the bundled files.
  6. AC6: Each skill's token-record bytes after an invocation equal the frozen command's for the same input and backend results. That covers manifest, frontmatter, description, body and bundled-file counts, and bundled-file selection: tracked and nonignored untracked text is included; manifests, token records, ignored files and non-text files are excluded.
  7. AC7: Failed counting, discovery, measurement or total calculation returns nonzero, including a producer that prints plausible data before failing.
  8. AC8: The body-budget threshold remains advisory, with the same warning/report transcript and a successful status when all measurements succeed.
  9. AC9: Existing entry points end as thin shell wrappers that probe the Go subcommand without side effects and fall back to frozen shell only when that capability is absent. Dropped: the design no longer edits the shell file, and the dispatch moves into the task (AC13, AC14).
  10. AC10: A supported Go failure never invokes frozen shell or repeats a counting request. Dropped: the task never reaches frozen shell. The no-repeat half is covered by AC13.
  11. AC11: Non-functional: release N-2 invocations, environment settings and record consumers remain compatible without raising the required binary floor.
  12. AC12: Non-functional: identical input text and backend responses produce the same records on supported Linux, macOS and Windows environments.
  13. AC13: The skill-tokens mise task runs the checkout's agentrepo skill-tokens source (go run ./cmd/agentrepo skill-tokens) with the same arguments. No shell file is on its path, no agentrepo binary found on PATH is trusted, and a failure triggers no repeated counting request.
  14. AC14: tools/skill-tokens.sh and its tests are byte-identical to origin/main, and the change contains no changed .sh or .bash file.
  15. AC15: The shell file's retirement is tracked by chore(skill-tokens): retire the frozen shell fallback #951, which is amended so it deletes tools/skill-tokens.sh and its frozen-comparison fixtures after this pull request merges, with no capability-probe wrapper and no N-2 window.
  16. AC16: Non-functional: the pull request declares its consumer impact (Compatibility: none under Risk, with the reason that no consumer calls the shell file) and passes mise run check, mise run cover-go-check and mise run cover-py-check.

Scope and non-goals

Preserve backend classification for packaged/deployed Codex paths versus other skill paths; model/encoding defaults and overrides; one measured Claude request envelope per invocation; manifest partitioning and folded-description extraction; byte sizes; sorted bundled rows; relative recorded paths; backend-specific encoding metadata; deterministic JSON without timestamps; budget-at-or-above comparisons; skip text, summaries and final guidance. Source evidence: tools/skill-tokens.sh:44, tools/skill-tokens.sh:114, tools/skill-tokens.sh:147, tools/skill-tokens.sh:166, tools/skill-tokens.sh:203, tools/skill-tokens.sh:240 and tools/skill-tokens.sh:266.

The Go engine and its unit tests exist from #836. This change reuses them and adds only the task change, parity and failure fixtures that compare against the frozen shell, and focused corrections for any difference those fixtures find. Port or cover every behavior exercised by tests/scripts/skill-tokens-backends.bats:29 through tests/scripts/skill-tokens-backends.bats:86. Preserve the failure boundary before writing a skill record when that skill's counts, file discovery or byte measurements fail (tests/scripts/skill-tokens-backends.bats:39, tests/scripts/skill-tokens-backends.bats:52, tests/scripts/skill-tokens-backends.bats:65). A later skill's failure does not roll back earlier completed records; the final-total regression asserts failure status, not whole-invocation rollback.

Non-goals: changing tokenization, models, encodings, authentication or provider contracts; adding another counting service; imposing a hard body limit; generalizing frontmatter syntax; making the entire invocation transactional; changing skill generation and deployment; or deleting the shell file (#951).

Approach

Change the skill-tokens task body at mise.toml:487 to go run ./cmd/agentrepo skill-tokens, the way other tasks start Go from the checkout (mise.toml:290 and mise.toml:604). Running the checkout's source means the task uses the reviewed code, never an older agentrepo on PATH, and raises no installed-binary floor (AC11). Don't route through the generic run task: it executes Bash and a shell helper (mise.toml:196, mise.toml:200), which would violate AC13. Leave tools/skill-tokens.sh and its tests untouched: the shell-allowlist gate checks every command of any changed .sh file (cmd/shell-allowlist/changed.go:30), and moving the body into that file failed it.

No consumer calls tools/skill-tokens.sh directly: the only caller is mise.toml:487, and the remaining occurrences are tests, the generated_by provenance string, documentation and comments. tools/AGENTS.md marks tools/ internal. This was checked across the tracked tree only, not external clones. The shell file therefore needs no capability-probe wrapper or N-2 window, and #951 deletes it after this merges.

Start with failed-count and failed-discovery checks, then compare the Go command with frozen shell using deterministic backend responses. Preserve the generation order (mise.toml:466, mise.toml:477). Leave code structure to the pull request.

Superseded pull requests

The new pull request replaces #937 and #987. Both edit the shell file into a wrapper with a legacy fallback, so neither implements this design. The new pull request's description says so, begins a fresh review count, and does not inherit approvals or findings from either. After it opens, #937 and #987 are closed as superseded, each with a comment naming the new pull request. Neither keeps a Closes #810 reference.

Dependencies

Native blocked-by edges on this issue: none to set. The live blockedBy list is empty, and that is correct.

#332 and #588 track this split. No unpublished sibling draft is needed to begin.

Size

M. One pull request for task activation, parity and failure fixtures, and any focused corrections. It reuses the #836 implementation and stays under 800 code lines.

Verify plan

  • AC7: first reproduce each failure case at tests/scripts/skill-tokens-backends.bats:39, tests/scripts/skill-tokens-backends.bats:52, tests/scripts/skill-tokens-backends.bats:65, tests/scripts/skill-tokens-backends.bats:74 and tests/scripts/skill-tokens-backends.bats:86. Cover silent failure, plausible output followed by failure and invalid counts; assert status and the existing per-record preservation boundary, without imposing invocation-wide rollback.
  • AC1: compare default discovery, explicit directories, trailing separators and absent manifests with frozen shell.
  • AC2, AC3: backend/model/encoding fixtures cover default values, every override and precedence combination, relative/absolute input spellings, packaged and deployed Codex paths and non-Codex paths. An Anthropic invocation trap remains untouched for Codex, extending tests/scripts/skill-tokens-backends.bats:29.
  • AC6 (counts): deterministic responses cover manifest sections, folded descriptions, missing frontmatter, empty and UTF-8 text, multiple Claude skills and envelope subtraction; compare each count and the single baseline request.
  • AC6 (selection): tracked, untracked, ignored, empty, binary and text fixtures compare the sorted bundled set, skip diagnostics and byte sizes.
  • AC6: compare exact record bytes, keys, optional encoding metadata, relative paths and totals; repeat unchanged input and assert no content drift. A two-skill failure fixture confirms the first completed record remains.
  • AC8: counts just below, equal to and above the budget compare warnings, per-skill summaries, final guidance and successful status.
  • AC13: read the task definition and run it against a stub backend with an older stand-in agentrepo first on PATH; assert the checkout's source runs, the arguments arrive, no .sh file runs, and a failure after partial output fails the task with one recorded backend request.
  • AC14: git diff --stat origin/main lists no .sh or .bash path, and mise run lint-shell-allowlist passes.
  • AC15: read chore(skill-tokens): retire the frozen shell fallback #951 after amendment: its body has no wrapper or probe requirement, names the deleted paths, and the live blockedBy of chore(skill-tokens): retire the frozen shell fallback #951 lists refactor(tools): move skill token measurement to Go #810.
  • AC16: the description carries the compatibility line under Risk; mise run check, mise run cover-go-check and mise run cover-py-check pass on the reviewed head.
  • AC11: run the changed task and token-record readers against N-2 record fixtures.
  • AC12: run the Go corpus on Linux, macOS and Windows. All verification uses local deterministic backend stubs, without real API counting or authentication changes. Run focused tests, generation/deployment consistency checks, mise run lint and mise run test on the reviewed head.
  • Definition of done: D1 each AC is verified at the merged head, with the commands and results cited in the pull request's Verification. D2 an independent review approves the exact merged head, and every finding has a recorded disposition. D3 required checks pass with no gate loosened. D4 the leak scans the repository specifies are clean, and every post made for this work (comments, descriptions) passes the per-post leak review before it is posted. D5 every commit is signed. D6 the documentation matches, including the tools/skill-tokens.sh row in docs/script-inventory.md, or the description says No doc impact with the reason. D7 every commit carries an Assisted-by trailer and the pull request carries the provenance:agent-assisted label. D8 the change stays within the pull request size limits. D9 follow-up work, including deferred review findings, is filed as issues, each with a Problem section and numbered acceptance criteria and linking this issue; the pull request's Related section lists them, including chore(skill-tokens): retire the frozen shell fallback #951 as amended, and any code that defers work links its issue. D10 the merge closes this issue through a closing reference, the project board shows the state Done, and a final Status: comment names the merge commit.

Risks

An incorrect envelope or backend selection corrupts committed token records; nondeterministic metadata creates persistent drift. A task left on the old shell path would leave the port unused. go run compiles on each invocation, which adds startup time to regen-generated. Exact record comparisons and invocation-count assertions cover the first boundaries. Undo: revert the task change.

Operator authority

None.

Activity

  1. added
    change:featPR adds or changes a feature (Conventional Commit type feat)
    on Oct 26, 2026
  2. tbhb-agent commented on Oct 26, 2026

    @tbhb-agent
    ContributorAuthor

    Refinement: READY — skill token measurement port to Go has clear, testable requirements and verified source boundaries
    Model: gemini-4-argon-high

    Checked

    • Live issue and referenced issues: Read live tbhb-dev/devtools#810 (0 comments) and referenced issues #332, #588, #542, #333, #544, #382, #545, #546, and #359.
    • Baseline and Problem boundaries against origin/main (a0347a715fab580ece45edfcb3d13509620459a8):
      • tools/skill-tokens.sh:69 (count_claude backend invocation; count_codex follows at tools/skill-tokens.sh:87).
      • tools/skill-tokens.sh:110 (prepare_backend single-request Claude envelope baseline measurement at tools/skill-tokens.sh:110-120).
      • tools/skill-tokens.sh:139 (skill directory loop for dir in "${dirs[@]}", trailing slash normalization, missing SKILL.md skip to stderr, and path-based backend classification at tools/skill-tokens.sh:139-158).
      • tools/skill-tokens.sh:166 (embedded Python manifest partitioning into frontmatter, body, and folded description at tools/skill-tokens.sh:166-177).
      • tools/skill-tokens.sh:203 (git -c core.quotePath=false ls-files --cached --others --exclude-standard -- "$dir" | sort discovery, SKILL.md/tokens.json exclusion, grep -Iq . non-text skip, per-file net count, and byte measurement at tools/skill-tokens.sh:203-219).
      • tools/skill-tokens.sh:224 (embedded Python tokens.json assembly with relative paths, sorted keys, 2-space indentation, optional tokenizer, and no timestamp at tools/skill-tokens.sh:224-264, followed by advisory body-budget warning and summary output at tools/skill-tokens.sh:266-284).
    • Acceptance criteria (AC1–AC12):
      • AC1–AC10 are observable, testable, single-outcome behavioral requirements free of prescribed internal Go package layout or implementation details.
      • AC11 and AC12 state the non-functional requirements for release N-2 compatibility (docs/compatibility.md:1-5) and cross-platform record determinism across Linux, macOS, and Windows.
    • Scope, non-goals, and Approach:
      • Source citations match origin/main: tools/skill-tokens.sh:44 (BODY_BUDGET default and model/encoding environment variables at tools/skill-tokens.sh:44-49), tools/skill-tokens.sh:114 (baseline measurement), tools/skill-tokens.sh:147 (Codex vs. Claude path matching), tools/skill-tokens.sh:166 (manifest split), tools/skill-tokens.sh:203 (bundled file discovery), tools/skill-tokens.sh:240 (timestamp-free JSON record structure), and tools/skill-tokens.sh:266 (-ge budget check and summary formatting).
      • Existing Bats coverage citations match origin/main: tests/scripts/skill-tokens-backends.bats:29 (Codex local counting without touching Anthropic trap), tests/scripts/skill-tokens-backends.bats:39 (bundled tokenizer failure writes no record), tests/scripts/skill-tokens-backends.bats:52 (git ls-files discovery failure writes no record), tests/scripts/skill-tokens-backends.bats:65 (wc byte measurement failure writes no record), tests/scripts/skill-tokens-backends.bats:74 (Claude count failure propagation through net), and tests/scripts/skill-tokens-backends.bats:86 (failed bundled total calculation returns nonzero after record write).
      • Task and generation-order citations match mise.toml:466 ([tasks.regen-generated], tested in tests/tasks/regen-generated.bats:35-42) and mise.toml:477 ([tasks.skill-tokens]).
      • Design and internal code structure are explicitly left to the pull request.
    • Dependencies:
      • Named issues #542, #333, #544, #382, #545, #546, #359, #332, and #588 exist and are open; prerequisite (#542 following the #333–#546 and #359 chain) and tracking epics (#332, #588) are accurately classified.
    • Size:
      • Size M fits a single pull request covering the Go measurement port, record compatibility, failure coverage, and thin entry point wrapper.
    • Verify plan:
      • Maps every acceptance criterion (AC1–AC12) and D1–D10 to concrete, offline-capable verification checks using deterministic backend stubs.
    • Risks and undo:
      • Identifies record corruption, nondeterministic drift, and duplicate backend calls on fallback, paired with mitigations and a clear undo path (revert the port).
    • Operator authority:
      • None. Verified against .agents/agent-skills.conf:4-9 (golden_paths, constitutional_paths, gate_config_paths, owner_paths) and .github/CODEOWNERS:1-13: porting tools/skill-tokens.sh to Go while keeping mise.toml:466 and mise.toml:477 unchanged does not touch protected owner/golden paths or loosen any gate.

    Gaps

    None.

    Split

    None needed; Size M fits in one pull request.

    Definition of done

    The definition of done for #810 (Feature). Tick each item and give its evidence. All ticked boxes below indicate planning coverage in the issue's acceptance criteria and verify plan, not completed implementation work.

    • D1 The author verified each AC on the merged head, and the Verification section of the pull request cites each AC ID with its evidence: the command and its result, or a link.
      • Evidence (planning coverage, not completed work): ## Verify plan specifies concrete checks for AC1 through AC12 and explicitly requires D1 verification at the merged head with commands and results cited in the pull request's Verification section.
    • D2 An independent reviewer approved the exact merged head, and the author resolved each finding or filed it as a follow-up.
      • Evidence (planning coverage, not completed work): ## Verify plan (Definition of done: D2) requires independent review approval of the exact merged head and a recorded disposition for every finding.
    • D3 The required checks pass on that head, and any loosened gate has the owner's approval of that exact head.
      • Evidence (planning coverage, not completed work): ## Verify plan requires mise run lint, mise run test, and generation/deployment consistency checks on the reviewed head, and Definition of done: D3 requires required checks to pass with no gate loosened.
    • D4 The leak scans come back clean: gitleaks, devtools' check-leaks.sh with the repository's private-strings list, and the leak review of each post.
      • Evidence (planning coverage, not completed work): ## Verify plan (Definition of done: D4) requires the repository's leak scans to be clean and every post (comments, descriptions) to pass per-post leak review before posting.
    • D5 The author signed each commit, the squash included.
      • Evidence (planning coverage, not completed work): ## Verify plan (Definition of done: D5) requires every commit to be signed.
    • D6 The docs match the change (README, docs/, CHANGELOG or help text), or the Verification section says "No doc impact" and why.
      • Evidence (planning coverage, not completed work): ## Verify plan (Definition of done: D6) requires documentation to match or the pull request description to state No doc impact with the reason.
    • D7 The commits and the squash have Assisted-by trailers, and the pull request has the provenance:agent-assisted label.
      • Evidence (planning coverage, not completed work): ## Verify plan (Definition of done: D7) requires every commit to carry an Assisted-by trailer and the pull request to carry the provenance:agent-assisted label.
    • D8 The pull request stays within the size limits, or the owner approved its exact head over the hard limit.
      • Evidence (planning coverage, not completed work): ## Size scopes the work to one M pull request and ## Verify plan (Definition of done: D8) requires staying within pull request size limits.
    • D9 The author files follow-ups and deferred findings as issues with at least a Problem and numbered AC and lists them under the Related section of the pull request. Any work left in the code links its issue.
      • Evidence (planning coverage, not completed work): ## Scope and non-goals notes fallback removal follows separately under D9, and ## Verify plan (Definition of done: D9) requires filing follow-up work and deferred review findings as issues with a Problem section and numbered acceptance criteria linked under Related.
    • D10 The merge closes the issue through a closing reference and the board shows Done. The final Status: comment names the merge commit.
      • Evidence (planning coverage, not completed work): ## Verify plan (Definition of done: D10) requires closing the issue via a closing reference on merge, the project board showing Done, and a final Status: comment naming the merge commit.

    Round: 1 of 3

  3. moved this from Backlog to In progress in devtoolson Oct 27, 2026
  4. added
    refinement:activeA refinement round is open; not ready for implementation
    and removed
    refinement:readyPassed the Definition of Ready; may be picked up
    on Oct 31, 2026
  5. tbhb-dev-reviews commented on Oct 31, 2026

    @tbhb-dev-reviews

    Refinement: NOT READY — option 2 is viable, but dependencies and remaining scope need reconciliation

    Checked

    Gaps

    1. Dependencies are not native and appear stale. The body says Depends on refactor(release): remove obsolete dispatch orchestration #542, which remains open, but the native blocked-by endpoint returns zero dependencies. refactor(release): remove obsolete dispatch orchestration #542 concerns obsolete release orchestration; sibling tooling issues refactor(tools): move skill generation to Go #807/refactor(tools): move script hygiene checks to Go #809 explicitly need no such release-chain dependency. Either remove this obsolete dependency with a rationale or retain it, explain the required handoff and add the native blocked-by edge. Do not leave a prose-only blocker.
    2. Describe the remaining work after merged PR feat(tokens): add deterministic skill measurement #836. Go measurement and its command already exist at internal/tokens/measure.go:64 and internal/agentrepo/skilltokens.go:12. feat(tokens): add deterministic skill measurement #836 explicitly left caller activation to a follow-up. Reframe Problem/Approach/Size around activating and verifying that command, with focused parity fixes only as needed. State how the task uses the checkout's command without raising the installed binary floor (AC11), executing shell files (AC13) or trusting an older PATH binary. Direct Go task precedents provide a viable route. Require the replacement statement and fresh review count in the new PR text, and explicitly disposition the two open superseded PRs.
    3. Align completion and cleanup with option 2. Existing follow-up chore(skill-tokens): retire the frozen shell fallback #951 still requires an N-2 capability-probe wrapper, contrary to this body's conclusion that the internal shell path needs no consumer window. Name and reconcile that follow-up under D9 so cleanup does not recreate the rejected wrapper. Add the repository-specific completion checks: mise run check, mise run cover-go-check and mise run cover-py-check; lint/test alone do not cover them. Include the task's consumer-impact declaration or the reason for no consumer impact.

    Split

    No further implementation split is needed. #836 already delivered the Go engine. Task activation, argument/failure integration checks and bounded parity corrections fit one PR below 800 code lines. Shell deletion remains a separately tracked follow-up. Retain #588's freeze and do not edit shell to implement dispatch.

    Definition of done

    Checked boxes indicate explicit planning coverage in the ACs/Verify plan, not completed implementation. The gaps above still prevent readiness.

    • D1 Each active AC is verified at the merged head with evidence in PR Verification. Covered by individual Verify bullets and D1.
    • D2 Independent approval covers the exact merged head and findings have dispositions. Covered by Verify plan D2.
    • D3 Required checks pass; this issue prohibits gate loosening. Covered by Verify plan D3 and AC14. Repository-specific check/coverage additions remain gap 3.
    • D4 Repository leak scans and per-post leak review pass. Covered by Verify plan D4; this comment is submitted through gh-post.
    • D5 Each commit, including the squash, is signed. Covered by Verify plan D5's every-commit requirement.
    • D6 Documentation matches or Verification explains No doc impact. Covered by Verify plan D6; place that explanation in Verification.
    • D7 Commits and squash carry Assisted-by; the PR has provenance:agent-assisted. Covered by Verify plan D7's every-commit requirement and label.
    • D8 The PR stays within size limits. Covered by Size M and Verify plan D8; reuse feat(tokens): add deterministic skill measurement #836 and confirm fewer than 800 code lines.
    • D9 Follow-ups have Problem/numbered ACs, appear in Related and are linked from deferred code. Covered by Verify plan D9; reconcile chore(skill-tokens): retire the frozen shell fallback #951 as described in gap 3.
    • D10 Merge closes the issue, the board shows Done and a final Status comment names the merge commit. Covered by Verify plan D10.

    Round: 2 of 3

  6. tbhb-dev-reviews commented on Oct 31, 2026

    @tbhb-dev-reviews

    Refinement: READY — activate the delivered Go command through the task with frozen-shell parity checks

    Checked

    Gaps

    None blocking. Round 2's dependency, remaining-scope and cleanup/completion gaps are addressed in the revised body. The #951 amendment/native edge and superseded-PR dispositions remain implementation completion checks, not claims of actions already performed.

    Split

    No further split needed. #836 already delivered the engine and command. Task activation, deterministic parity/failure fixtures and focused corrections fit one M pull request under 800 code lines. Shell deletion remains #951; no shell logic is added here.

    Definition of done

    Ticks indicate independently checked planning coverage in the current ACs and Verify plan, not completed implementation.

    • D1 Each active AC has a Verify bullet; D1 requires merged-head evidence for each ID in PR Verification.
    • D2 Verify plan D2 requires independent approval of the exact merged head and a recorded disposition for each finding.
    • D3 Verify plan D3 requires passing required checks without gate loosening; AC14/AC16 add the shell gate, check and coverage floors.
    • D4 Verify plan D4 requires repository leak scans and per-post leak review. This comment is submitted through gh-post.
    • D5 Verify plan D5 requires every commit signed, including the squash.
    • D6 Verify plan D6 requires matching documentation, explicitly including the script inventory, or a reasoned No doc impact declaration. Put that evidence in PR Verification.
    • D7 Verify plan D7 requires Assisted-by on every commit, including the squash, and the provenance:agent-assisted PR label.
    • D8 Size and Verify plan D8 limit the change to one M PR below 800 code lines.
    • D9 Verify plan D9 requires follow-up issues with Problem and numbered ACs, Related links and code references; AC15 specifically reconciles chore(skill-tokens): retire the frozen shell fallback #951 and its native dependency.
    • D10 Verify plan D10 requires the closing reference, board Done state and final Status comment naming the merge commit.

    Repository additions are also planned: AC16 requires check and both coverage floors; the Approach preserves generation/token/deployment order; AC16 supplies the compatibility declaration and no-consumer-call rationale. Carry the consumer-impact explanation into PR Verification as well as Risk.

    Round: 3 of 3

  7. added
    refinement:readyPassed the Definition of Ready; may be picked up
    and removed
    refinement:activeA refinement round is open; not ready for implementation
    on Oct 31, 2026
  8. added 2 commits that reference this issue on Oct 31, 2026
    322f7db
    0dbbc1f
  9. moved this from In progress to Done in devtoolson Oct 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    change:featPR adds or changes a feature (Conventional Commit type feat)refinement:readyPassed the Definition of Ready; may be picked up

    Fields

    Priority

    None yet

    Work type

    None yet

    Projects

    • Status
      Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions