The server now registers the framework's built-in noop kind through
registerJobKinds before the runner starts, so production can run a job; a
noop job succeeds with {"ok":true}. Each feature's kinds are registered in
the same function.
Handlers report failure only with a *jobs.Failure code their kind declared
at registration. The runner stores and returns only that code, or
internal_error, interrupted or unknown_kind, and logs only the job id, kind,
code and a fixed reason: handler error text is never stored, returned or
logged. Results implement jobs.Public, whose PublicJSON names exactly the
data that is stored and returned.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
package jobs
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
)
|
|
|
|
// KindNoop is the framework's built-in job kind: it does no work and
|
|
// succeeds with {"ok":true}. It is the runner's own trivial kind, as Feature
|
|
// 09's trivial test skill is the harness's, and the startup and readiness
|
|
// job: a noop job reaching succeeded proves the runner claims, runs and
|
|
// records jobs.
|
|
const KindNoop = "noop"
|
|
|
|
// NoopPayload is the payload of a noop job.
|
|
type NoopPayload struct{}
|
|
|
|
// NoopResult is the result of a noop job.
|
|
type NoopResult struct{}
|
|
|
|
// PublicJSON returns {"ok":true}.
|
|
func (NoopResult) PublicJSON() ([]byte, error) {
|
|
return json.Marshal(struct {
|
|
OK bool `json:"ok"`
|
|
}{OK: true})
|
|
}
|
|
|
|
func runNoop(context.Context, NoopPayload, func(NoopResult) error) (NoopResult, error) {
|
|
return NoopResult{}, nil
|
|
}
|
|
|
|
// Builtins enqueues the framework's built-in job kinds.
|
|
type Builtins struct {
|
|
Noop *Kind[NoopPayload]
|
|
}
|
|
|
|
// RegisterBuiltins registers the framework's built-in job kinds on r.
|
|
func RegisterBuiltins(r *Runner) (*Builtins, error) {
|
|
noop, err := Register(r, KindNoop, runNoop)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &Builtins{Noop: noop}, nil
|
|
}
|