@go-labs-sg/gosh 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -183,8 +183,9 @@ value in that template team's `order` field:
183
183
  Events default to `OPEN` progression, which keeps the existing open-play flow.
184
184
  Sequential progression starts each team or individual on an ordered station
185
185
  route. Group routing is available only for `TEAM` play mode. Create teams and
186
- assign them to routing groups before launching the event; setup freezes when
187
- play starts. A group shares its ordered station route, while each team keeps
186
+ assign them to routing groups before launching the event; sequential setup
187
+ freezes when play starts. Grouped OPEN events lock only a started team's group
188
+ assignment, a started group's route and the gameplay settings. A group shares its ordered station route, while each team keeps
188
189
  independent progress through that route.
189
190
 
190
191
  Configure gameplay, then manage the event's routing groups and their complete
@@ -225,6 +226,43 @@ the desired order. Use `groupId: null` with `assign-team` to unassign a team.
225
226
  Group names are trimmed and limited to 80 characters. The delete command
226
227
  requires the additional `--allow-delete` effect flag.
227
228
 
229
+ ### Staggered group release
230
+
231
+ `routing-group release` changes flag-off without changing routes. It requires
232
+ launch permission and a draft, ready or live TEAM event with group routing. A
233
+ different group already playing does not block it. Once a team in the target
234
+ group has started, only HOLD (emergency hold) and RELEASE_SCHEDULED_HOLD (resume)
235
+ are accepted.
236
+
237
+ ```bash
238
+ gosh routing-group release \
239
+ --input '{"eventId":"event-id","groupId":"group-d","action":"SCHEDULE","releaseAt":"2030-01-01T09:20:00+08:00"}' \
240
+ --target group-d \
241
+ --allow-state-change
242
+ gosh routing-group release \
243
+ --input '{"eventId":"event-id","groupId":"group-d","action":"HOLD"}' \
244
+ --target group-d \
245
+ --allow-state-change
246
+ ```
247
+
248
+ Replace example IDs/time with your intended target and a future instant.
249
+ SCHEDULE requires an ISO timestamp with `Z` or a numeric timezone offset;
250
+ offsetless, invalid and past times are rejected. CLEAR sets the schedule to null
251
+ but preserves a hold. HOLD overrides the clock. RELEASE_SCHEDULED_HOLD removes
252
+ the hold and retains the schedule; an elapsed/no schedule releases immediately.
253
+ RELEASE_NOW clears both schedule and hold. Omit `releaseAt` for non-schedule
254
+ actions. Repeated no-op controls do not create duplicate audits. List routing
255
+ groups to read back release values and editability, and use
256
+ `gosh routing-group release-history --input '{"eventId":"event-id","groupId":"group-d"}'`
257
+ for the five most recent actor/before/after changes; the existing event activity
258
+ timeline provides the full audit history.
259
+
260
+ The server evaluates deadlines without cron. Release never starts a timer or
261
+ bypasses LIVE status, availability, check-in or captain permissions. Any team in
262
+ a group beginning play locks that group's schedule; emergency HOLD/resume stays
263
+ available and does not pause running station clocks. There is no
264
+ untimed practice-mission exemption. See [the design notes](../../../docs/design/gosh-staggered-routing-group-release.md).
265
+
228
266
  For sequential player actions, complete any required location check-in with
229
267
  `gosh player station-check-in` first. The server checks the signed-in player’s
230
268
  current check-in record; a successful check-in also starts the station timer.
@@ -1173,6 +1173,25 @@
1173
1173
  "requiresAuth": true,
1174
1174
  "summary": "List an event's routing groups, ordered stations, and assigned teams."
1175
1175
  },
