@@ -157,8 +157,10 @@ fn CommitContent(
157157 // Advisory only: the buttons stay enabled and the commit-time gate remains
158158 // the authority. The package name is read-only here, so `handle_pattern`
159159 // is validated once the rules load (it can't change) rather than per keystroke.
160+ // Two clones of the same value on purpose: the namespace doubles as the
161+ // full package handle (e.g. "team/dataset") that `handle_pattern` matches.
160162 let validation_ns = data. namespace . clone ( ) ;
161- let validation_name = data. namespace . clone ( ) ;
163+ let validation_handle = data. namespace . clone ( ) ;
162164 // Reactive mirror of the metadata editor's current text: the JSON editor
163165 // writes edits into the hidden `#metadata` textarea and dispatches an
164166 // `input` event (see json-editor-glue.js), so this tracks edits from either
@@ -236,7 +238,7 @@ fn CommitContent(
236238 let validation = LocalResource :: new ( move || {
237239 let ( message, metadata, workflow_id) = debounced_key. get ( ) ;
238240 let ns = validation_ns. clone ( ) ;
239- let name = validation_name . clone ( ) ;
241+ let handle = validation_handle . clone ( ) ;
240242 let seeded_previous_meta = seeded_previous_meta. clone ( ) ;
241243 async move {
242244 let key = ( message. clone ( ) , metadata. clone ( ) , workflow_id. clone ( ) ) ;
@@ -253,7 +255,7 @@ fn CommitContent(
253255 // (Both empty collapse to `{}` on both paths — consistent.)
254256 let effective_meta = effective_metadata ( & metadata, & seeded_previous_meta) ;
255257 let violations =
256- commands:: validate_commit_candidate ( ns, id, message, effective_meta, name )
258+ commands:: validate_commit_candidate ( ns, id, message, effective_meta, handle )
257259 . await
258260 . unwrap_or_default ( ) ;
259261 ( key, violations)
0 commit comments