{"record":{"id":"548917c86609a164","repo":"affaan-m/ECC","slug":"local-only-request-permits-only-local-only-and-integration","errorCode":null,"errorMessage":"local-only request permits only local_only and integration fields","messagePattern":"local-only request permits only local_only and integration fields","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"skills/taste-application/scripts/workflow_graphs.py","lineNumber":141,"sourceCode":"    parser.add_argument('--config', type=Path, required=True)\n    parser.add_argument('--out', type=Path, required=True)\n    args = parser.parse_args()\n    try:\n        if args.kind == 'apply-bundle':\n            from tasteforge.integration import build_application_bundle, load_application_request\n            config = load_application_request(args.config)\n        else:\n            config = json.loads(args.config.read_text())\n        if not isinstance(config, dict):\n            raise ValueError('config must be a JSON object')\n        local_only = False\n        if args.kind == 'apply-bundle':\n            local_only = config.get('local_only', False)\n            if type(local_only) is not bool:\n                raise ValueError('local_only must be an exact boolean')\n        if local_only:\n            if set(config) != {'local_only', 'integration'}:\n                raise ValueError('local-only request permits only local_only and integration fields')\n            payload = build_application_bundle(config['integration'], None, local_only=True)\n        else:\n            load_graph('apply' if args.kind == 'apply-bundle' else args.kind)\n            compile_input = compile_application_input if args.kind != 'distill' else prepare_distillation_input\n            payload = compile_input(config)\n            if args.kind == 'apply-bundle':\n                payload = build_application_bundle(config.get('integration'), payload)\n        with args.out.open('x') as output:\n            output.write(json.dumps(payload, indent=2) + '\\n')\n    except (OSError, ValueError, KeyError) as error:\n        parser.exit(2, f'Offline compilation failed: {error}\\n')\n\n\nif __name__ == '__main__':\n    main()\n","sourceCodeStart":123,"sourceCodeEnd":157,"githubUrl":"https://github.com/affaan-m/ECC/blob/8321021c54d670126ce3b2969d5deb880b4b0c2a/skills/taste-application/scripts/workflow_graphs.py#L123-L157","documentation":"Contract guard in main: the request is marked local-only, but its config includes fields beyond the permitted local_only and integration fields. Extra provider-execution fields would violate the offline contract, so validation fails.","triggerScenarios":"A local-only config additionally carries keys like inputs, model, or notes, or omits integration; or local_only is true while the config still uses the full network-request schema.","commonSituations":"Reusing a full remote-request config and just flipping local_only to true; adding debug/extra fields for convenience; stripping integration by mistake while enabling local mode.","solutions":["Trim the config to only {\"local_only\": true, \"integration\": {...}} with integration containing the full bundle spec","Move any extra settings out of the config file (or into the integration object if supported)","Set local_only to false (or remove it) if you actually need the full request schema","Diff the config against the expected local-only shape: exactly two top-level keys"],"exampleFix":"// before\n{\"local_only\": true, \"integration\": {...}, \"notes\": \"test run\"}\n// after\n{\"local_only\": true, \"integration\": {...}}","handlingStrategy":"validation","validationCode":"if config.get('local_only') is True:\n    extra = set(config) - {'local_only', 'integration'}\n    missing = {'local_only', 'integration'} - set(config)\n    assert not extra and not missing, f'local-only config: extra={extra} missing={missing}'","typeGuard":null,"tryCatchPattern":"try:\n    run_cli(args)\nexcept ValueError as e:\n    if 'permits only local_only and integration' in str(e):\n        config = {'local_only': True, 'integration': config['integration']}\n        # rewrite config and retry","preventionTips":["Keep local-only configs minimal: exactly two top-level keys","Store extra metadata outside the request config file","When converting a remote config to local-only, delete rather than comment unused keys"],"tags":["json","configuration","strict-schema"],"backgroundTag":"schema-validation-failed","analyzedSha":"8321021c54d670126ce3b2969d5deb880b4b0c2a","analyzedAt":"2026-09-16T10:08:13.343Z","contentChangedAt":"2026-09-16T10:08:13.343Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}