Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
898cc6b
Keep RSC handler construction side-effect free
kojiwakayama Jul 24, 2026
f0d51ff
Keep transient module CDN failures out of renders
kojiwakayama Jul 24, 2026
341b22b
Keep retry owners singular under concurrent renders
kojiwakayama Jul 24, 2026
223e6ad
Keep remote module retries bounded through body consumption
kojiwakayama Jul 24, 2026
051778e
Keep retry regression assertions type-safe
kojiwakayama Jul 24, 2026
9c2c46d
Prevent secrets and global activity from weakening cache diagnostics
kojiwakayama Jul 24, 2026
93e6099
Close release gaps exposed by security and full-suite verification
kojiwakayama Jul 24, 2026
0fcc557
Keep the pending release unique and secrets out of timeout logs
kojiwakayama Jul 24, 2026
178cbdd
Keep public text chunk types aligned with runtime identity
kojiwakayama Jul 24, 2026
cf9aca5
Make successful knowledge reads survive response finalization
kojiwakayama Jul 24, 2026
8020764
Keep generated Code guidance public and citation-aware
kojiwakayama Jul 24, 2026
d1933ae
Prevent repeated knowledge reads from duplicating citations
kojiwakayama Jul 24, 2026
4c8f844
Keep generated API references valid MDX
kojiwakayama Jul 24, 2026
7e66743
Prove generated references compile before publication
kojiwakayama Jul 24, 2026
5947294
Integrate the released runtime foundation before shipping citations
kojiwakayama Jul 24, 2026
c939d19
Keep the test typecheck baseline honest
kojiwakayama Jul 24, 2026
1bbcde7
Integrate main before shipping persisted citations
kojiwakayama Jul 24, 2026
c4794f0
Refresh framework candidates after main integration
kojiwakayama Jul 24, 2026
daee326
Keep Redis fanout tests stable under parallel load
kojiwakayama Jul 24, 2026
8478a9e
Reserve the next release after integrating current main
kojiwakayama Jul 24, 2026
01cd701
Keep the release tap update from blocking citation rollout
kojiwakayama Jul 24, 2026
80bbb91
Keep published releases moving through Homebrew
kojiwakayama Jul 24, 2026
c2d47cd
Keep copied-state assertions inside their observable window
kojiwakayama Jul 24, 2026
69e5491
Keep worker exit notifications on a protected channel
kojiwakayama Jul 24, 2026
bf09829
Publish regenerated docs with stricter release scripts
kojiwakayama Jul 24, 2026
8a39ce3
Keep worker exits terminal while protecting lifecycle notifications
kojiwakayama Jul 24, 2026
4ebaaf0
Prevent project code from silencing worker shutdown
kojiwakayama Jul 24, 2026
bdada86
Preserve deploy errors whose evidence happens to contain 401
kojiwakayama Jul 24, 2026
8700e92
Keep direct hosted streams citation-complete
kojiwakayama Jul 24, 2026
35a05ec
Prevent project code from replacing terminal worker exits
kojiwakayama Jul 24, 2026
6332b28
Ensure derived citations reach durable finalization
kojiwakayama Jul 24, 2026
6fd5ed6
Keep citation persistence compatible with centralized finalization
kojiwakayama Jul 24, 2026
05afcb5
Keep vulnerable transitive npm packages out of releases
kojiwakayama Jul 24, 2026
10bc605
Keep generated API links anchored to their declarations
kojiwakayama Jul 24, 2026
f411a09
Keep worker exit regressions inside sandbox permissions
kojiwakayama Jul 24, 2026
cc29633
Make worker exit regressions deterministic
kojiwakayama Jul 24, 2026
2c79907
Constrain tap PR lookup to the release-owned branch
kojiwakayama Jul 24, 2026
f0188b7
Keep the tap lookup on the read-only API path
kojiwakayama Jul 24, 2026
cb9e791
Preserve source documents through chat state
kojiwakayama Jul 25, 2026
cd24c4d
Make persisted citations visible in the built-in chat UI
kojiwakayama Jul 25, 2026
f9493cb
Reserve release identity for current main
kojiwakayama Jul 25, 2026
553499a
Integrate remote citation UI visibility
kojiwakayama Jul 25, 2026
645327f
Keep generated citation references aligned after merge
kojiwakayama Jul 25, 2026
17668c4
Persist native URL citations through hosted chat
kojiwakayama Jul 25, 2026
55c5194
Keep streamed text and URL citations ordered
kojiwakayama Jul 25, 2026
b2b25cc
Keep custom citation normalization covered at its boundary
kojiwakayama Jul 25, 2026
81495d7
Keep durable citation messages replayable
kojiwakayama Jul 25, 2026
16f8b94
Keep agent reference anchors aligned with citation replay support
kojiwakayama Jul 25, 2026
7b38c49
Keep citation metadata outside provider prompts
kojiwakayama Jul 25, 2026
9c6208f
Prefer upstream citation metadata after early flushes
kojiwakayama Jul 25, 2026
2c50822
Merge remote-tracking branch 'origin/fix/persist-knowledge-source-doc…
kojiwakayama Jul 25, 2026
282381e
Make richer durable citations win during replay
kojiwakayama Jul 25, 2026
9e24d11
Keep direct streams aligned with authoritative citations\n\nA direct …
kojiwakayama Jul 25, 2026
2bb9d22
Prevent citations from dropping adjacent streamed text
kojiwakayama Jul 25, 2026
5a4905a
Prefer authoritative sources after fallback emission
kojiwakayama Jul 25, 2026
9839f6a
Preserve authoritative citations across delegated runs
kojiwakayama Jul 25, 2026
3ca42df
Guard fork source citation mapping
kojiwakayama Jul 25, 2026
9808642
Keep citation fixes compatible across concurrent review work
kojiwakayama Jul 25, 2026
c1d2c60
Preserve source events in fork streams
kojiwakayama Jul 25, 2026
6d74682
Keep fork citation guards aligned with runtime behavior
kojiwakayama Jul 25, 2026
6c85dd0
Unify fork source contracts across concurrent fixes
kojiwakayama Jul 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 32 additions & 27 deletions .github/workflows/cicd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -739,6 +739,8 @@ jobs:
max_attempts: 3
retry_wait_seconds: 10
command: |
set -euo pipefail

