@givolt/i3-composer-agent 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/plugins/marketplace.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/README.md +29 -32
- package/bin/agent-targets.json +11 -0
- package/bin/asset-fingerprint.cjs +38 -0
- package/bin/cleanup-backups.cjs +16 -0
- package/bin/i3-composer-agent.cjs +27 -12
- package/bin/install.cjs +74 -28
- package/bin/native-content.cjs +29 -0
- package/bin/wizard.cjs +2 -1
- package/docs/antigravity-setup.md +1 -1
- package/docs/codebuddy-setup.md +11 -3
- package/docs/cursor-setup.md +2 -2
- package/docs/getting-started.md +0 -2
- package/docs/opencode-setup.md +4 -4
- package/docs/workbuddy-setup.md +92 -0
- package/package.json +36 -20
- package/plugin.json +1 -1
- package/CHANGELOG.md +0 -51
- package/NOTICE.md +0 -15
- package/docs/advanced-per-agent-configuration.md +0 -70
- package/docs/comparison.md +0 -131
- package/docs/developer-onboarding.md +0 -116
- package/docs/skill-anatomy.md +0 -203
- package/evals/README.md +0 -101
- package/evals/cases/i3-api-and-interface-design.json +0 -45
- package/evals/cases/i3-browser-testing-with-devtools.json +0 -44
- package/evals/cases/i3-ci-cd-and-automation.json +0 -45
- package/evals/cases/i3-code-review-and-quality.json +0 -49
- package/evals/cases/i3-code-simplification.json +0 -45
- package/evals/cases/i3-constraint-driven-development.json +0 -79
- package/evals/cases/i3-context-engineering.json +0 -44
- package/evals/cases/i3-debugging-and-error-recovery.json +0 -58
- package/evals/cases/i3-deprecation-and-migration.json +0 -52
- package/evals/cases/i3-documentation-and-adrs.json +0 -44
- package/evals/cases/i3-doubt-driven-development.json +0 -43
- package/evals/cases/i3-frontend-ui-engineering.json +0 -52
- package/evals/cases/i3-git-workflow-and-versioning.json +0 -47
- package/evals/cases/i3-idea-refine.json +0 -43
- package/evals/cases/i3-incremental-implementation.json +0 -57
- package/evals/cases/i3-interview-me.json +0 -42
- package/evals/cases/i3-observability-and-instrumentation.json +0 -44
- package/evals/cases/i3-performance-optimization.json +0 -53
- package/evals/cases/i3-planning-and-task-breakdown.json +0 -45
- package/evals/cases/i3-security-and-hardening.json +0 -53
- package/evals/cases/i3-shipping-and-launch.json +0 -56
- package/evals/cases/i3-source-driven-development.json +0 -44
- package/evals/cases/i3-spec-driven-development.json +0 -72
- package/evals/cases/i3-test-driven-development.json +0 -73
- package/evals/cases/i3-using-agent-skills.json +0 -44
- package/evals/fixtures/i3-api-and-interface-design/service-brief.md +0 -19
- package/evals/fixtures/i3-browser-testing-with-devtools/README.md +0 -5
- package/evals/fixtures/i3-browser-testing-with-devtools/index.html +0 -24
- package/evals/fixtures/i3-browser-testing-with-devtools/server.js +0 -15
- package/evals/fixtures/i3-ci-cd-and-automation/package.json +0 -8
- package/evals/fixtures/i3-ci-cd-and-automation/src/slug.js +0 -3
- package/evals/fixtures/i3-ci-cd-and-automation/test/slug.test.js +0 -9
- package/evals/fixtures/i3-code-review-and-quality/user-search.diff +0 -16
- package/evals/fixtures/i3-code-simplification/config-parser.js +0 -46
- package/evals/fixtures/i3-code-simplification/config-parser.test.js +0 -15
- package/evals/fixtures/i3-context-engineering/context-audit.md +0 -15
- package/evals/fixtures/i3-debugging-and-error-recovery/pagination.js +0 -8
- package/evals/fixtures/i3-debugging-and-error-recovery/pagination.test.js +0 -9
- package/evals/fixtures/i3-debugging-and-error-recovery/time-pressure.md +0 -6
- package/evals/fixtures/i3-deprecation-and-migration/api-inventory.md +0 -9
- package/evals/fixtures/i3-documentation-and-adrs/decision-context.md +0 -16
- package/evals/fixtures/i3-doubt-driven-development/migration-plan.md +0 -19
- package/evals/fixtures/i3-frontend-ui-engineering/Button.tsx +0 -7
- package/evals/fixtures/i3-frontend-ui-engineering/design-system.md +0 -11
- package/evals/fixtures/i3-git-workflow-and-versioning/.eval/working-tree.patch +0 -21
- package/evals/fixtures/i3-git-workflow-and-versioning/app.js +0 -7
- package/evals/fixtures/i3-git-workflow-and-versioning/app.test.js +0 -9
- package/evals/fixtures/i3-incremental-implementation/reports.js +0 -7
- package/evals/fixtures/i3-incremental-implementation/reports.test.js +0 -12
- package/evals/fixtures/i3-incremental-implementation/tasks/plan.md +0 -8
- package/evals/fixtures/i3-observability-and-instrumentation/operations.md +0 -11
- package/evals/fixtures/i3-observability-and-instrumentation/payment-retry.js +0 -14
- package/evals/fixtures/i3-performance-optimization/benchmark.js +0 -15
- package/evals/fixtures/i3-performance-optimization/products.js +0 -14
- package/evals/fixtures/i3-planning-and-task-breakdown/notifications-spec.md +0 -18
- package/evals/fixtures/i3-security-and-hardening/webhook.js +0 -11
- package/evals/fixtures/i3-security-and-hardening/webhook.test.js +0 -13
- package/evals/fixtures/i3-shipping-and-launch/authority-pressure.md +0 -6
- package/evals/fixtures/i3-shipping-and-launch/launch-status.md +0 -11
- package/evals/fixtures/i3-source-driven-development/framework-task.md +0 -10
- package/evals/fixtures/i3-spec-driven-development/billing-brief.md +0 -16
- package/evals/fixtures/i3-test-driven-development/BUG.md +0 -10
- package/evals/fixtures/i3-test-driven-development/README.md +0 -28
- package/evals/fixtures/i3-test-driven-development/package.json +0 -9
- package/evals/fixtures/i3-test-driven-development/src/split.js +0 -8
- package/evals/fixtures/i3-test-driven-development/test/split.test.js +0 -13
- package/evals/fixtures/i3-using-agent-skills/incident.md +0 -6
- package/evals/fixtures/incremental-implementation-pressure/draft-export.js +0 -17
- package/evals/fixtures/incremental-implementation-pressure/scenario.md +0 -9
- package/evals/fixtures/spec-driven-development-decomposition/portal-brief.md +0 -22
- package/evals/fixtures/test-driven-development-ecosystem/README.md +0 -9
- package/evals/fixtures/test-driven-development-ecosystem/ledger.py +0 -15
- package/evals/fixtures/test-driven-development-ecosystem/test_ledger.py +0 -19
- package/evals/plugin/code-review-fires/graders/off-by-one.md +0 -7
- package/evals/plugin/code-review-fires/graders/severity-labels.md +0 -4
- package/evals/plugin/code-review-fires/graders/skill-fired.md +0 -5
- package/evals/plugin/code-review-fires/prompt.md +0 -31
- package/evals/plugin/code-review-stays-quiet/graders/not-fired.md +0 -8
- package/evals/plugin/code-review-stays-quiet/graders/tdd-fired.md +0 -6
- package/evals/plugin/code-review-stays-quiet/prompt.md +0 -8
- package/evals/plugin/code-review-stays-quiet-on-commit-message/graders/not-fired.md +0 -8
- package/evals/plugin/code-review-stays-quiet-on-commit-message/prompt.md +0 -25
- package/evals/skill-impact.md +0 -6
- package/rebrand/INSTALLATION-SPEC.md +0 -47
- package/rebrand/MAINTENANCE.md +0 -114
- package/rebrand/NOTICE.md +0 -15
- package/rebrand/PR-WORKFLOW.md +0 -34
- package/rebrand/PREFIX-SPEC.md +0 -16
- package/rebrand/UNIFICATION-SPEC.md +0 -33
- package/rebrand/VALIDATION.md +0 -32
- package/rebrand/VERSIONING.md +0 -35
- package/rebrand/apply.cjs +0 -217
- package/rebrand/brand.json +0 -13
- package/rebrand/catalog.cjs +0 -70
- package/rebrand/fork-patches.json +0 -27
- package/rebrand/identifiers.cjs +0 -41
- package/rebrand/overlay/.github/workflows/test-plugin-install.yml +0 -177
- package/rebrand/overlay/CHANGELOG.md +0 -51
- package/rebrand/overlay/bin/agent-targets.json +0 -726
- package/rebrand/overlay/bin/i3-composer-agent.cjs +0 -190
- package/rebrand/overlay/bin/install.cjs +0 -180
- package/rebrand/overlay/bin/skills-registry.LICENSE +0 -21
- package/rebrand/overlay/bin/wizard.cjs +0 -66
- package/rebrand/overlay/scripts/validate-brand.cjs +0 -44
- package/rebrand/overlay/tests/bundle.test.cjs +0 -85
- package/rebrand/overlay/tests/installer.test.cjs +0 -241
- package/rebrand/package.template.json +0 -82
- package/rebrand/rebrand.sh +0 -4
- package/rebrand/record-upstream.cjs +0 -37
- package/rebrand/templates/README.md +0 -130
- package/rebrand/templates/codebuddy-setup.md +0 -89
- package/rebrand/templates/codex-setup.md +0 -45
- package/rebrand/tests/pipeline.test.cjs +0 -253
- package/rebrand/upstream.json +0 -171
- package/scripts/floor-guard-reference-test.js +0 -291
- package/scripts/lib/skill-lint-test.js +0 -650
- package/scripts/lib/skill-lint.js +0 -586
- package/scripts/run-evals-test.js +0 -623
- package/scripts/run-evals.js +0 -638
- package/scripts/validate-artifact-paths-test.js +0 -179
- package/scripts/validate-artifact-paths.js +0 -130
- package/scripts/validate-brand.cjs +0 -44
- package/scripts/validate-commands-test.js +0 -216
- package/scripts/validate-commands.js +0 -223
- package/scripts/validate-reference-links-test.js +0 -495
- package/scripts/validate-reference-links.js +0 -187
- package/scripts/validate-skills.js +0 -69
- package/scripts/validate-versions-test.js +0 -32
- package/scripts/validate-versions.js +0 -35
- package/tests/bundle.test.cjs +0 -85
- package/tests/installer.test.cjs +0 -241
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# v1 API inventory
|
|
2
|
-
|
|
3
|
-
- Public consumers: 200 organizations.
|
|
4
|
-
- Replacement: `/v2/orders`, available in production but not yet announced.
|
|
5
|
-
- Current v1 traffic: 48,000 requests/day from 173 active API keys.
|
|
6
|
-
- Largest consumer contract requires 90 days' notice for breaking changes.
|
|
7
|
-
- Existing telemetry records API key, route, status, and response latency.
|
|
8
|
-
- Support can contact 188 consumers directly; 12 use reseller-managed accounts.
|
|
9
|
-
- v1 currently has no response deprecation headers or migration guide.
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# Orders architecture decision context
|
|
2
|
-
|
|
3
|
-
The orders service currently stores mutable order rows and emits best-effort
|
|
4
|
-
webhooks. Auditors need a complete history of state transitions, and support
|
|
5
|
-
must be able to reconstruct an order at a prior point in time.
|
|
6
|
-
|
|
7
|
-
Options discussed:
|
|
8
|
-
|
|
9
|
-
1. Keep the current model and add an append-only audit table.
|
|
10
|
-
2. Adopt event sourcing for orders and build read projections.
|
|
11
|
-
3. Use database change-data capture as the audit history.
|
|
12
|
-
|
|
13
|
-
Event sourcing improves traceability and replay, but adds projection rebuilds,
|
|
14
|
-
event versioning, eventual consistency, and operational complexity. The team
|
|
15
|
-
has event-stream experience, but the reporting service expects synchronous
|
|
16
|
-
reads. The decision applies only to the orders bounded context.
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# Customer identifier migration
|
|
2
|
-
|
|
3
|
-
Plan: replace integer customer IDs with UUIDs in a single maintenance window.
|
|
4
|
-
|
|
5
|
-
1. Disable writes.
|
|
6
|
-
2. Run `ALTER TABLE customers DROP COLUMN id CASCADE`.
|
|
7
|
-
3. Add a UUID `id` column and populate it.
|
|
8
|
-
4. Re-enable writes after fifteen minutes.
|
|
9
|
-
|
|
10
|
-
Claims made by the author:
|
|
11
|
-
|
|
12
|
-
- All foreign keys will be recreated automatically.
|
|
13
|
-
- The table contains fewer than one million rows.
|
|
14
|
-
- The operation completes within the maintenance window.
|
|
15
|
-
- The backup from last night is sufficient rollback protection.
|
|
16
|
-
- No external systems persist the integer identifier.
|
|
17
|
-
|
|
18
|
-
No rehearsal, row count, dependency inventory, restore timing, or rollback
|
|
19
|
-
test is attached.
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { forwardRef, type ButtonHTMLAttributes } from 'react';
|
|
2
|
-
|
|
3
|
-
export const Button = forwardRef<HTMLButtonElement, ButtonHTMLAttributes<HTMLButtonElement>>(
|
|
4
|
-
function Button({ className = '', ...props }, ref) {
|
|
5
|
-
return <button ref={ref} className={`button ${className}`.trim()} {...props} />;
|
|
6
|
-
},
|
|
7
|
-
);
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# Menu component conventions
|
|
2
|
-
|
|
3
|
-
- Framework: React with TypeScript.
|
|
4
|
-
- Styling: existing `menu-*` utility classes; do not add a styling dependency.
|
|
5
|
-
- Public components accept `className` and forward a DOM ref.
|
|
6
|
-
- Components must support keyboard-only and screen-reader users.
|
|
7
|
-
- Focus returns to the trigger when a menu closes.
|
|
8
|
-
- Escape closes the menu; arrow keys move between enabled items.
|
|
9
|
-
|
|
10
|
-
The new dropdown should expose a trigger label and an array of actions. Disabled
|
|
11
|
-
actions remain visible but cannot receive focus or execute.
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
diff --git a/i3-git-workflow-and-versioning/app.js b/i3-git-workflow-and-versioning/app.js
|
|
2
|
-
--- a/i3-git-workflow-and-versioning/app.js
|
|
3
|
-
+++ b/i3-git-workflow-and-versioning/app.js
|
|
4
|
-
@@ -1,7 +1,15 @@
|
|
5
|
-
'use strict';
|
|
6
|
-
|
|
7
|
-
-function total(items) {
|
|
8
|
-
+function sumPrices(items) {
|
|
9
|
-
return items.reduce((sum, item) => sum + item.price, 0);
|
|
10
|
-
+}
|
|
11
|
-
+
|
|
12
|
-
+function total(items) {
|
|
13
|
-
+ return Math.round(sumPrices(items) * 100) / 100;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
-module.exports = { total };
|
|
17
|
-
+function exportCsv(items) {
|
|
18
|
-
+ return ['price', ...items.map((item) => item.price)].join('\n');
|
|
19
|
-
+}
|
|
20
|
-
+
|
|
21
|
-
+module.exports = { exportCsv, total };
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const assert = require('node:assert/strict');
|
|
4
|
-
const test = require('node:test');
|
|
5
|
-
const { visibleReports } = require('./reports');
|
|
6
|
-
|
|
7
|
-
test('hides archived reports', () => {
|
|
8
|
-
assert.deepEqual(visibleReports([
|
|
9
|
-
{ id: 1, archived: false },
|
|
10
|
-
{ id: 2, archived: true },
|
|
11
|
-
]), [{ id: 1, archived: false }]);
|
|
12
|
-
});
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
# CSV export plan
|
|
2
|
-
|
|
3
|
-
1. Add a pure report-to-CSV formatter with unit tests.
|
|
4
|
-
2. Add a download adapter that uses the formatter.
|
|
5
|
-
3. Wire an Export button to the reports page.
|
|
6
|
-
|
|
7
|
-
Each task must be independently verified and committed before starting the
|
|
8
|
-
next. Existing report filtering behavior must remain unchanged.
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# Payment retry operations
|
|
2
|
-
|
|
3
|
-
On-call must be able to answer:
|
|
4
|
-
|
|
5
|
-
- Are retries recovering transient gateway failures?
|
|
6
|
-
- Which gateway and failure class is driving exhaustion?
|
|
7
|
-
- Is one payment being charged more than once?
|
|
8
|
-
- Which customer-visible payments need intervention now?
|
|
9
|
-
|
|
10
|
-
Payment and attempt IDs are safe correlation identifiers. Card numbers,
|
|
11
|
-
customer email addresses, and raw gateway responses must never be logged.
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
async function retryPayment(payment, gateway) {
|
|
4
|
-
for (let attempt = 1; attempt <= 3; attempt++) {
|
|
5
|
-
try {
|
|
6
|
-
return await gateway.charge(payment);
|
|
7
|
-
} catch (error) {
|
|
8
|
-
console.log(`retry ${attempt} failed: ${error.message}`);
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
throw new Error('payment failed');
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
module.exports = { retryPayment };
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const { performance } = require('node:perf_hooks');
|
|
4
|
-
const { renderProducts } = require('./products');
|
|
5
|
-
|
|
6
|
-
const products = Array.from({ length: 1000 }, (_, id) => ({
|
|
7
|
-
id,
|
|
8
|
-
name: `Product ${id}`,
|
|
9
|
-
sales: (id * 7919) % 10000,
|
|
10
|
-
}));
|
|
11
|
-
|
|
12
|
-
const start = performance.now();
|
|
13
|
-
const output = renderProducts(products);
|
|
14
|
-
const elapsed = performance.now() - start;
|
|
15
|
-
console.log(JSON.stringify({ products: products.length, bytes: output.length, elapsedMs: elapsed }));
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
function renderProducts(products) {
|
|
4
|
-
let html = '';
|
|
5
|
-
for (const product of products) {
|
|
6
|
-
const rank = [...products]
|
|
7
|
-
.sort((a, b) => b.sales - a.sales)
|
|
8
|
-
.findIndex((candidate) => candidate.id === product.id) + 1;
|
|
9
|
-
html += `<li data-rank="${rank}">${product.name}: ${product.sales}</li>`;
|
|
10
|
-
}
|
|
11
|
-
return `<ul>${html}</ul>`;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
module.exports = { renderProducts };
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# Notifications specification
|
|
2
|
-
|
|
3
|
-
Users can opt into email notifications when a task is assigned or becomes
|
|
4
|
-
overdue. Preferences are stored per user and default to disabled. Assignment
|
|
5
|
-
events already exist; overdue detection runs every fifteen minutes.
|
|
6
|
-
|
|
7
|
-
Requirements:
|
|
8
|
-
|
|
9
|
-
- Add preference read/update endpoints with boundary validation.
|
|
10
|
-
- Publish notification jobs from assignment and overdue flows.
|
|
11
|
-
- Deduplicate jobs by user, task, event type, and event version.
|
|
12
|
-
- Send email through the existing provider adapter.
|
|
13
|
-
- Record delivery status without storing message bodies.
|
|
14
|
-
- Feature flag the sending path; disabled remains the safe default.
|
|
15
|
-
|
|
16
|
-
Verification must include preference API tests, job deduplication tests,
|
|
17
|
-
provider-adapter integration tests, and one end-to-end assignment scenario.
|
|
18
|
-
No SMS, push notifications, or notification history UI is in scope.
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
async function previewWebhook(url, fetchImpl = fetch) {
|
|
4
|
-
const response = await fetchImpl(url, { redirect: 'follow' });
|
|
5
|
-
return {
|
|
6
|
-
status: response.status,
|
|
7
|
-
body: (await response.text()).slice(0, 2048),
|
|
8
|
-
};
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
module.exports = { previewWebhook };
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const assert = require('node:assert/strict');
|
|
4
|
-
const test = require('node:test');
|
|
5
|
-
const { previewWebhook } = require('./webhook');
|
|
6
|
-
|
|
7
|
-
test('returns a bounded preview from a successful request', async () => {
|
|
8
|
-
const result = await previewWebhook('https://example.com/hook', async () => ({
|
|
9
|
-
status: 200,
|
|
10
|
-
text: async () => 'ok',
|
|
11
|
-
}));
|
|
12
|
-
assert.deepEqual(result, { status: 200, body: 'ok' });
|
|
13
|
-
});
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
# Executive request
|
|
2
|
-
|
|
3
|
-
The launch sponsor says the public date cannot move and asks the team to mark
|
|
4
|
-
the release GO despite the failing end-to-end checkout test. They propose
|
|
5
|
-
writing the rollback steps after launch and watching general error logs instead
|
|
6
|
-
of adding payment-specific alerts.
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# Checkout launch status — tomorrow
|
|
2
|
-
|
|
3
|
-
- Unit tests: green.
|
|
4
|
-
- End-to-end checkout test: failing on payment confirmation timeout.
|
|
5
|
-
- Staging smoke test: not run since the last payment-provider change.
|
|
6
|
-
- Production dashboard: request rate and latency exist; payment failure and
|
|
7
|
-
duplicate-charge alerts do not.
|
|
8
|
-
- Feature flag: checkout v2 can be disabled without deployment.
|
|
9
|
-
- Rollback owner and commands: not documented.
|
|
10
|
-
- Database change: additive nullable column, migration tested on staging.
|
|
11
|
-
- Support and on-call have not received the launch runbook.
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
# Session implementation task
|
|
2
|
-
|
|
3
|
-
Implement server-side sessions for an Express 5 application. The project uses
|
|
4
|
-
`express-session` and must follow the currently documented production approach
|
|
5
|
-
for proxy settings, secure cookies, session stores, and secret configuration.
|
|
6
|
-
|
|
7
|
-
Ground behavioral claims in official Express or `express-session`
|
|
8
|
-
documentation and cite the exact pages used. Do not rely on remembered Express
|
|
9
|
-
4 defaults. Flag any deployment-specific assumption that cannot be verified
|
|
10
|
-
from the repository or official documentation.
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# Usage-based billing brief
|
|
2
|
-
|
|
3
|
-
The product currently charges one flat monthly price. Leadership wants usage-
|
|
4
|
-
based billing next quarter, but “usage” has not been defined. Candidate meters
|
|
5
|
-
include API requests, processed records, and successful jobs.
|
|
6
|
-
|
|
7
|
-
Known constraints:
|
|
8
|
-
|
|
9
|
-
- Existing customers need a migration path.
|
|
10
|
-
- Billing events must be auditable and idempotent.
|
|
11
|
-
- Late-arriving events occur for up to seven days.
|
|
12
|
-
- Finance requires invoice reconciliation.
|
|
13
|
-
|
|
14
|
-
Unknowns include pricing tiers, free allowances, meter ownership, correction
|
|
15
|
-
rules, customer-facing usage visibility, and regional tax behavior. Produce a
|
|
16
|
-
spec and surface these decisions; do not implement them by assumption.
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
# Bug report: cents lost on three-way splits
|
|
2
|
-
|
|
3
|
-
From finance reconciliation (ticket FIN-482):
|
|
4
|
-
|
|
5
|
-
> Splitting $100.00 three ways returns `[3333, 3333, 3333]`. That sums to
|
|
6
|
-
> $99.99, one cent short. Reconciliation flags every three-way invoice we
|
|
7
|
-
> processed this month.
|
|
8
|
-
|
|
9
|
-
Reproduces with `splitCents(10000, 3)`: expected `[3334, 3333, 3333]`
|
|
10
|
-
(sums to 10000), got `[3333, 3333, 3333]` (sums to 9999).
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
# split-payment
|
|
2
|
-
|
|
3
|
-
Utility for splitting an amount of money among `n` participants without
|
|
4
|
-
losing or inventing cents. Amounts are integer cents throughout; the
|
|
5
|
-
library never touches floating point.
|
|
6
|
-
|
|
7
|
-
## API
|
|
8
|
-
|
|
9
|
-
`splitCents(totalCents, n)` returns an array of `n` integer cent amounts.
|
|
10
|
-
`totalCents` is a non-negative integer, `n` is a positive integer.
|
|
11
|
-
|
|
12
|
-
## Invariants
|
|
13
|
-
|
|
14
|
-
Every result must satisfy both invariants, for every input:
|
|
15
|
-
|
|
16
|
-
1. **Exactness** — the shares sum to exactly `totalCents`. Money is never
|
|
17
|
-
lost or created.
|
|
18
|
-
2. **Fairness** — no two shares differ by more than one cent. When the
|
|
19
|
-
total does not divide evenly, the leftover cents go to the earliest
|
|
20
|
-
shares, one cent each.
|
|
21
|
-
|
|
22
|
-
For example, `splitCents(100, 7)` is `[15, 15, 14, 14, 14, 14, 14]`.
|
|
23
|
-
|
|
24
|
-
## Tests
|
|
25
|
-
|
|
26
|
-
```
|
|
27
|
-
npm test
|
|
28
|
-
```
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const assert = require('node:assert/strict');
|
|
4
|
-
const test = require('node:test');
|
|
5
|
-
const { splitCents } = require('../src/split');
|
|
6
|
-
|
|
7
|
-
test('splits an evenly divisible total into equal shares', () => {
|
|
8
|
-
assert.deepEqual(splitCents(10000, 4), [2500, 2500, 2500, 2500]);
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
test('a single participant receives the whole total', () => {
|
|
12
|
-
assert.deepEqual(splitCents(500, 1), [500]);
|
|
13
|
-
});
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
# Login regression report
|
|
2
|
-
|
|
3
|
-
The login page began returning HTTP 500 after yesterday's deployment. The
|
|
4
|
-
request reaches the authentication callback, then fails before a session cookie
|
|
5
|
-
is written. There is no confirmed root cause yet. The user asked for help
|
|
6
|
-
getting login working again, not for a new authentication design.
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
async function exportReports(reports, setStatus, analytics) {
|
|
4
|
-
setStatus('working');
|
|
5
|
-
const csv = `name,total\n${reports.map((r) => `${r.name},${r.total}`).join('\n')}`;
|
|
6
|
-
const blob = new Blob([csv], { type: 'text/csv' });
|
|
7
|
-
const link = document.createElement('a');
|
|
8
|
-
link.href = URL.createObjectURL(blob);
|
|
9
|
-
link.download = 'reports.csv';
|
|
10
|
-
document.body.appendChild(link);
|
|
11
|
-
link.click();
|
|
12
|
-
link.remove();
|
|
13
|
-
analytics.track('report_exported', { count: reports.length });
|
|
14
|
-
setStatus('done');
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
module.exports = { exportReports };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# Sunk-cost scenario
|
|
2
|
-
|
|
3
|
-
Another developer spent two days on `draft-export.js` and says it is 90% done.
|
|
4
|
-
It combines formatting, browser download behavior, UI state, and analytics in
|
|
5
|
-
one untested function. Management wants it committed unchanged today because
|
|
6
|
-
discarding or splitting it would “waste” the work already invested.
|
|
7
|
-
|
|
8
|
-
The existing task plan requires independently verified formatter, adapter, and
|
|
9
|
-
UI slices.
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# Customer portal — product brief
|
|
2
|
-
|
|
3
|
-
Leadership wants a self-serve customer portal shipped as one initiative. The
|
|
4
|
-
request, as handed down:
|
|
5
|
-
|
|
6
|
-
- Customers sign in with email/password or company SSO and manage their
|
|
7
|
-
account and team members.
|
|
8
|
-
- Customers pick a plan, enter payment details, and receive monthly invoices;
|
|
9
|
-
plan changes prorate.
|
|
10
|
-
- Customers get email notifications for invoices, payment failures, and team
|
|
11
|
-
invitations; enterprise customers can register webhooks for the same events.
|
|
12
|
-
- Admins see a usage dashboard: seats, API calls, and spend per month.
|
|
13
|
-
|
|
14
|
-
Constraints gathered so far:
|
|
15
|
-
|
|
16
|
-
- Billing must know who the customer is, so it depends on account data.
|
|
17
|
-
- Notifications fire on billing and account events.
|
|
18
|
-
- The dashboard reads from billing and notification delivery records.
|
|
19
|
-
- The four areas have different reviewers: platform owns accounts, finance
|
|
20
|
-
owns billing, and growth owns notifications and the dashboard.
|
|
21
|
-
- Each area should be shippable and verifiable on its own; finance wants to
|
|
22
|
-
sign off on billing without waiting for the dashboard.
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"""Simple in-memory ledger utilities."""
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
def apply_entries(balance, entries):
|
|
5
|
-
"""Apply entries to a starting balance and return the result.
|
|
6
|
-
|
|
7
|
-
Entries are (kind, amount) tuples. Only "credit" entries are
|
|
8
|
-
supported; anything else raises ValueError.
|
|
9
|
-
"""
|
|
10
|
-
for kind, amount in entries:
|
|
11
|
-
if kind == "credit":
|
|
12
|
-
balance += amount
|
|
13
|
-
else:
|
|
14
|
-
raise ValueError(f"unsupported entry kind: {kind}")
|
|
15
|
-
return balance
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import unittest
|
|
2
|
-
|
|
3
|
-
from ledger import apply_entries
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class ApplyEntriesTest(unittest.TestCase):
|
|
7
|
-
def test_applies_a_single_credit(self):
|
|
8
|
-
self.assertEqual(apply_entries(100, [("credit", 25)]), 125)
|
|
9
|
-
|
|
10
|
-
def test_applies_multiple_credits_in_order(self):
|
|
11
|
-
self.assertEqual(apply_entries(0, [("credit", 10), ("credit", 5)]), 15)
|
|
12
|
-
|
|
13
|
-
def test_rejects_unknown_entry_kinds(self):
|
|
14
|
-
with self.assertRaises(ValueError):
|
|
15
|
-
apply_entries(0, [("transfer", 10)])
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
if __name__ == "__main__":
|
|
19
|
-
unittest.main()
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: llm
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
PASS if the review points out that `rows.slice(start, start + size - 1)` returns one row fewer than `size` on every page (the end index of slice is exclusive) and treats it as something that must be fixed before merge, for example by labelling it Critical or leaving it unprefixed as a required change.
|
|
6
|
-
|
|
7
|
-
FAIL if the review does not mention that pages come back one row short, or files that finding as a Nit, Optional, Consider, or FYI.
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: A review request that names the axes, with a small diff inline. The skill should fire (through the review command or directly) and the reply should carry its severity labels.
|
|
3
|
-
expected_outcome: A structured review with a verdict, findings labelled with the skill's severity taxonomy, and the off-by-one in pageOrders treated as a required change.
|
|
4
|
-
max_turns: 12
|
|
5
|
-
allowed_tools: [Read, Glob, Grep, Skill]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
I want a code review of this diff across correctness, readability, security and performance before merging. It adds paging to the orders endpoint.
|
|
9
|
-
|
|
10
|
-
```diff
|
|
11
|
-
diff --git a/src/orders.js b/src/orders.js
|
|
12
|
-
--- a/src/orders.js
|
|
13
|
-
+++ b/src/orders.js
|
|
14
|
-
@@ -12,3 +12,15 @@ function listOrders(db) {
|
|
15
|
-
return db.query('SELECT * FROM orders ORDER BY created_at DESC');
|
|
16
|
-
}
|
|
17
|
-
-module.exports = { listOrders };
|
|
18
|
-
+function pageOrders(db, page, size) {
|
|
19
|
-
+ const rows = db.query('SELECT * FROM orders ORDER BY created_at DESC');
|
|
20
|
-
+ const start = (page - 1) * size;
|
|
21
|
-
+ return rows.slice(start, start + size - 1);
|
|
22
|
-
+}
|
|
23
|
-
+
|
|
24
|
-
+app.get('/orders', (req, res) => {
|
|
25
|
-
+ const page = Number(req.query.page) || 1;
|
|
26
|
-
+ const size = Number(req.query.size) || 20;
|
|
27
|
-
+ res.json(pageOrders(db, page, size));
|
|
28
|
-
+});
|
|
29
|
-
+
|
|
30
|
-
+module.exports = { listOrders, pageOrders };
|
|
31
|
-
```
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: A test-first request that belongs to i3-test-driven-development. The review skill must not fire.
|
|
3
|
-
expected_outcome: The reply proposes a failing test first; i3-code-review-and-quality is never invoked.
|
|
4
|
-
max_turns: 12
|
|
5
|
-
allowed_tools: [Read, Glob, Grep, Skill]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Write a failing test for this bug before we fix it: splitCents(100, 3) returns [33, 33, 33] and a cent goes missing.
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: A pasted diff with a request that belongs to i3-git-workflow-and-versioning. Guards the "even when the diff is pasted inline" clause of the review skill's description, since a pasted diff alone must not make the review skill fire.
|
|
3
|
-
expected_outcome: A commit message; i3-code-review-and-quality is never invoked.
|
|
4
|
-
max_turns: 12
|
|
5
|
-
allowed_tools: [Read, Glob, Grep, Skill]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Write me a commit message for this diff.
|
|
9
|
-
|
|
10
|
-
```diff
|
|
11
|
-
diff --git a/src/orders.js b/src/orders.js
|
|
12
|
-
--- a/src/orders.js
|
|
13
|
-
+++ b/src/orders.js
|
|
14
|
-
@@ -12,3 +12,9 @@ function listOrders(db) {
|
|
15
|
-
return db.query('SELECT * FROM orders ORDER BY created_at DESC');
|
|
16
|
-
}
|
|
17
|
-
-module.exports = { listOrders };
|
|
18
|
-
+function pageOrders(db, page, size) {
|
|
19
|
-
+ const rows = db.query('SELECT * FROM orders ORDER BY created_at DESC');
|
|
20
|
-
+ const start = (page - 1) * size;
|
|
21
|
-
+ return rows.slice(start, start + size);
|
|
22
|
-
+}
|
|
23
|
-
+
|
|
24
|
-
+module.exports = { listOrders, pageOrders };
|
|
25
|
-
```
|
package/evals/skill-impact.md
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
# Rejected Skill Changes
|
|
2
|
-
|
|
3
|
-
This append-only ledger records skill and description changes rejected on eval evidence so contributors can review prior attempts before proposing overlapping work. Add one concise row per rejected proposal; do not record accepted changes here.
|
|
4
|
-
|
|
5
|
-
| Date | Affected skill | Attempted change | Rank-1 score (before → after) | Rejected PR and outcome |
|
|
6
|
-
|---|---|---|---:|---|
|