No deprecation lifecycle exists anywhere — stock FieldOptions.deprecated unused, and structured data already in the schema doesn't reach the surfaces that need it
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 9
- Forks
- 0
- Avg merge
- 3h 3m
- Merged PRs (30d)
- 509
Description
Researched how a deprecation would actually surface today across CLI/LSP/MCP/docs. Short answer: it wouldn't, and several small, already-half-built mechanisms would close most of the gap without needing an option ceremony.
- Zero use of protobuf's own
[deprecated = true]FieldOptions anywhere in the schema (grep confirms). This is a stockdescriptorpbfield, not a custom extension —fd.Options().GetDeprecated()is free to read via protoreflect, and could feed a "(deprecated)" badge indocs/reference/*.md, aflow validatediagnostic, and a deprecated marker on the corresponding MCP tool-schema property, all from the exact same read. pflag.Flag.Deprecatedis likewise a first-class field cobra already supports —cmd/flow/suggest.goalready readsf.Deprecatedwhen ranking did-you-mean suggestions, butgrep MarkDeprecatedacross the repo (excluding tests) returns zero calls. The check is live and has nothing to check.InputDeclaration.example(flowstate.proto#L685) is real, structured, author-validated data — a typedValueliteral checked byCheckInputExampleand already rendered by LSP hover. It never reachesTaskField(flowstate.proto#L3127-L3158, noexamplefield) orCatalog()'sTaskFieldconstruction, sodocs/reference/tasks.mdand the MCP tool description both miss a worked example that's one hop away and already validated.flow fix'sretiredTasksmap (fixretire.go#L38-L42) holds real migration knowledge (which names were retired, how to rewrite them) that's invisible outside this one file —flow validate's "unknown task" diagnostic for a retired name could name the retirement and point atflow fixinstead of reading as a plain typo.
Note: docs/DSL.md's "No deprecation window" is a considered, stated position for the DSL itself (task/keyword spellings retire via rewriter, not a deprecated-but-working window) — this issue isn't proposing to reopen that. It's scoped to the surfaces that already do keep old things alive for compatibility (proto fields across editions, RPCs, CLI flags), where nothing today signals "still works, going away" at all.
Fix, in mechanical-first order:
- Start calling
.MarkDeprecated()and setting[deprecated = true]where something is actually being phased out — zero new mechanism, the readers already exist or are trivial. - Wire
InputDeclaration.examplethrough toTaskFieldand render it indocs/reference/tasks.mdand MCP tool descriptions. - Export
retiredTasks' key set soflow validate's diagnostic can name a retirement specifically. - Only if reason/replacement/version text is wanted beyond the on/off bit: a small
FieldOptions/MethodOptionsextension (FlowstateDeprecation{reason, replacement, since}), which the schema's ownCELFunction.exampleprecedent already establishes as the right shape when reflection genuinely can't carry the fact.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with cmd/flow/suggest.go, the schema locations in proto/flowstate/v1/flowstate.proto, and pkg/flowstate/v1/flowfile/fixretire.go. Trace how deprecation flags, InputDeclaration.example, and retiredTasks currently flow into validation, docs, LSP, and MCP surfaces. Done means the selected metadata is surfaced consistently and the retired-task diagnostic identifies the migration path.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go
- Domain
- api, cli, documentation, tooling
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100