Repository navigation
feat: run every closed feature the service lists - #162
Svilen-Stefanov wants to merge 6 commits into
Conversation
The review guide step becomes a generic runner: it reads GET /v1/features, collects the bundle once, posts one request per feature in parallel with only the inputs that feature names, and writes each answer to the artifact. A feature that never answered is written as skipped or failed, so a reader can tell not checked from nothing found. It computes nothing and names no feature, except the fallback to the guide alone for a service with no manifest. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Only that feature's request carries it, within the size the service names. Past that, or with closed_features_source: false, the request goes without it and says why, so the feature reports what it could not check. Also lowers the bundle limit to what a Function URL really takes: base64 counts, so 5 MB was refused with a 413. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CodeBoarding reviewStatus: 1 changed component See the full change in CodeBoarding. graph LR
n_action_support_scripts["action_support_scripts"]
classDef added fill:#1f883d,stroke:#0b5d23,color:#ffffff;
classDef modified fill:#bf8700,stroke:#7d4e00,color:#ffffff;
classDef deleted fill:#cf222e,stroke:#82071e,color:#ffffff,stroke-dasharray:5 3;
class n_action_support_scripts modified;
|
The run's llm, key and model now reach every feature, for each provider the service can call. A run on a provider it cannot reach makes no model call and is never sent to the hosted model. The manifest is read with the run's credentials. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
llm: hosted and license now refuse model, agent_model and parsing_model, with hosted_with_model and license_with_model. A run's own key uses agent_model, then model, as its analysis does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 071e7e9dfb
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| size = path.stat().st_size | ||
| if size > (spec.get("maxFileBytes") or size) or not path.is_file(): | ||
| continue | ||
| files[name] = path.read_text(encoding="utf-8") |
There was a problem hiding this comment.
Reject source symlinks that escape the checkout
When a source-requesting feature runs, a tracked symlink with an allowed extension is followed by stat(), is_file() and read_text(). Consequently, an existing example.py symlink pointing outside the checkout sends the target's contents to the service, even though that target is not tracked repository source. I reproduced this with a tracked .py symlink to a file outside the repository. This can expose runner-local files, particularly on self-hosted runners, and also corrupt the source supplied for analysis. Reject symlinks or verify that each resolved file remains inside the checkout before reading it.
Useful? React with 👍 / 👎.
| done = pool.map(lambda f: run_feature(f, base, ctx, inputs, headers, sources.get(f["name"])), enabled) | ||
| results.update({f["name"]: r for f, r in zip(enabled, done)}) |
There was a problem hiding this comment.
Isolate unexpected exceptions within each feature worker
If one feature returns valid JSON with an unexpected shape, such as null, _answered() raises an uncaught AttributeError. That exception propagates through this pool.map() iterator to the outer handler, bypassing the entire artifact-writing loop, so even other features that completed successfully lose their results and no failure envelope is written. I reproduced the escaping exception with a null response. Catch unexpected exceptions per feature and convert them into failed envelopes so one malformed answer cannot discard every feature's output.
Useful? React with 👍 / 👎.
ivanmilevtues
left a comment
There was a problem hiding this comment.
We have to rename to codeboarding_services or something liek that not have it as clsoed_Funtioncs.
I think parat from that it is quite hard to review and i had to prompt quite a bit here. Looks fine but I think we'd need to revisit this shortly.

The review guide step becomes a generic runner for CodeBoarding's closed features. It reads
GET /v1/features, collects the bundle once, posts one request per feature in parallel with the inputs that feature names, and writes each answer toclosed/<feature>.json.skippedorfailed, so a reader can tell "not checked" from "nothing found". One feature failing costs no other.review_guide.json.closed_features_source, defaulttrue. A feature can ask for the repository's source. Only its request carries it, within the service's size limit. Past that, or withfalse, the request goes without it and says why.llm, key andagent_model, thenmodel, reach every feature on each provider the service can call. A run on a provider it cannot reach, including any custom base URL, keeps its key on the runner, makes no model call and never falls back to the hosted model.hosted_with_modelandlicense_with_model. On CodeBoarding's key CodeBoarding picks the model, so a workflow that setsmodel,agent_modelorparsing_modelwithllm: hostedorlicensenow fails with a clear message. This can break a hand-edited workflow, and it is the only change here that can stop a run. The Action can only ask:gha_proxydoes not enforce it yet.scripts/review_guide.pyis nowscripts/closed_features.py. Inputreview_guide_urlkeeps its name, because workflows set it. The README's "never reaches CodeBoarding" line is corrected. Apart from those refusals, the step never fails the run. Nothing visible changes.🤖 Generated with Claude Code