{"record":{"id":"572502b860891d00","repo":"sipeed/picoclaw","slug":"feishu-channel-is-not-supported-on-32-bit-architec","errorCode":null,"errorMessage":"feishu channel is not supported on 32-bit architectures (armv7l, 386, etc.). Please use a 64-bit system or disable feishu in your config","messagePattern":"feishu channel is not supported on 32-bit architectures \\(armv7l, 386, etc\\.\\)\\. Please use a 64-bit system or disable feishu in your config","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/channels/feishu/feishu_32.go","lineNumber":23,"sourceCode":"import (\n\t\"context\"\n\t\"errors\"\n\n\t\"github.com/sipeed/picoclaw/pkg/bus\"\n\t\"github.com/sipeed/picoclaw/pkg/channels\"\n\t\"github.com/sipeed/picoclaw/pkg/config\"\n)\n\n// FeishuChannel is a stub implementation for 32-bit architectures\ntype FeishuChannel struct {\n\t*channels.BaseChannel\n}\n\nvar errUnsupported = errors.New(\"feishu channel is not supported on 32-bit architectures\")\n\n// NewFeishuChannel returns an error on 32-bit architectures where the Feishu SDK is not supported\nfunc NewFeishuChannel(bc *config.Channel, cfg *config.FeishuSettings, bus *bus.MessageBus) (*FeishuChannel, error) {\n\treturn nil, errors.New(\n\t\t\"feishu channel is not supported on 32-bit architectures (armv7l, 386, etc.). Please use a 64-bit system or disable feishu in your config\",\n\t)\n}\n\n// Start is a stub method to satisfy the Channel interface\nfunc (c *FeishuChannel) Start(ctx context.Context) error {\n\treturn errUnsupported\n}\n\n// Stop is a stub method to satisfy the Channel interface\nfunc (c *FeishuChannel) Stop(ctx context.Context) error {\n\treturn errUnsupported\n}\n\n// Send is a stub method to satisfy the Channel interface\nfunc (c *FeishuChannel) Send(ctx context.Context, msg bus.OutboundMessage) ([]string, error) {\n\treturn nil, errUnsupported\n}","sourceCodeStart":5,"sourceCodeEnd":41,"githubUrl":"https://github.com/sipeed/picoclaw/blob/49183d7e8daed0dba89ddbb6fcb60089401d9680/pkg/channels/feishu/feishu_32.go#L5-L41","documentation":"Returned by NewFeishuChannel in pkg/channels/feishu/feishu_32.go:23, a stub file selected by the build tag '//go:build !amd64 && !arm64 && !riscv64 && !mips64 && !ppc64' — i.e. every 32-bit GOARCH (386, arm, armv7l, 386, mips, etc.). The Feishu (Lark) SDK dependency only compiles on 64-bit architectures, so on 32-bit builds the constructor, Start, Stop, and Send are stubs that always return errors. Startup of a picoclaw binary with a feishu channel enabled on 32-bit therefore fails at channel construction.","triggerScenarios":"Building or running picoclaw with GOARCH=386 or GOARCH=arm (e.g. on a Raspberry Pi 32-bit OS or legacy x86) while config enables the feishu channel; cross-compiling a 32-bit binary from a 64-bit host with CGO_ENABLED=0 GOARCH=386 and deploying it with the same config.","commonSituations":"Deploying to ARMv7 boards (original Raspberry Pi OS 32-bit, some NAS firmware); Docker image pulled with the wrong platform (linux/386 or linux/arm instead of linux/arm64); a config file copied from a 64-bit machine that used feishu notifications.","solutions":["Use a 64-bit build/OS: rebuild with GOARCH=arm64 or GOARCH=amd64, or install a 64-bit OS/image (e.g. Raspberry Pi OS 64-bit)","If 32-bit must stay, remove or disable the feishu channel from the config so the stub constructor is never invoked","For Docker, ensure the image platform matches the host: docker run --platform linux/arm64 ...","Substitute feishu with a channel that supports 32-bit (e.g. another notification channel) if Feishu delivery is required"],"exampleFix":"// before (config.yaml fragment)\nchannels:\n  - name: feishu\n    type: feishu\n    enabled: true\n\n// after: disable on 32-bit hosts\nchannels:\n  - name: feishu\n    type: feishu\n    enabled: false","handlingStrategy":"fallback","validationCode":"import \"runtime\"\n\n// before constructing the channel\nif runtime.GOARCH == \"386\" || runtime.GOARCH == \"arm\" || runtime.GOARCH == \"mips\" || runtime.GOARCH == \"mipsle\" {\n    // skip feishu: the 32-bit stub build only returns errors\n    log.Printf(\"feishu channel disabled on %s; requires a 64-bit build\", runtime.GOARCH)\n} else {\n    ch, err := feishu.NewFeishuChannel(bc, cfg, bus)\n}","typeGuard":"func is64BitArch() bool {\n    switch runtime.GOARCH {\n    case \"amd64\", \"arm64\", \"riscv64\", \"mips64\", \"mips64le\", \"ppc64\", \"ppc64le\":\n        return true\n    }\n    return false\n}","tryCatchPattern":"ch, err := feishu.NewFeishuChannel(bc, cfg, bus)\nif err != nil {\n    if strings.Contains(err.Error(), \"not supported on 32-bit\") {\n        // degrade gracefully: continue without feishu rather than aborting startup\n        log.Printf(\"skipping feishu channel: %v\", err)\n        continue\n    }\n    return fmt.Errorf(\"feishu channel: %w\", err)\n}","preventionTips":["Check runtime.GOARCH (or compare against the 64-bit set) before enabling feishu in code","Pin Docker images to 64-bit platforms: --platform linux/arm64 or linux/amd64","When distributing a config, document that feishu requires a 64-bit host so 32-bit users pre-disable it","Fail fast at config-load time with a clear log line instead of at first message send"],"tags":["go","platform","architecture","build-tags","feishu","channel","config"],"backgroundTag":null,"analyzedSha":"49183d7e8daed0dba89ddbb6fcb60089401d9680","analyzedAt":"2026-08-15T21:55:41.315Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}