gg_multi_core 4.6.1
gg_multi_core: ^4.6.1 copied to clipboard
Workspace model of the gg_multi tool family - the ocean/tickets/trash layout, organization folders, url parsing, git platforms, ticket metadata and state.
Changelog #
4.6.1 - 2026-09-15 #
Fixed #
- Wire the new helix --workspace mode into gg do init workspace, and fix a pre-existing RepoFreshness bug that misjudged a never-fetched checkout's non-main default branch as a feature branch
4.6.0 - 2026-09-14 #
Added #
WorkspaceUtils.isHiddenNameandWorkspaceUtils.existingTicketDir, which resolves a ticket name to a real ticket only — never to a hidden folder such as.githubor a plain folder such asdocWorkspaceUtils.ticketNameError,isValidTicketNameandnormalizeTicketName: the one check for ticket names — a single folder name that is not empty, no path (no/or\, not absolute), not hidden and notticketsin any case — and the removal of one trailing separator (T1/from tab completion) and of one leadingtickets/that leaves a valid name (tickets/L1/→L1);existingTicketDirreturnsnullfor every other nameWorkspaceUtils.newTicketDir, the one place a ticket folder is created: it throws when the name is invalid, when the ticket exists, or when<root>/<name>or the legacy<root>/tickets/<name>is taken by something that is no ticket, takes an empty folder as it is and creates the folder non-recursively
Fixed #
- Hidden folders are never tickets:
WorkspaceUtils.isTicketDirrejects.github,.claude,.dart_tooland every closed ticket in.trash(<ticket>,<ticket> (2), …), even with aticket.json; a ticket in a workspace root with a hidden name (~/.ws/<ticket>) stays a ticket defaultOceanWorkspacePath,defaultGgMultiWorkspacePathandisInsideExistingWorkspacewalk past the.trashfolder, so a command run in<root>/.trash/…resolves<root>/.oceaninstead of<root>/.trash/.ocean, and a.masterin the trash is no longer migrated as a workspace of its owndefaultOceanWorkspacePathresolves<root>/.oceanfrom inside a legacy<root>/tickets/<ticket>that holds aticket.jsoninstead of<root>/tickets/.ocean, and climbs a relativeworkingDirsuch as.from its absolute path instead of stopping at./.ocean.trashandticketsare recognized in any case: a closed ticket in.Trash/<ticket>is no active ticket,Tickets/<ticket>is a legacy ticket — unlessTicketsholds a.oceanor.masterand is the workspace root itselfexistingTicketDirno longer resolves an empty or absolute name to the legacyticketsfolder or to an arbitrary folder, becausepath.joindrops the root in front of an absolute name
4.5.1 - 2026-09-11 #
Fixed #
gg do upgrade oceanrefreshesorigin/HEADafter the fetch, so a default branch renamed on the server is picked upgg do rm ticketprints thecdhint for the workspace root of a flat<root>/<ticket>ticket instead of the folder above it- Remove a stray
coverage:ignore-endmarker fromticket_cleanup.dartthat brokeformat_coverage --check-ignorein dependent packages
4.5.0 - 2026-09-11 #
Changed #
- Build clone urls of Azure DevOps organizations in the SSH form git can open
4.4.0 - 2026-09-11 #
4.3.0 - 2026-09-10 #
4.1.2 - 2026-09-02 #
4.1.0 - 2026-08-14 #
4.0.0 - 2026-08-13 #
Changed #
- Report freshness blockers on a dry run and survive a repo without commits
3.1.0 - 2026-08-10 #
Added #
publish_config_io.dart:loadTicketRepoPublishFileslayers the per-repo files over the legacy ticket-widegg-publish.json
Changed #
PublishPlannerkeeps the answers per repository (PublishPlan.configs/save()) and asks every question again, with the recorded answer pre-selectedPublishPlanEntrycarries the pull-request body built from the recorded commits- Refactor commit messages, version increment
3.0.1 - 2026-08-10 #
Changed #
- Make sure »dart pub upgrade --tighten --major-versions« is called before publishing
3.0.0 - 2026-08-10 #
2.3.1 - 2026-08-10 #
Fixed #
- Fix org-url repo add, code-workspace upkeep on rm and the auto-merge PR hint
2.2.0 - 2026-08-09 #
Changed #
- Improve commit behavior
- Move gg commit conventions from gg_git to gg_one_core
- Move the git and process plumbing to gg_git