1176
+ {
1177
+ "effects": [],
1178
+ "input": "json",
1179
+ "operation": "query",
1180
+ "path": ["routing-group", "release-history"],
1181
+ "procedure": "team.listRoutingGroupReleaseHistory",
1182
+ "requiresAuth": true,
1183
+ "summary": "Show a routing group's five most recent release changes with actor, action and before/after UTC values."
1184
+ },
1185
+ {
1186
+ "effects": ["state-change"],
1187
+ "input": "json",
1188
+ "operation": "mutation",
1189
+ "path": ["routing-group", "release"],
1190
+ "procedure": "team.updateRoutingGroupRelease",
1191
+ "requiresAuth": true,
1192
+ "summary": "Schedule (future releaseAt ISO timestamp with offset), CLEAR schedule, HOLD, RELEASE_SCHEDULED_HOLD (keep schedule), or RELEASE_NOW for a routing group. After a group starts, only HOLD and RELEASE_SCHEDULED_HOLD are accepted. Requires launchEvent permission.",
1193
+ "targetKeys": ["groupId", "eventId"]
1194
+ },
1176
1195
  {
1177
1196
  "effects": ["state-change"],
1178
1197
  "input": "json",
@@ -450,6 +450,22 @@ List an event's routing groups, ordered stations, and assigned teams.
450
450
  - Input: `--input '<json>'` required
451
451
  - Effects: read-only
452
452
 
453
+ ## `gosh routing-group release-history`
454
+
455
+ Show a routing group's five most recent release changes with actor, action and before/after UTC values.
456
+
457
+ - Authentication: browser-authenticated CLI session required
458
+ - Input: `--input '<json>'` required
459
+ - Effects: read-only
460
+
461
+ ## `gosh routing-group release`
462
+
463
+ Schedule (future releaseAt ISO timestamp with offset), CLEAR schedule, HOLD, RELEASE_SCHEDULED_HOLD (keep schedule), or RELEASE_NOW for a routing group. After a group starts, only HOLD and RELEASE_SCHEDULED_HOLD are accepted. Requires launchEvent permission.
464
+
465
+ - Authentication: browser-authenticated CLI session required
466
+ - Input: `--input '<json>'` required
467
+ - Effects: state-change
468
+
453
469
  ## `gosh routing-group create`
454
470
 
455
471
  Create a routing group within an event before play starts.
package/dist/index.js CHANGED
@@ -7453,6 +7453,14 @@ var typedOperations = {
7453
7453
  kind: "query",
7454
7454
  invoke: (client, input) => client.team.listRoutingGroups.query(input)
7455
7455
  },
7456
+ "team.listRoutingGroupReleaseHistory": {
7457
+ kind: "query",
7458
+ invoke: (client, input) => client.team.listRoutingGroupReleaseHistory.query(input)
7459
+ },
7460
+ "team.updateRoutingGroupRelease": {
7461
+ kind: "mutation",
7462
+ invoke: (client, input) => client.team.updateRoutingGroupRelease.mutate(input)
7463
+ },
7456
7464
  "team.createRoutingGroup": {
7457
7465
  kind: "mutation",
7458
7466
  invoke: (client, input) => client.team.createRoutingGroup.mutate(input)
@@ -7865,6 +7873,7 @@ var defaultMutationTargetKeys = [
7865
7873
  "name"
7866
7874
  ];
7867
7875
  var mutationTargetKeys = {
7876
+ "team.updateRoutingGroupRelease": ["groupId", "eventId"],
7868
7877
  "team.setGameplaySettings": ["eventId"],
7869
7878
  "team.createRoutingGroup": ["eventId"],
7870
7879
  "team.renameRoutingGroup": ["groupId"],
@@ -7985,6 +7994,8 @@ var commands = [
7985
7994
  mutation(["team", "set-station-routes"], "team.setStationRoutes", "Replace a team's linked station route and set its order.", ["state-change"]),
7986
7995
  mutation(["event", "set-gameplay"], "team.setGameplaySettings", "Set open or sequential progression, group routing, and per-mission skipping before play starts.", ["state-change"]),
7987
7996
  query(["routing-group", "list"], "team.listRoutingGroups", "List an event's routing groups, ordered stations, and assigned teams."),
7997
+ query(["routing-group", "release-history"], "team.listRoutingGroupReleaseHistory", "Show a routing group's five most recent release changes with actor, action and before/after UTC values."),
7998
+ mutation(["routing-group", "release"], "team.updateRoutingGroupRelease", "Schedule (future releaseAt ISO timestamp with offset), CLEAR schedule, HOLD, RELEASE_SCHEDULED_HOLD (keep schedule), or RELEASE_NOW for a routing group. After a group starts, only HOLD and RELEASE_SCHEDULED_HOLD are accepted. Requires launchEvent permission.", ["state-change"]),
7988
7999
  mutation(["routing-group", "create"], "team.createRoutingGroup", "Create a routing group within an event before play starts.", ["state-change"]),
7989
8000
  mutation(["routing-group", "rename"], "team.renameRoutingGroup", "Rename an event's routing group before play starts.", ["state-change"]),
7990
8001
  mutation(["routing-group", "delete"], "team.deleteRoutingGroup", "Delete an unassigned routing group before play starts.", ["state-change", "delete"]),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@go-labs-sg/gosh",
3
- "version": "0.13.0",
3
+ "version": "0.14.0",
4
4
  "description": "GOSH CLI for organizers and AI agents — manage organizations, events, teams, stations, missions, templates, and live operations through the GOSH API.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",