@@ -48,6 +48,9 @@ type commandOptions struct {
4848 expectedStateRevision uint64
4949 expectedProgramFingerprint string
5050 expectedSnapshotFingerprint string
51+ authorityFingerprint string
52+ requiredCapabilities stringList
53+ effectiveCapabilities stringList
5154 idempotencyKey string
5255 humanActor string
5356 repositoryPolicy bool
@@ -252,6 +255,9 @@ func parseOptions(command string, arguments []string, transition catalog.Transit
252255 flags .Uint64Var (& options .expectedStateRevision , "expected-state-revision" , 0 , "exact durable state revision observed during resolution" )
253256 flags .StringVar (& options .expectedProgramFingerprint , "expected-program-fingerprint" , "" , "exact executable control-program fingerprint observed during resolution" )
254257 flags .StringVar (& options .expectedSnapshotFingerprint , "expected-snapshot-fingerprint" , "" , "exact admission-relevant snapshot fingerprint observed during resolution" )
258+ flags .StringVar (& options .authorityFingerprint , "authority-fingerprint" , "" , "exact authority projection fingerprint from resolution" )
259+ flags .Var (& options .requiredCapabilities , "required-capability" , "required capability from resolution (repeatable)" )
260+ flags .Var (& options .effectiveCapabilities , "effective-capability" , "effective capability from resolution (repeatable)" )
255261 flags .StringVar (& options .idempotencyKey , "idempotency-key" , "" , "exact prior admission idempotency key for safe replay" )
256262 flags .StringVar (& options .humanActor , "human" , "" , "explicit command-scoped human authority actor" )
257263 flags .BoolVar (& options .repositoryPolicy , "repository-authority" , false , "derive repository-policy authority from the V2 project configuration" )
@@ -448,6 +454,14 @@ func buildRequest(operation surfaces.Operation, options commandOptions) (surface
448454 if err != nil {
449455 return surfaces.Request {}, err
450456 }
457+ requiredCapabilities , err := parseCapabilities ("--required-capability" , options .requiredCapabilities )
458+ if err != nil {
459+ return surfaces.Request {}, err
460+ }
461+ effectiveCapabilities , err := parseCapabilities ("--effective-capability" , options .effectiveCapabilities )
462+ if err != nil {
463+ return surfaces.Request {}, err
464+ }
451465 flowID := options .flowID
452466 if flowID == "" && goal .ID != "" {
453467 flowID = "flow-" + goal .ID
@@ -460,11 +474,24 @@ func buildRequest(operation surfaces.Operation, options commandOptions) (surface
460474 FlowID : flowID , Goal : goal , TransitionID : catalog .TransitionID (options .transitionID ), Authority : authority , Parameters : parameters ,
461475 Prescription : protocol.Prescription {SchemaVersion : protocol .PrescriptionSchemaVersion , ID : options .prescriptionID ,
462476 TransitionID : catalog .TransitionID (options .transitionID ), ExpectedStateRevision : options .expectedStateRevision ,
463- ExpectedProgramFingerprint : options .expectedProgramFingerprint , ExpectedSnapshotFingerprint : options .expectedSnapshotFingerprint },
477+ ExpectedProgramFingerprint : options .expectedProgramFingerprint , ExpectedSnapshotFingerprint : options .expectedSnapshotFingerprint ,
478+ AuthorityFingerprint : options .authorityFingerprint , RequiredCapabilities : requiredCapabilities , EffectiveCapabilities : effectiveCapabilities },
464479 RepositoryAuthority : options .repositoryPolicy , IdempotencyKey : options .idempotencyKey , Command : options .command ,
465480 }, nil
466481}
467482
483+ func parseCapabilities (field string , values []string ) ([]catalog.Capability , error ) {
484+ capabilities := make ([]catalog.Capability , len (values ))
485+ for index , value := range values {
486+ capabilities [index ] = catalog .Capability (value )
487+ }
488+ normalized , err := catalog .NormalizeCapabilities (field , capabilities )
489+ if err != nil {
490+ return nil , err
491+ }
492+ return normalized , nil
493+ }
494+
468495func parseParameters (values []string ) (protocol.Parameters , error ) {
469496 parameters := make (protocol.Parameters , 0 , len (values ))
470497 for _ , value := range values {
0 commit comments