Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
30470a1
docs: design release security maintenance
intel352 Oct 3, 2026
c531d76
docs: bound security maintenance transitions
intel352 Oct 3, 2026
dd63dc0
docs: isolate source security remediation
intel352 Oct 3, 2026
59ac992
docs: plan source security remediation
intel352 Oct 3, 2026
cff351e
docs: resolve source plan verification gaps
intel352 Oct 3, 2026
dddc070
chore: lock source security remediation scope
intel352 Oct 3, 2026
dd2a2fc
docs: backport security verification boundaries
intel352 Oct 3, 2026
b98fcd4
test(wfctl): reuse immutable source record hosts
intel352 Oct 3, 2026
40d5d6e
fix(deps): patch Go and telemetry runtimes
intel352 Oct 3, 2026
6cb45f1
docs: record CI privilege verification boundary
intel352 Oct 3, 2026
6051d68
docs: retain cold CI and live sandbox evidence
intel352 Oct 3, 2026
550c0f7
fix(ui): consume verified bundled YAML backport
intel352 Oct 3, 2026
cf28e5a
fix(ui): preserve unrelated test resolutions
intel352 Oct 3, 2026
de0cb9a
docs: retain native scanner resource proof
intel352 Oct 3, 2026
6bd32e7
docs: amend source plan for Go 1.27.1 defaults
intel352 Oct 4, 2026
fe0a1cd
docs: require real generated runtime proof
intel352 Oct 4, 2026
bb4c92e
chore: relock approved Go source amendment
intel352 Oct 4, 2026
1db81c2
docs: lock generated runtime repairs
intel352 Oct 4, 2026
b913e55
docs: lock self-contained app config repair
intel352 Oct 4, 2026
4ba632c
docs: lock existing scaffold health wiring
intel352 Oct 4, 2026
33b4aae
build: upgrade Workflow defaults to Go 1.27.1
intel352 Oct 4, 2026
bca10b3
docs: lock remaining Go default repairs
intel352 Oct 4, 2026
ee6eb07
fix: align remaining Go27 source defaults
intel352 Oct 4, 2026
452cff8
test: correct rate recovery timing fixture
intel352 Oct 4, 2026
3e62f5f
docs: record final Go27 source proofs
intel352 Oct 4, 2026
cffd33e
docs: bound Go 1.27.2 source security amendment
intel352 Oct 10, 2026
63ca6be
Merge accepted Workflow main with preserved native fixture controls
intel352 Oct 10, 2026
81b9b1d
fix(security): raise source defaults to Go 1.27.2 and x/net 0.60
intel352 Oct 10, 2026
fca0bf4
docs: retain snapshot gates during source recovery
intel352 Oct 16, 2026
b436a74
Merge main into approved Workflow source security recovery
intel352 Oct 16, 2026
2955cd9
test: repair offline generated runtime and editor security resolution
intel352 Oct 16, 2026
e853990
Merge accepted main SQLite regression fix into source remediation
intel352 Oct 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Thank you for your interest in contributing to the workflow engine. This guide c

### Prerequisites

- Go 1.26.5+
- Go 1.27.2+
- Node.js 24+ (for UI development)
- Git
- `golangci-lint` (install: `go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest`)
Expand Down
2 changes: 1 addition & 1 deletion DOCUMENTATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ YAML from the pipeline context, such as an HTTP route's `request_body`.
| `config_from` | string | exactly one of `config_file`/`config_from` | Pipeline context path resolving to workflow config YAML. |
| `output` | string | no | Output binary path; defaults to `bin/app`. |
| `module_path` | string | no | Generated Go module path; defaults to `app`. |
| `go_version` | string | no | Generated `go.mod` Go version; defaults to `1.22`. |
| `go_version` | string | no | Generated `go.mod` Go version; defaults to `1.27.2`. |
| `embed_config` | boolean | no | Embed `app.yaml` in the generated binary; defaults to `true`. |
| `dry_run` | boolean | no | Return generated files without compiling. |
| `os` | string | no | Target OS (`GOOS`); defaults to the current OS. |
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile.admin
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
# -t workflow-server-admin:local .

