def validate_specs_from_path(specs_path):
<EOL>log_to_client("<STR_LIT>".format(specs_path))<EOL>if not os.path.exists(specs_path):<EOL><INDENT>raise RuntimeError("<STR_LIT>".format(specs_path))<EOL><DEDENT>specs = get_specs_from_path(specs_path)<EOL>_check_bare_minimum(specs)<EOL>_validate_spec_names(specs)<EOL>_validate_cycle_free(specs)<EOL>log_to_client("<STR_LIT>")<EOL>
Validates Dusty specs at the given path. The following checks are performed:
    -That the given path exists
    -That there are bundles in the given path
    -That the fields in the specs match those allowed in our schemas
    -That references to apps, libs, and services point at defined specs
    -That there are no cycles in app and lib dependencies