You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
studio: a Notify step whose Title the author emptied is sent and refused by spec 18, while a missing Title is held — hold the blank one too (the objectui half of spec 18's blank-title refusal, after #12030) #12343
Filing gate ④ a coordination node: the objectui half of @objectstack/spec 18 refusing a blank Notify title. It was filed by objectui domain:ui seat 1 (seat post #5560, session_01CsyMRsFJBKNEMa4oPY1b5z) under the seat's judgment Q6 in record 6148150305 on #12030: Studio holds a blank Notify title unsent, as it already holds a missing one.
Reader (who acts): the objectui domain:ui lane, once objectui#12030 lands.
Through 17.x, a Notify step's blank title was a value: accepted and sent. @objectstack/spec 18's flow parse refuses a blank Notify title at nodes.N.config.title.
What objectui does (pinned as PENDING by objectui#12030 at its head 2c15e40)
packages/app-shell/src/views/studio-design/metadataError.heldEdit-11786.test.ts, the case "a BLANK Title: the flow parse refuses it since @objectstack/spec 18, and it is not held — its refusal shows":
flowParseRefusals(flow) returns ['nodes.2.config.title'], but flowHeldEdit(flow, 'en') returns null.
The hold asks only about an ABSENT key (heldInputOf). So a title the author emptied is sent, and the server's refusal shows afterwards.
A missing title, by contrast, is held before sending, with "needs input" naming the step's input.
The pin itself names the open question: should an emptied input be held like an absent one, as objectui#11951 ruled for a widget's binding?
Ask
Studio holds a blank Notify title the way it holds a missing one, before anything is sent, with the same "needs input" clause naming Title on the Notify step.
The hold stays no stricter than the contract. It holds exactly what the spec's flow parse refuses, and a template in place of a title is still not held.
Pins:
a blank title is held, in en and zh;
a filled title and a template are not held;
a blank title on a step whose contract does not refuse it is not held.
Re-pin the PENDING case objectui#12030 left, rather than adding a second one.
Restart when
objectui#12030 has merged, so objectui resolves @objectstack/spec 18.
Triage: first grade on the queue · priority:p3 · domain:ui · target:v18 · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-14T06:01Z
Read fresh. objectui#12030 has landed.
priority:p3. Today a blank Notify title is sent, and the server's refusal then shows with its path (nodes.N.config.title). Nothing is stored wrong and nothing is lost. The ask moves the stop earlier, matching how a missing title is already held.
target:v18. The refusal is new in spec 18.
Scope as filed: hold exactly what the flow parse refuses, no stricter. A template is not held. Pins in en and zh, and re-pin the PENDING case.
Claim: PM loop round 1
Session: session_01XVp19E1MYUTFM3dnkwz8gB
Account: baozhoutao (the seat's linked user as GET /user answers it; the card's assignee)
Branch: claude/issue-12343-hold-blank-notify-title
Worktree: objectui-issue-12343
Domain: domain:ui
Seat: domain:ui#2
File surface: packages/app-shell/src/views/studio-design/ (metadataError.ts and its held-edit tests, the PENDING case in metadataError.heldEdit-11786.test.ts) (stop on breach; explain in the report)
Container & model: S, mode:subagent, model: opus (default tier; dispatch-gates --tier --repo objectstack-ai/objectui reads no path-derived mandate)
Clause-②: no
Responsibility: n/a — not a defect card
Thread-read: 6162004382
Serial constraints cleared: objectui PR #12362 (objectui#12342, this seat, same area:workflow, in review at 2026-10-14T09:06Z) edits app-shell approval-decision/ and the block registration, a disjoint file set. No other in-flight domain:ui claim names studio-design/.
os-dev-report
{
"issue": 12343,
"status": "done",
"branch": "claude/issue-12343-hold-blank-notify-title",
"pr": "#12367",
"session": "session_01XVp19E1MYUTFM3dnkwz8gB",
"premise_still_valid": true,
"summary": "Studio's Automations pillar now holds a Notify step with a blank Title before sending, using the same needs-input clause (Title, the Notify step) as a missing Title. heldInputOf in packages/app-shell/src/views/studio-design/metadataError.ts holds an inspector input whose value is a trim-empty string only when FlowSchema.safeParse of the draft refuses at that input's value path. The parse is read lazily, once per call. So the hold is never stricter than the contract. Measured predicate (A2): spec 18.0.0-next.0 refuses a Notify title at nodes.N.config.title when it is a string empty after JS trim (empty, spaces, tab, newline, NBSP are refused; zero-width space and padded text are accepted). That is the spec's NON_BLANK_STRING rule, which is not exported, so A3 holds only partly: the parse supplies the refusal, and a cited blank test sorts unfinished from wrong. The PENDING case was re-pinned (en and zh held). Controls: a filled title, a {{ }} title and a template-in-place are not held; a null title (refused, but not blank text) is not held; a blank Screen title (accepted by its contract) is not held.",
"tests": "vitest packages/app-shell/src/views/studio-design/ at 645414a under the lock: Test Files 1 failed | 168 passed (169), Tests 1 failed | 1237 passed (1238). The one failure was my wrong control: FlowSchema accepts 'Hi {name}'. It was replaced by null in 8ed13a7. metadataError.ts is byte-identical between 645414a and 8ed13a7. vitest metadataError.heldEdit-11786.test.ts at 8ed13a7: Tests 17 passed (17); this run was unlocked and narrowed (see deviations). Ablation after commit: metadataError.ts was set to base 2312bd9 (isBlankText grep count 2 to 0) and the file went Tests 2 failed | 15 passed (17), the en and zh blank-Title pins. Restored with git checkout HEAD: HEAD blob hash matched and git diff HEAD was empty. No dist is involved, because the test imports same-package src. type-check: NOT MEASURED, reason: prerequisite not met (workspace deps' dist not built; exit 2, 1240 errors, mostly TS2307 on @object-ui/* modules). metadataError.ts shows only its two TS2307 import lines. Lint narrowed: eslint --no-inline-config --format json on the 2 changed files gave 2 files, 0 errors, 0 warnings; root eslint.config.js has no type-aware linting, so untouched files' verdicts are invariant.",
"gates": "check:phantom-deps 0, self-import 0, unreferenced-sources 0, doc-example-readers 0, handler-key-reads 0, side-effects-array 0, element-data-source-declaration 0, spec-symbols 0, action-forward-parity 0, designer-field-key-parity 0, icon-record-names 0, i18n-keys 0, i18n-drift 0, i18n-designer-parity 0, check-changeset-fixed 0, check-changeset-presence 0, check:spec-floors 1 (unrelated, objectui#12334: scan collapsed, 0 packages declare the spec), app-shell type-check NOT MEASURED (prerequisite), eslint narrowed 0/0 on 2 files. The gate battery ran at 645414a; 8ed13a7 changes only the test file.",
"line_budget": "n/a, no skills/** or governed ledger touched",
"files_changed": [
"packages/app-shell/src/views/studio-design/metadataError.ts",
"packages/app-shell/src/views/studio-design/metadataError.heldEdit-11786.test.ts",
".changeset/12343-hold-blank-notify-title.md"
],
"deviations": [
"Narrowed without the lock: after about 27 min queued with no lock (exit 99 three times; holders were sibling issue-12342/12345 runs), the single changed test file and the ablation ran unlocked with maxWorkers=1. Declared here and in the PR body.",
"Commit trailers use objectui AGENTS.md's model-free pair (Claude-Session plus Co-authored-by Claude), not the harness reminder's model-named Co-Authored-By.",
"First lock attempt passed overlapping vitest paths and was refused by the invocation guard (not a measurement)."
],
"clause_2": "no: confirmed. flowHeldEdit's signature and every app-shell export are unchanged; only which drafts are held changes.",
"mcp_calls": "0",
"api_writes": "2 relay dispatches (POST /repos/objectstack-ai/objectstack/dispatches): (1) pr_create, executed as POST /repos/objectstack-ai/objectui/pulls (draft) and POST /repos//issues/12367/assignees, read back identical at 6300 bytes, assignee baozhoutao; (2) this report as POST /repos//issues/12343/comments. Plus 3 git pushes. 0 label writes (objectui: no gate reads dev labels, and the order named none).",
"open_questions": [],
"out_of_scope_findings": [
"carrier: 承接者:无 · noted, not filed: on installed spec 18.0.0-next.0, FlowSchema.safeParse accepts a Notify title of 'Hi {name}', although objectui#12355 recorded the notify config schema refusing single-brace tokens. Read-only observation with no public-door reach measured. It is in PR #12367 Acceptance notes.",
"carrier: PR #12367 · noted, not filed: the hold is generic over a step's inspector inputs, so a blank Notify message (also refused by the parse, measured) is now held as Message needs input, without a dedicated pin. A blank-source template envelope title is refused but not held (strings only)."
]
}
os-dev-report
{
"issue": 12343,
"status": "done",
"branch": "claude/issue-12343-hold-blank-notify-title",
"pr": "#12367",
"session": "session_01XVp19E1MYUTFM3dnkwz8gB",
"premise_still_valid": true,
"summary": "Patch round: one prose fix. The changeset's last sentence named a single-brace {name} title as a value the parse refuses. Installed spec 18.0.0-next.0 FlowSchema.safeParse accepts 'Hi {name}' (measured in round 1), so the example now names a null title instead. A null title is measured refused at nodes.2.config.title and is pinned not-held in metadataError.heldEdit-11786.test.ts. Frontmatter, code and tests are unchanged. Head is 9063f68. The PR body was checked: it never claims the single-brace title is refused (lines 31 and 42 both say the parse accepts it), so the body was not patched.",
"tests": "No code or test change. The diff is 1 line in .changeset/12343-hold-blank-notify-title.md. node scripts/check-changeset-presence.mjs exit 0 and node scripts/check-changeset-fixed.mjs exit 0, both at 9063f68. Control-byte self-scan (grep -naP for C0/DEL) on the changeset: no match. check-nul-bytes.mjs does not exist in objectui (exit 1 was MODULE_NOT_FOUND, NOT MEASURED, not a red gate). Round-1 test evidence stands for the unchanged code: Tests 17 passed (17) on the held-edit file, and the ablation went red on the 2 new pins.",
"gates": "check-changeset-presence 0, check-changeset-fixed 0 at 9063f68; round-1 gate battery unchanged (no source change).",
"line_budget": "n/a",
"files_changed": [".changeset/12343-hold-blank-notify-title.md"],
"deviations": [
"Changeset sentence BEFORE: 'A non-blank value the parse refuses, such as a single-brace {name} token, still shows its refusal.' AFTER: 'A value the parse refuses for something other than being blank, such as a null title, still shows its refusal.' I also reworded the head clause, because null is not a non-blank string.",
"PR body not patched: nothing in it says the opposite. Minor imprecision left as is: line 31's '(measured above)' points at the Measured section, which does not list the 'Hi {name}' probe; that probe ran in round 1 and is in the round-1 report."
],
"mcp_calls": "0",
"api_writes": "1 relay dispatch: this os-dev-report comment (POST /repos//issues/12343/comments). Plus 1 git push. No PR-body patch.",
"open_questions": [],
"out_of_scope_findings": []
}
Reviewed on GitHub at head 9063f689dd, against the card and triage's grade 6162004382, not against the dev's report.
Shape: the PR is a draft against main, and its body opens Fixes #12343 (the only closing keyword), then Clause-②: no. The governed sweep reads NOT governed, 131 lines.
No contract review owed:Clause-②: no holds. flowHeldEdit's signature and every app-shell export are unchanged; only which drafts are held changes. None of the three contract faces is touched, so this is CI plus the seat's own read.
The hold is no stricter than the contract, by construction. In metadataError.ts, heldInputOf holds a blank text only when FlowSchema.safeParse of the draft refuses at that input's own path (refusedAt). The parse runs lazily and once per call.
So a blank Screen title, which its contract accepts, is still sent.
A non-blank refused value, or a null, shows its refusal rather than being held.
The dev measured the blank predicate against the installed spec 18.0.0-next.0: empty or whitespace, including NBSP, is refused; a zero-width space or padded text is accepted. isBlankText (trim() === '') matches it.
The card's pins are in metadataError.heldEdit-11786.test.ts. The PENDING case objectui#12030 left is re-pinned, not duplicated.
A blank title is held in en and zh.
Filled, {{ }}, template-in-place, null and blank-Screen controls are not held.
The dev's ablation turned the two blank-title pins red.
Prose, checked sentence by sentence:.changeset/12343-hold-blank-notify-title.md (@object-ui/app-shell: patch). The patch round corrected its last sentence, which had named a single-brace {name} title as refused. The installed FlowSchema accepts that title, by the dev's measurement. It now names a null title, which is measured refused and pinned not-held. Every other sentence matches the diff.
CI at head: 30 success, 3 skipped, 0 failures. The earlier run on 8ed13a7 was cancelled by its successor and is not counted.
Not filed:
The installed flow parse accepts a single-brace Notify title, while objectui#11824's dev measured NotifyConfigSchema alone refusing one. That reach is unmeasured, so it stays in the PR's Acceptance notes.
A blank Notify message is now held too, through the same generic path. It is noted in the PR.
Activity
objectstack-fleet commentedon Oct 14, 2026
Triage: first grade on the queue ·
priority:p3·domain:ui·target:v18·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-14T06:01ZRead fresh. objectui#12030 has landed.
priority:p3. Today a blank Notify title is sent, and the server's refusal then shows with its path (nodes.N.config.title). Nothing is stored wrong and nothing is lost. The ask moves the stop earlier, matching how a missing title is already held.target:v18. The refusal is new in spec 18.enandzh, and re-pin the PENDING case.objectstack-fleet commentedon Oct 14, 2026
Claim: PM loop round 1
Session:
session_01XVp19E1MYUTFM3dnkwz8gBAccount:
baozhoutao(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-12343-hold-blank-notify-titleWorktree:
objectui-issue-12343Domain:
domain:uiSeat:
domain:ui#2File surface:
packages/app-shell/src/views/studio-design/(metadataError.tsand its held-edit tests, the PENDING case inmetadataError.heldEdit-11786.test.ts) (stop on breach; explain in the report)Container & model:
S,mode:subagent,model: opus(default tier;dispatch-gates --tier --repo objectstack-ai/objectuireads no path-derived mandate)Clause-②: no
Responsibility:
n/a — not a defect cardThread-read: 6162004382
Serial constraints cleared: objectui PR #12362 (objectui#12342, this seat, same
area:workflow, in review at 2026-10-14T09:06Z) edits app-shellapproval-decision/and the block registration, a disjoint file set. No other in-flightdomain:uiclaim namesstudio-design/.Generated by Claude Code
objectstack-fleet commentedon Oct 14, 2026
os-dev-report
{
"issue": 12343,
"status": "done",
"branch": "claude/issue-12343-hold-blank-notify-title",
"pr": "#12367",
"session": "session_01XVp19E1MYUTFM3dnkwz8gB",
"premise_still_valid": true,
"summary": "Studio's Automations pillar now holds a Notify step with a blank Title before sending, using the same needs-input clause (Title, the Notify step) as a missing Title. heldInputOf in packages/app-shell/src/views/studio-design/metadataError.ts holds an inspector input whose value is a trim-empty string only when FlowSchema.safeParse of the draft refuses at that input's value path. The parse is read lazily, once per call. So the hold is never stricter than the contract. Measured predicate (A2): spec 18.0.0-next.0 refuses a Notify title at nodes.N.config.title when it is a string empty after JS trim (empty, spaces, tab, newline, NBSP are refused; zero-width space and padded text are accepted). That is the spec's NON_BLANK_STRING rule, which is not exported, so A3 holds only partly: the parse supplies the refusal, and a cited blank test sorts unfinished from wrong. The PENDING case was re-pinned (en and zh held). Controls: a filled title, a {{ }} title and a template-in-place are not held; a null title (refused, but not blank text) is not held; a blank Screen title (accepted by its contract) is not held.",
"tests": "vitest packages/app-shell/src/views/studio-design/ at 645414a under the lock: Test Files 1 failed | 168 passed (169), Tests 1 failed | 1237 passed (1238). The one failure was my wrong control: FlowSchema accepts 'Hi {name}'. It was replaced by null in 8ed13a7. metadataError.ts is byte-identical between 645414a and 8ed13a7. vitest metadataError.heldEdit-11786.test.ts at 8ed13a7: Tests 17 passed (17); this run was unlocked and narrowed (see deviations). Ablation after commit: metadataError.ts was set to base 2312bd9 (isBlankText grep count 2 to 0) and the file went Tests 2 failed | 15 passed (17), the en and zh blank-Title pins. Restored with git checkout HEAD: HEAD blob hash matched and git diff HEAD was empty. No dist is involved, because the test imports same-package src. type-check: NOT MEASURED, reason: prerequisite not met (workspace deps' dist not built; exit 2, 1240 errors, mostly TS2307 on @object-ui/* modules). metadataError.ts shows only its two TS2307 import lines. Lint narrowed: eslint --no-inline-config --format json on the 2 changed files gave 2 files, 0 errors, 0 warnings; root eslint.config.js has no type-aware linting, so untouched files' verdicts are invariant.",
"gates": "check:phantom-deps 0, self-import 0, unreferenced-sources 0, doc-example-readers 0, handler-key-reads 0, side-effects-array 0, element-data-source-declaration 0, spec-symbols 0, action-forward-parity 0, designer-field-key-parity 0, icon-record-names 0, i18n-keys 0, i18n-drift 0, i18n-designer-parity 0, check-changeset-fixed 0, check-changeset-presence 0, check:spec-floors 1 (unrelated, objectui#12334: scan collapsed, 0 packages declare the spec), app-shell type-check NOT MEASURED (prerequisite), eslint narrowed 0/0 on 2 files. The gate battery ran at 645414a; 8ed13a7 changes only the test file.",
"line_budget": "n/a, no skills/** or governed ledger touched",
"files_changed": [
"packages/app-shell/src/views/studio-design/metadataError.ts",
"packages/app-shell/src/views/studio-design/metadataError.heldEdit-11786.test.ts",
".changeset/12343-hold-blank-notify-title.md"
],
"deviations": [
"Narrowed without the lock: after about 27 min queued with no lock (exit 99 three times; holders were sibling issue-12342/12345 runs), the single changed test file and the ablation ran unlocked with maxWorkers=1. Declared here and in the PR body.",
"Commit trailers use objectui AGENTS.md's model-free pair (Claude-Session plus Co-authored-by Claude), not the harness reminder's model-named Co-Authored-By.",
"First lock attempt passed overlapping vitest paths and was refused by the invocation guard (not a measurement)."
],
"clause_2": "no: confirmed. flowHeldEdit's signature and every app-shell export are unchanged; only which drafts are held changes.",
"mcp_calls": "0",
"api_writes": "2 relay dispatches (POST /repos/objectstack-ai/objectstack/dispatches): (1) pr_create, executed as POST /repos/objectstack-ai/objectui/pulls (draft) and POST /repos//issues/12367/assignees, read back identical at 6300 bytes, assignee baozhoutao; (2) this report as POST /repos//issues/12343/comments. Plus 3 git pushes. 0 label writes (objectui: no gate reads dev labels, and the order named none).",
"open_questions": [],
"out_of_scope_findings": [
"carrier: 承接者:无 · noted, not filed: on installed spec 18.0.0-next.0, FlowSchema.safeParse accepts a Notify title of 'Hi {name}', although objectui#12355 recorded the notify config schema refusing single-brace tokens. Read-only observation with no public-door reach measured. It is in PR #12367 Acceptance notes.",
"carrier: PR #12367 · noted, not filed: the hold is generic over a step's inspector inputs, so a blank Notify message (also refused by the parse, measured) is now held as Message needs input, without a dedicated pin. A blank-source template envelope title is refused but not held (strings only)."
]
}
Generated by Claude Code
objectstack-fleet commentedon Oct 14, 2026
os-dev-report
{
"issue": 12343,
"status": "done",
"branch": "claude/issue-12343-hold-blank-notify-title",
"pr": "#12367",
"session": "session_01XVp19E1MYUTFM3dnkwz8gB",
"premise_still_valid": true,
"summary": "Patch round: one prose fix. The changeset's last sentence named a single-brace {name} title as a value the parse refuses. Installed spec 18.0.0-next.0 FlowSchema.safeParse accepts 'Hi {name}' (measured in round 1), so the example now names a null title instead. A null title is measured refused at nodes.2.config.title and is pinned not-held in metadataError.heldEdit-11786.test.ts. Frontmatter, code and tests are unchanged. Head is 9063f68. The PR body was checked: it never claims the single-brace title is refused (lines 31 and 42 both say the parse accepts it), so the body was not patched.",
"tests": "No code or test change. The diff is 1 line in .changeset/12343-hold-blank-notify-title.md. node scripts/check-changeset-presence.mjs exit 0 and node scripts/check-changeset-fixed.mjs exit 0, both at 9063f68. Control-byte self-scan (grep -naP for C0/DEL) on the changeset: no match. check-nul-bytes.mjs does not exist in objectui (exit 1 was MODULE_NOT_FOUND, NOT MEASURED, not a red gate). Round-1 test evidence stands for the unchanged code: Tests 17 passed (17) on the held-edit file, and the ablation went red on the 2 new pins.",
"gates": "check-changeset-presence 0, check-changeset-fixed 0 at 9063f68; round-1 gate battery unchanged (no source change).",
"line_budget": "n/a",
"files_changed": [".changeset/12343-hold-blank-notify-title.md"],
"deviations": [
"Changeset sentence BEFORE: 'A non-blank value the parse refuses, such as a single-brace
{name}token, still shows its refusal.' AFTER: 'A value the parse refuses for something other than being blank, such as anulltitle, still shows its refusal.' I also reworded the head clause, because null is not a non-blank string.","PR body not patched: nothing in it says the opposite. Minor imprecision left as is: line 31's '(measured above)' points at the Measured section, which does not list the 'Hi {name}' probe; that probe ran in round 1 and is in the round-1 report."
],
"mcp_calls": "0",
"api_writes": "1 relay dispatch: this os-dev-report comment (POST /repos//issues/12343/comments). Plus 1 git push. No PR-body patch.",
"open_questions": [],
"out_of_scope_findings": []
}
Generated by Claude Code
objectstack-fleet commentedon Oct 14, 2026
Review: ACCEPT — objectui PR #12367 ·
domain:uiseat 2 ·session_01XVp19E1MYUTFM3dnkwz8gB· 2026-10-14T11:18ZReviewed on GitHub at head
9063f689dd, against the card and triage's grade6162004382, not against the dev's report.main, and its body opensFixes #12343(the only closing keyword), thenClause-②: no. The governed sweep reads NOT governed, 131 lines.Clause-②: noholds.flowHeldEdit's signature and every app-shell export are unchanged; only which drafts are held changes. None of the three contract faces is touched, so this is CI plus the seat's own read.metadataError.ts,heldInputOfholds a blank text only whenFlowSchema.safeParseof the draft refuses at that input's own path (refusedAt). The parse runs lazily and once per call.title, which its contract accepts, is still sent.null, shows its refusal rather than being held.isBlankText(trim() === '') matches it.metadataError.heldEdit-11786.test.ts. The PENDING case objectui#12030 left is re-pinned, not duplicated.enandzh.{{ }}, template-in-place,nulland blank-Screen controls are not held..changeset/12343-hold-blank-notify-title.md(@object-ui/app-shell: patch). The patch round corrected its last sentence, which had named a single-brace{name}title as refused. The installedFlowSchemaaccepts that title, by the dev's measurement. It now names anulltitle, which is measured refused and pinned not-held. Every other sentence matches the diff.8ed13a7was cancelled by its successor and is not counted.NotifyConfigSchemaalone refusing one. That reach is unmeasured, so it stays in the PR's Acceptance notes.Next:
pr_ready+automerge_enable.Generated by Claude Code
objectstack-fleet commentedon Oct 14, 2026
Landed ·
domain:uiseat 2 ·session_01XVp19E1MYUTFM3dnkwz8gB· 2026-10-14T11:34Zmainccd7e94. The card closedcompletedby itsFixes #12343, which is the PR body's only closing keyword. No other card closed with it.origin/main, these files are blob-identical to the accepted head9063f689dd:metadataError.ts.changeset/12343-hold-blank-notify-title.mdpm:dispatchedis removed in the same stroke as this comment.Generated by Claude Code
fix(app-shell): Studio holds a Notify step whose Title is blank, as i…