Potential issue with Canton Sychronizatoin

We have a simple Canton Setup shown as below
simple.conf

canton {
  participants {
    bankAParticipant {
      storage.type = memory
      admin-api.port = 5012
      ledger-api.port = 5011
      ledger-api.address = 0.0.0.0
    }
    bankBParticipant {
      storage.type = memory
      admin-api.port = 5022
      ledger-api.port = 5021
      ledger-api.address = 0.0.0.0
    }
    schedulerParticipant {
      storage.type = memory
      admin-api.port = 5032
      ledger-api.port = 5031
      ledger-api.address = 0.0.0.0
    }
    assemblerParticipant {
      storage.type = memory
      admin-api.port = 5042
      ledger-api.port = 5041
      ledger-api.address = 0.0.0.0
    }
  }
  domains {
    mydomain {
      storage.type = memory
      public-api.port = 5018
      admin-api.port = 5019
    }
  }
  // enable ledger_api commands for our getting started guide
  features.enable-testing-commands = yes
}

and
simple.canton bootstrap

// start all local instances defined in the configuration file
nodes.local start

// Connect participant1 to mydomain using the connect macro.
// The connect macro will inspect the domain configuration to find the correct URL and Port.
// The macro is convenient for local testing, but obviously doesn't work in a distributed setup.
bankAParticipant.domains.connect_local(mydomain)
bankBParticipant.domains.connect_local(mydomain)
schedulerParticipant.domains.connect_local(mydomain)
assemblerParticipant.domains.connect_local(mydomain)

We also allocated parties through daml script and upload the script in a distributed manner

stagingTest = do
  bankA <- allocatePartyWithHintOn "bankA" (PartyIdHint "bankA") $ ParticipantName "bankAParticipant"
  bankB <- allocatePartyWithHintOn "bankB" (PartyIdHint "bankB") $ ParticipantName "bankBParticipant"
  scheduler <- allocatePartyWithHintOn "scheduler" (PartyIdHint "scheduler") $ ParticipantName "schedulerParticipant"
  assembler <- allocatePartyWithHintOn "assembler" (PartyIdHint "assembler") $ ParticipantName "assemblerParticipant"

all of the above works and created the parties on different participant as expected.

Yet, when we created a contract on participantBankA with bankA party as signatory and scheduler party as observer,
canton does not seems to help us synced the contract into the acs of participantScheduler (which has schedulerParty on it).
We have double checked that the scheduler party hash on the created contract observer (through canton console command ledger_api_acs) matched the scheduler party hash that we allocated on participantScheduler. However when we run canton console command to check the acs of participantScheduler the created contract is not there.

Any idea why we are not seeing the contract sync?

Thanks so much for any of the help in advance.
it can just really be some noob level incorrect setup /or the way we are checking canton is incorrect.

Have you waited for a bit? There is no guarantee that the contracts are available immediately on the other participants. In Daml Script, you can often query for the contract id in a loop until it ppears.

@cocreature we are using canton console to query manually and now several minutes has passed, the contract is still not there.

Thanks @cocreature for the offline help, turns out just some noob mistake using canton console for querying.