G-catalog-B 5: distribution and gitea look at every open transfer at the idle watch's start

A transfer whose idle key ended while the bundle was down was never dropped. Both hand mesh-sdk's
FollowIdle their open transfers, which it gives Expired once the watch is taken.

Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
This commit is contained in:
2026-11-04 18:09:42 +01:00
parent ccb7eaff13
commit dc0349a220
2 changed files with 11 additions and 3 deletions
@@ -501,7 +501,7 @@ func main() {
Transfers: parts.BusTransfers[holder.Opening](holder.TransfersState), Cap: parts.BusCap(holder.IncomingObjects), Idle: parts.BusArm(holder.IdleState)}
v := &holder.Verbs{Holder: h, Catalog: store, Holds: kept[holder.Hold]{state: "holds", key: holder.Hold.Key}, Mirrors: mirrors{}}
go followMirrors(v)
go parts.FollowIdle(holder.IdleState, h.Expired, func(id string, dropped bool, err error) {
go parts.FollowIdle(holder.IdleState, parts.IDs(h.Transfers), h.Expired, func(id string, dropped bool, err error) {
if err != nil {
logf("%v", err)
return
+10 -2
View File
@@ -51,9 +51,17 @@ func incomingTool(typ, seat string, holder func() (*packageseats.Holder, error))
}
}
// followIdle drops a transfer when its idle key ends (packageseats.Holder.Expired): the bus's marker is the event.
// followIdle drops a transfer when its idle key ends (packageseats.Holder.Expired): the bus's marker is the event; at the
// watch's start every open transfer is looked at too, so one that ended while the bundle was down is dropped.
func followIdle(holder func() (*packageseats.Holder, error)) {
parts.FollowIdle(packageseats.IdleState, func(id string) (bool, error) {
open := func() ([]string, error) {
h, err := holder()
if err != nil {
return nil, fmt.Errorf("the holder cannot be made: %w", err)
}
return parts.IDs(h.Transfers)()
}
parts.FollowIdle(packageseats.IdleState, open, func(id string) (bool, error) {
h, err := holder()
if err != nil {
return false, fmt.Errorf("transfer %s's idle bound ended, but the holder cannot be made: %w", id, err)