# --- Stage 1: Build the Go server binary ---
FROM --platform=$BUILDPLATFORM golang:1.26-alpine AS go-builder
FROM --platform=$BUILDPLATFORM golang:1.27.2-alpine AS go-builder

ARG TARGETOS TARGETARCH

Expand Down
2 changes: 1 addition & 1 deletion Dockerfile.legacy
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

# --- Stage 1: Build the Go binary ---
# Use BUILDPLATFORM so go mod download runs natively; cross-compile via TARGETOS/TARGETARCH.
FROM --platform=$BUILDPLATFORM golang:1.26-alpine AS go-builder
FROM --platform=$BUILDPLATFORM golang:1.27.2-alpine AS go-builder

ARG TARGETOS TARGETARCH

Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Workflow Engine

[![Go](https://img.shields.io/badge/Go-1.26+-00ADD8?logo=go&logoColor=white)](https://go.dev)
[![Go](https://img.shields.io/badge/Go-1.27.2+-00ADD8?logo=go&logoColor=white)](https://go.dev)
[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![Built on Modular](https://img.shields.io/badge/Built%20on-GoCodeAlone%2Fmodular-green)](https://github.com/GoCodeAlone/modular)
[![Go Reference](https://pkg.go.dev/badge/github.com/GoCodeAlone/workflow.svg)](https://pkg.go.dev/github.com/GoCodeAlone/workflow)
Expand Down Expand Up @@ -133,7 +133,7 @@ scaffolds, see [Repository Layout](docs/REPO_LAYOUT.md).

### Requirements

- Go 1.26.5+
- Go 1.27.2+
- Node.js 24+ (for UI development)

### Run the Server
Expand Down Expand Up @@ -349,7 +349,7 @@ cd ui && npm run lint

| Component | Technology |
|-----------|-----------|
| Language | Go 1.26 |
| Language | Go 1.27 |
| Framework | [GoCodeAlone/modular](https://github.com/GoCodeAlone/modular) v1.12.3 |
| UI | React, ReactFlow, Zustand, Vite, TypeScript |
| Hot-Reload | [Yaegi](https://github.com/traefik/yaegi) Go interpreter |
Expand Down
4 changes: 2 additions & 2 deletions cigen/render_circleci.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ func circleJobName(prefix string, phase DeployPhase, p *CIPlan) string {

func writeCirclePlanJob(b *strings.Builder, jobName string, phase DeployPhase, p *CIPlan, version string) {
fmt.Fprintf(b, " %s:\n", jobName)
b.WriteString(" docker:\n - image: cimg/go:1.26\n")
b.WriteString(" docker:\n - image: cimg/go:1.27.2\n")
b.WriteString(" steps:\n")
b.WriteString(" - checkout\n")
writeCircleSetup(b, p, phase, version)
Expand All @@ -111,7 +111,7 @@ func writeCirclePlanJob(b *strings.Builder, jobName string, phase DeployPhase, p

func writeCircleApplyJob(b *strings.Builder, jobName string, phase DeployPhase, p *CIPlan, version string, isLast bool) {
fmt.Fprintf(b, " %s:\n", jobName)
b.WriteString(" docker:\n - image: cimg/go:1.26\n")
b.WriteString(" docker:\n - image: cimg/go:1.27.2\n")
b.WriteString(" steps:\n")
b.WriteString(" - checkout\n")
writeCircleSetup(b, p, phase, version)
Expand Down
35 changes: 35 additions & 0 deletions cigen/render_circleci_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,41 @@ func TestRenderCircleCI_NilPlan(t *testing.T) {
}
}

func TestRenderCircleCI_GoVersionImages(t *testing.T) {
files, err := cigen.RenderCircleCI(richCIPlan())
if err != nil {
t.Fatalf("RenderCircleCI: %v", err)
}
var parsed struct {
Jobs map[string]struct {
Docker []struct {
Image string `yaml:"image"`
} `yaml:"docker"`
} `yaml:"jobs"`
}
if err := yaml.Unmarshal([]byte(files[".circleci/config.yml"]), &parsed); err != nil {
t.Fatalf("parse CircleCI config: %v", err)
}
for _, name := range []string{"plan-prereq", "plan-deploy", "apply-prereq", "apply-deploy", "smoke"} {
t.Run(name, func(t *testing.T) {
job, ok := parsed.Jobs[name]
if !ok {
t.Fatalf("missing job %s", name)
}
if len(job.Docker) != 1 {
t.Fatalf("job %s has %d Docker images, want 1", name, len(job.Docker))
}
want := "cimg/go:1.27.2"
if name == "smoke" {
want = "cimg/base:current"
}
if got := job.Docker[0].Image; got != want {
t.Errorf("job %s image = %q, want %q", name, got, want)
}
})
}
}

func TestRenderCircleCI_SinglePhase(t *testing.T) {
p := richCIPlan()
p.Phases = []cigen.DeployPhase{{Name: "deploy", ConfigPath: "deploy.yaml"}}
Expand Down
2 changes: 1 addition & 1 deletion cmd/wfctl/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -974,7 +974,7 @@ func writeDockerfile(path string) error {
const content = `# Auto-generated by wfctl deploy docker
# Multi-stage build for a workflow engine application.

FROM golang:1.26.5-alpine AS builder
FROM golang:1.27.2-alpine AS builder
RUN apk add --no-cache git ca-certificates
WORKDIR /build
COPY go.mod go.sum ./
Expand Down
2 changes: 1 addition & 1 deletion cmd/wfctl/deploy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ func TestWriteDockerfile(t *testing.T) {
if err != nil {
t.Fatalf("read Dockerfile: %v", err)
}
for _, want := range []string{"FROM golang", "go build", "FROM alpine", "EXPOSE 8080"} {
for _, want := range []string{"FROM golang:1.27.2-alpine AS builder", "go build", "FROM alpine", "EXPOSE 8080"} {
if !strings.Contains(data, want) {
t.Errorf("Dockerfile missing %q", want)
}
Expand Down
16 changes: 10 additions & 6 deletions cmd/wfctl/fixture_build_artifacts_contract_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ func fixtureControlCommand(ctx context.Context, root, output string, extra ...st
cmd.Env = append(cmd.Env, item)
}
}
cmd.Env = append(cmd.Env, "GOWORK=off", "GOENV=off", "GOFLAGS=", "GOTOOLCHAIN=go1.27.1")
cmd.Env = append(cmd.Env, "GOWORK=off", "GOENV=off", "GOFLAGS=", "GOTOOLCHAIN=go1.27.2")
return cmd
}

Expand Down Expand Up @@ -410,7 +410,11 @@ func TestFixtureBuildArtifactsRealOverlayMutation(t *testing.T) {
root := fixtureControlSource(t)
external := t.TempDir()
asset, overlay := filepath.Join(external, "asset.txt"), filepath.Join(external, "overlay.json")
fixtureControlWrite(t, overlay, fmt.Sprintf(`{"Replace":{%q:%q}}`, filepath.Join(root, "asset.txt"), asset))
sourceAsset, err := filepath.EvalSymlinks(filepath.Join(root, "asset.txt"))
if err != nil {
t.Fatal(err)
}
fixtureControlWrite(t, overlay, fmt.Sprintf(`{"Replace":{%q:%q}}`, sourceAsset, asset))
for _, want := range []string{"first-overlay", "second-overlay"} {
fixtureControlWrite(t, asset, want)
output := filepath.Join(t.TempDir(), "executable")
Expand Down Expand Up @@ -744,7 +748,7 @@ func TestFixtureBuildArtifactsObservation(t *testing.T) {
if observation.goVersion != "" || observation.goRoot != "" || observation.goToolDir != "" || observation.toolchain != "" {
t.Fatalf("unobserved selection invented: %s", observation)
}
} else if observation.goVersion != "go1.27.1" || observation.toolchain != "go1.27.1" || observation.goRoot == "" || observation.goToolDir == "" || observation.goOS == "" || observation.goArch == "" {
} else if observation.goVersion != "go1.27.2" || observation.toolchain != "go1.27.2" || observation.goRoot == "" || observation.goToolDir == "" || observation.goOS == "" || observation.goArch == "" {
t.Fatalf("actual selected child compiler missing: %s", observation)
}
if observation.probeElapsed < 0 || observation.keyElapsed < observation.probeElapsed || observation.buildElapsed < 0 || observation.totalElapsed < observation.keyElapsed+observation.buildElapsed {
Expand Down Expand Up @@ -775,7 +779,7 @@ func TestFixtureBuildArtifactsObservation(t *testing.T) {
t.Fatal(err)
}
fixtureControlCounts(t, &c, 1, 2, 0)
if hit.buildRuns != 0 || hit.buildElapsed != 0 || hit.goVersion != "go1.27.1" || hit.failed {
if hit.buildRuns != 0 || hit.buildElapsed != 0 || hit.goVersion != "go1.27.2" || hit.failed {
t.Fatalf("cache reuse incorrectly reported an executed build: %s", hit)
}
})
Expand All @@ -799,13 +803,13 @@ func TestFixtureBuildArtifactsObservationReuse(t *testing.T) {
if err := build(t.Context(), false); err != nil {
t.Fatal(err)
}
if observation.buildRuns != 1 || observation.goVersion != "go1.27.1" {
if observation.buildRuns != 1 || observation.goVersion != "go1.27.2" {
t.Fatalf("initial observed build missing: %s", observation)
}
if err := build(t.Context(), false); err != nil {
t.Fatal(err)
}
if observation.buildRuns != 0 || observation.buildElapsed != 0 || observation.goVersion != "go1.27.1" {
if observation.buildRuns != 0 || observation.buildElapsed != 0 || observation.goVersion != "go1.27.2" {
t.Fatalf("reused observation retained executed build: %s", observation)
}
if err := build(t.Context(), true); err != nil {
Expand Down
6 changes: 3 additions & 3 deletions cmd/wfctl/generate.go
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ func writeCIWorkflow(path string, features *projectFeatures) error {
fmt.Fprintf(&b, " - uses: %s\n", githubActionsCheckoutRef)
fmt.Fprintf(&b, " - uses: %s\n", githubActionsSetupGoRef)
b.WriteString(" with:\n")
b.WriteString(" go-version: '1.26.5'\n")
b.WriteString(" go-version: '1.27.2'\n")
b.WriteString(" - name: Install wfctl\n")
b.WriteString(" run: go install github.com/GoCodeAlone/workflow/cmd/wfctl@latest\n")
b.WriteString(" - name: Validate config\n")
Expand Down Expand Up @@ -230,7 +230,7 @@ func writeCDWorkflow(path string, features *projectFeatures, registry, platforms
fmt.Fprintf(&b, " - uses: %s\n", githubActionsCheckoutRef)
fmt.Fprintf(&b, " - uses: %s\n", githubActionsSetupGoRef)
b.WriteString(" with:\n")
b.WriteString(" go-version: '1.26.5'\n")
b.WriteString(" go-version: '1.27.2'\n")

if features.hasUI {
fmt.Fprintf(&b, " - uses: %s\n", githubActionsSetupNodeRef)
Expand Down Expand Up @@ -280,7 +280,7 @@ jobs:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version: '1.26.5'
go-version: '1.27.2'
- name: Build plugin binaries
run: |
mkdir -p dist
Expand Down
Loading
Loading