VERSION="${{ needs.version-check.outputs.version }}"

# Download binaries and calculate checksums
Expand Down Expand Up @@ -772,61 +774,64 @@ jobs:
git commit -m "Update veryfront to v${VERSION}"
git push -u origin "${BRANCH}" || git push -u origin "${BRANCH}" --force-with-lease

PR_NUMBER=$(GH_TOKEN="${HOMEBREW_TAP_TOKEN}" gh api \
export GH_TOKEN="${HOMEBREW_TAP_TOKEN}"
PR_NUMBER=$(gh api repos/veryfront/homebrew-tap/pulls \
--method GET \
-H "X-GitHub-Api-Version: 2022-11-28" \
"/repos/veryfront/homebrew-tap/pulls?state=open&head=veryfront:${BRANCH}&base=main&per_page=1" \
-f state=open \
-f head="veryfront:${BRANCH}" \
-f base=main \
--jq '.[0].number // empty')

if [ -z "${PR_NUMBER}" ]; then
CREATE_PR_OUTPUT=$(GH_TOKEN="${HOMEBREW_TAP_TOKEN}" gh api \
--method POST \
-H "X-GitHub-Api-Version: 2022-11-28" \
"/repos/veryfront/homebrew-tap/pulls" \
-f title="Update veryfront to v${VERSION}" \
-f base="main" \
-f head="${BRANCH}" \
-f body="Automated update from CI - veryfront v${VERSION}" \
--jq '.number' 2>&1) || {
if echo "${CREATE_PR_OUTPUT}" | grep -q "Resource not accessible by personal access token"; then
CREATE_PR_OUTPUT=$(gh pr create \
--repo veryfront/homebrew-tap \
--title "Update veryfront to v${VERSION}" \
--base main \
--head "${BRANCH}" \
--body "Automated update from CI - veryfront v${VERSION}" 2>&1) || {
if echo "${CREATE_PR_OUTPUT}" | grep -Eq "Resource not accessible by (integration|personal access token)"; then
echo "::error::Homebrew tap update requires a GitHub App token with Pull requests: write and Contents: write on veryfront/homebrew-tap."
fi
echo "${CREATE_PR_OUTPUT}"
exit 1
}
PR_NUMBER="${CREATE_PR_OUTPUT}"

PR_URL=$(printf '%s\n' "${CREATE_PR_OUTPUT}" | tail -n 1)
PR_NUMBER="${PR_URL##*/}"
if ! [[ "${PR_NUMBER}" =~ ^[0-9]+$ ]]; then
echo "::error::Created Homebrew tap PR but could not read its number."
echo "${CREATE_PR_OUTPUT}"
exit 1
fi
fi

# GitHub can report mergeability as unknown immediately after PR creation or a force-push.
MERGEABLE=""
MERGEABLE_STATE=""
for attempt in {1..24}; do
PR_JSON=$(GH_TOKEN="${HOMEBREW_TAP_TOKEN}" gh api \
--method GET \
-H "X-GitHub-Api-Version: 2022-11-28" \
"/repos/veryfront/homebrew-tap/pulls/${PR_NUMBER}")
PR_JSON=$(gh pr view "${PR_NUMBER}" \
--repo veryfront/homebrew-tap \
--json mergeable,mergeStateStatus)
MERGEABLE=$(echo "${PR_JSON}" | jq -r '.mergeable')
MERGEABLE_STATE=$(echo "${PR_JSON}" | jq -r '.mergeable_state')
MERGEABLE_STATE=$(echo "${PR_JSON}" | jq -r '.mergeStateStatus')

if [ "${MERGEABLE}" = "true" ] && [ "${MERGEABLE_STATE}" = "clean" ]; then
if [ "${MERGEABLE}" = "MERGEABLE" ] && [ "${MERGEABLE_STATE}" = "CLEAN" ]; then
break
fi

if [ "${MERGEABLE}" = "false" ]; then
if [ "${MERGEABLE}" = "CONFLICTING" ]; then
echo "::error::Homebrew tap PR #${PR_NUMBER} is not mergeable (state=${MERGEABLE_STATE})."
exit 1
fi

sleep 5
done

if [ "${MERGEABLE}" != "true" ] || [ "${MERGEABLE_STATE}" != "clean" ]; then
if [ "${MERGEABLE}" != "MERGEABLE" ] || [ "${MERGEABLE_STATE}" != "CLEAN" ]; then
echo "::error::Timed out waiting for Homebrew tap PR #${PR_NUMBER} to become mergeable (mergeable=${MERGEABLE}, state=${MERGEABLE_STATE})."
exit 1
fi

GH_TOKEN="${HOMEBREW_TAP_TOKEN}" gh api \
--method PUT \
-H "X-GitHub-Api-Version: 2022-11-28" \
"/repos/veryfront/homebrew-tap/pulls/${PR_NUMBER}/merge" \
-f merge_method="merge"
gh pr merge "${PR_NUMBER}" \
--repo veryfront/homebrew-tap \
--merge
37 changes: 36 additions & 1 deletion cli/mcp/tools/deploy-tool.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,11 @@ describe("mcp/tools/deploy-tool", () => {
const mismatchResult = await withMockFetch(handleRequest, runDeploy);

assertEquals(mismatchResult.success, false);
assertEquals(mismatchResult.error?.includes("does not match pushed commit"), true);
assertEquals(
mismatchResult.error?.includes("does not match pushed commit"),
true,
mismatchResult.error,
);
assertEquals(
capturedRequests.map(({ method, url }) => `${method} ${new URL(url).pathname}`),
[
Expand Down Expand Up @@ -470,5 +474,36 @@ describe("mcp/tools/deploy-tool", () => {
}
}
});

it("does not treat 401 digits embedded in another error as an auth failure", async () => {
const originalToken = Deno.env.get("VERYFRONT_API_TOKEN");
const sourceError =
"Release rel-42 source does not match pushed commit abc401def0000000000000000000000000000000";
try {
Deno.env.set("VERYFRONT_API_TOKEN", "test-token-abc");

const result = await withMockFetch(
async () =>
Response.json({ error: "release_mismatch", message: sourceError }, {
status: 500,
}),
async () =>
await triggerDeploy({
projectSlug: "my-app",
environment: "production",
branch: "main",
}),
);

assertEquals(result.success, false);
assertEquals(result.error, sourceError);
} finally {
if (originalToken !== undefined) {
Deno.env.set("VERYFRONT_API_TOKEN", originalToken);
} else {
Deno.env.delete("VERYFRONT_API_TOKEN");
}
}
});
});
});
5 changes: 4 additions & 1 deletion cli/mcp/tools/deploy-tool.ts
Original file line number Diff line number Diff line change
Expand Up @@ -159,11 +159,14 @@ export async function triggerDeploy(
};
} catch (error) {
const message = error instanceof Error ? error.message : String(error);
const status = typeof error === "object" && error !== null
? (error as { status?: unknown }).status
: undefined;

if (
message.includes("Missing API token") ||
message.includes("Authentication required") ||
message.includes("401")
status === 401
) {
return {
success: false,
Expand Down
3 changes: 2 additions & 1 deletion deno.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
{
"name": "veryfront",
"version": "0.1.1132",
"version": "0.1.1133",
"license": "Apache-2.0",
Comment thread
kojiwakayama marked this conversation as resolved.
"nodeModulesDir": "auto",
"minimumDependencyAge": {
"age": "P2D",
"exclude": [
"npm:brace-expansion",
"npm:esbuild",
"npm:@esbuild/aix-ppc64",
"npm:@esbuild/android-arm",
Expand Down
Loading