Implement planned topic: 0032-workflow-streams#220
Merged
Conversation
Co-authored-by: Donald Pinckney <donald_pinckney@icloud.com>
Collaborator
|
@brianstrauch I killed the extended example. LMK if you think this is alright to merge for now. |
brianstrauch
approved these changes
May 15, 2026
3 tasks
This was referenced May 15, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Validation Report —
workflow-streams(Python)Scope of validation: the work introduced on branch
draft/0032-workflow-streamsvs.main:references/python/workflow-streams.md(553 lines, 128<!-- docs/... -->citation comments)references/python/python.md— one line added to the Primary References list pointing at the new fileTopic classification: Python SDK contrib library (
temporalio.contrib.workflow_streams), part of the official Temporal Python SDK. Not a third-party integration —references/integrations.mdis not edited and no file is added underreferences/python/integrations/. Check 5 is skipped.Source of truth:
../documentation/docs/develop/python/workflows/workflow-streams.mdx(567 lines). Every citation in the authored file resolves to this single doc.Go / no-go
Overall verdict: GO. No re-authoring required. No mandatory fixes.
Check 1 findings — citation audit
Total docs citations: 128 inline
<!-- docs/develop/python/workflows/workflow-streams.mdx:LINE -->comments (some lines carry multiple citations; the comment-grep counts 89 lines containing such comments). Every citation targets the single source doc.Resolved cleanly: 128/128 (100%).
Unresolved: none. The highest line cited is 566; the source doc is 567 lines.
Mismatched (cite lands on a line that doesn't substantively support the claim): none.
Spot-confirmed structural anchors (sampled across the doc):
WorkflowStreamconstruction +RuntimeErrorsemantics (source 61, 82) → authored 37, 39, 62WorkflowStreamClient.create+from_within_activity(source 128–171) → authored 105–152force_flush=Truevs.await client.flush()(source 173–196) → authored 156–177Check 2 findings — reverse-grep audit
Every token class extracted from the authored file is present in the source doc:
WorkflowStream(16),WorkflowStreamClient(19),WorkflowStreamState(6),RawValue(5),AcceptedUpdateCompletedWorkflow(1).topic(),.publish(),.subscribe(),.truncate(),.continue_as_new(),.detach_pollers(),.get_state(),.flush(),.from_within_activity(),.create(),all_handlers_finishedbatch_interval,max_batch_size,poll_cooldown,max_retry_duration,publisher_ttl,force_flush,prior_state,result_type,workflow_id,task_queue,retry_policy,run_timeout__temporal_workflow_stream_publish,__temporal_workflow_stream_poll,__temporal_workflow_stream_offsetRETRY(7),STATUS_CHANGE(3),TEXT_COMPLETE(1),AGENT_START(1),more_ready(1)COMPLETED,FAILED,CANCELED,TERMINATED,TIMED_OUTAsyncOpenAI,max_retries,gpt-4o-mini,activity.heartbeat,activity.info,is_continue_as_new_suggested,data_converter,payload_converter,from_payload,get_workflow_handle,execute_activity,Client.start_activity,wait_condition,activity.client,Client.connectUnexplained grep-misses: 0.
Check 3 findings — regression on known bugs
Scanned both files in scope (
references/python/workflow-streams.mdandreferences/python/python.md) for every universal regression pattern in the template:--profile(should be--env)TEMPORAL_TLS_CLIENT_CERT_PATH/TEMPORAL_TLS_CLIENT_KEY_PATH/TEMPORAL_TLS_SERVER_CA_CERT_PATHtcld service-account--output text/--output jsonlsaas-api.tmprl.cloud:7233Hits: 0.
No topic-specific regression list exists for this skill (none accumulated from prior authoring passes).
Check 4 findings — independent re-verification
A subagent sampled 10 citations spaced across the file (every 10th citation starting at #5) and re-read the docs independently before comparing to the authored text:
WorkflowStreamraisesRuntimeErrorfrom_within_activity()infers client + parent Workflow IdWorkflowStreamState | Nonefieldpoll_cooldown100 ms; skipped only onmore_ready__temporal_workflow_stream_publishhandlerMatches: 10/10 (100%).
Divergences: none. No drift on:
batch_interval2 s,poll_cooldown100 ms,max_retry_duration10 min,publisher_ttl15 min — all correct)more_ready")Check 6 findings — tone and scope audit
Pattern 1 — workaround disclosure (mandatory; zero tolerated): none.
The two negative-form bullets in the file follow the acceptable "name the wrong path, give the supported alternative" shape:
workflow.sleep(0)— it records a timer event") — pairs with the supported fixasyncio.sleep(0). Acceptable.force_flush=True. Acceptable.The "explicit CAN recipe" at lines 343–354 (
detach_pollers()+wait_condition(all_handlers_finished)+workflow.continue_as_new(...)) is not a workaround disclosure — both thecontinue_as_new(build_args)helper and the explicit form are first-class supported APIs documented at source mdx:351–358. The authored file frames it correctly as the supported way to pass extra CAN parameters (task_queue,retry_policy,run_timeout).Likewise the "standalone Activity" fallback at line 150 (
from_within_activity()raises → useWorkflowStreamClient.create(activity.client(), workflow_id=...)) is supported guidance, not a workaround.Pattern 2 — in-the-weeds rationale: one minor observation.
The "Why these choices:" tail at lines 540–545 restates design rationale for the end-to-end LLM example. Each bullet justifies a positive pattern already shown in the code above; the rationale doesn't change what an agent writes (the agent would copy the pattern either way). Not a blocker — borderline finding worth noting if a follow-up cleanup pass is made.
Pattern 3 — multi-sentence bullets: the file's longer bullets each carry distinct semantic load (effect, return semantics, lifecycle scope, usage guidance), not redundant restating. Keep.
Pattern 4 — Public Preview admonition: present and correctly formed. Lines 3–4:
This matches the standard admonition phrasing used elsewhere in the skill and the source's Public Preview marker at mdx:31–33.
Statistics
references/python/workflow-streams.md), 1 touched with a single line (references/python/python.md).<!-- docs/... -->tags (spread across 89 lines).Verdict
GO. The skill is accurate, grounded, and free of the fabrication patterns this validation looks for. The Public Preview admonition is in place. The one borderline Pattern-2 observation (the "Why these choices" tail in the end-to-end example) is optional cleanup, not a blocker.