Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
2aeed95
Exif削除の処理をサービスオブジェクトに移動し、永続化前に実行されるように変更
matuaya Apr 13, 2026
cc80049
APIが返したURLが正しいblobを指していることを確認するテストを追加
matuaya Apr 13, 2026
a6cd548
ExifStripperのcallメソッドがExif情報を削除することを検証するテストを追加
matuaya Apr 14, 2026
1c44e11
EXIF削除ロジックをサービスクラスからImageモデルに移動
matuaya Apr 20, 2026
c8c142d
EXIF情報処理を引数なしで行いモデル内で完結するように修正
matuaya May 18, 2026
263dd6d
ファイル未指定時に早期リターンをするように修正
matuaya May 18, 2026
574f89d
添付ファイルの存在バリデーションを追加
matuaya May 18, 2026
21fd781
アップロード画像の取得方法をattr_accessorからattachment_changesに変更
matuaya May 18, 2026
ae3013b
Reスキルコースユーザーは通常コースの着手ボタンをクリックさせないようにした
zecky1120 Jun 13, 2026
08451b6
Reスキルコースユーザーは通常コースの提出物ボタンをクリックさせないようにした
zecky1120 Jun 13, 2026
7363cd1
Reスキルコースユーザーが通常プラクティスに遷移したときに提出物ボタンを押せないようにし、代わりにReスキルプラクティスに遷移させるようにした
zecky1120 Jun 15, 2026
8848b48
Reスキルから給付金に変更と、ステータスを給付金コースユーザーの場合はステータスを表示し、元プラクティスの時は給付金プラクティスへ遷移する…
zecky1120 Jun 18, 2026
0215b96
給付金コースユーザーが元プラクティスページに来た時、修了ボタンを非表示
zecky1120 Jun 18, 2026
dcb8be0
終了のみの場合のステータスを修正
zecky1120 Jun 19, 2026
6e68c55
提出物ボタンの箇所を給付金コースユーザーは元プラクティスでは表示させない
zecky1120 Jun 21, 2026
5d49580
ステータスのliタグの入れ子を修正
zecky1120 Jun 21, 2026
6bad9e1
提出が必要ない時は終了のみにした
zecky1120 Jun 21, 2026
dff0697
プラクティスの難易度をアイコンで表示する
karlley Apr 15, 2026
44eb371
プラクティスの難易度アイコンのテストを追加
karlley May 6, 2026
256c043
プラクティスの難易度・所要時間の表示を共通コンポーネントに置き換える
machida May 21, 2026
f72059f
不要なEarly Returnを削除
karlley Jun 25, 2026
daf3b07
Remove unused CSS files (dead BEM blocks)
machida Jul 1, 2026
523b101
Remove leftover sourceMappingURL comments
machida Jul 1, 2026
2c98ec7
Replace hardcoded colors with matching CSS variables
machida Jul 1, 2026
970bb0c
Remove dead literal fallbacks overridden by var()
machida Jul 1, 2026
4e51362
Normalize survey partial filenames with leading underscore
machida Jul 1, 2026
81f54a6
Remove unused CSS custom properties
machida Jul 1, 2026
a8f288a
給付金コースへの移動導線を調整する
machida Jul 1, 2026
986243a
動画アップロードAPIを追加
komagata Jul 1, 2026
736a839
Remove empty CSS rulesets
machida Jul 2, 2026
c36347d
Variablize muted text color in button atoms
machida Jul 2, 2026
ae3c99b
Remove unused CSS blocks left over from refactors
machida Jul 2, 2026
0adbea4
Remove unused CSS selectors from live stylesheets
machida Jul 2, 2026
84c1cce
Remove unused mr-bottom-nav and stale user-company-profile rules
machida Jul 2, 2026
3da2082
Remove unused .thanks block and stale faqs-item rules
machida Jul 2, 2026
202dcc0
seedの動画にもサムネイルを生成するようにした
zamami Jul 2, 2026
7941956
開発環境のseedでBootcamp::Setup.attachmentを実行するよう復活させた
zamami Jul 2, 2026
0af5bd0
本番環境、開発環境のdockerfileにffmpegを追加
zamami Jul 3, 2026
e9f70f5
既存の動画でサムネイルがない動画のサムネイルを自動生成する処理を作成
zamami Jul 3, 2026
45ee5a2
サムネイルがない動画に対してサムネ作成ジョブが実行されるか確認するテストを作成
zamami Jul 3, 2026
a01bf84
Remove unused elements from company-profile and lp-top-cover
machida Jul 4, 2026
552e053
AIモデルをClaude Sonnet 5に更新
komagata Jul 2, 2026
46a7655
CodeRabbitの動画API指摘を反映
komagata Jul 5, 2026
ad3c47c
Merge pull request #10251 from fjordllc/codex/add-movie-upload-api
komagata Jul 5, 2026
d80cbee
Merge pull request #10252 from fjordllc/codex/update-claude-sonnet-5
komagata Jul 5, 2026
9424711
Remove unused LP marketing-page CSS elements
machida Jul 5, 2026
f81fffa
ファイル名を変更
zamami Jul 6, 2026
088e03f
Merge pull request #10257 from fjordllc/feature/show-thumbnail-img
machida Jul 6, 2026
c9586ad
Add Playwright-based visual regression test scaffold
machida Jul 6, 2026
b59d26b
docs(visual): add resume checklist for visual regression setup
machida Jul 7, 2026
3b7cab7
Allow Pjord to read linked images
komagata Jul 7, 2026
17e287c
Address Pjord image review feedback
komagata Jul 7, 2026
babdc12
Merge pull request #10264 from fjordllc/komagata/bootcamp
komagata Jul 7, 2026
6c5ad71
practiceのmodelに給付金コースへ移動できる共通化メソッドを追加した
zecky1120 Jul 7, 2026
f84ac5c
test文を追加してunlessからif文に変更した
zecky1120 Jul 7, 2026
ccd7d45
Checkを提出物ごとに一意にする
komagata Jul 7, 2026
5659242
buzzesの年別リンクで不正な年を除外
komagata Jul 7, 2026
8789ce5
未使用のCheckコピー判定メソッドを削除
komagata Jul 7, 2026
bff604e
Merge pull request #10269 from fjordllc/komagata/1-check
komagata Jul 7, 2026
18b8548
Merge pull request #10270 from fjordllc/komagata/buzzes-500
komagata Jul 7, 2026
e405b80
学習時間0時間の表示を「データ収集中」に変更
karlley Jul 10, 2026
26f7356
ピヨルドが提出物OKできるフラグを追加
komagata Jul 7, 2026
2da163b
CodeRabbitの指摘に対応
komagata Jul 7, 2026
cccc193
提出物のCheck一意制約を前提に簡潔化
komagata Jul 8, 2026
19b683e
PjordレビューのOK表現をフラグで制御
komagata Jul 8, 2026
cea6a40
flakewatchアクションを更新
komagata Jul 8, 2026
bac2a2a
flakewatchのCIを再実行
komagata Jul 8, 2026
bd4db5b
flakewatch履歴の書き込みを無効化
komagata Jul 8, 2026
00478d8
Merge pull request #10283 from fjordllc/add-pjord-auto-check
komagata Jul 12, 2026
f93065c
複数の日報を一括で確認済みにするAPIを追加
komagata Jul 13, 2026
3a19290
日報の一括確認APIを高速化
komagata Jul 13, 2026
d2b74f8
else文に変更してその中にunless文で条件分岐した
zecky1120 Jul 13, 2026
cfb295a
CodeRabbitのレビュー指摘に対応
komagata Jul 13, 2026
d3fd157
EXIF削除処理を簡潔にする
komagata Jul 13, 2026
f2749e3
画像更新時にもEXIF情報を削除する
komagata Jul 13, 2026
5d0a1a8
Merge pull request #9907 from fjordllc/bug/fix-exif-not-removed
komagata Jul 13, 2026
67d4e61
Merge pull request #9918 from fjordllc/feature/practice-difficulty-icon
komagata Jul 13, 2026
ebed4f8
Merge pull request #10284 from fjordllc/komagata/bulk-approve-daily-r…
komagata Jul 13, 2026
39187ee
Merge pull request #10224 from fjordllc/feature/prevent-students-in-R…
komagata Jul 14, 2026
4689d4b
リンク取得失敗時のメンター通知をやめる
komagata Jul 14, 2026
70f3173
Merge pull request #10288 from fjordllc/komagata/avoid-unreadable-url…
komagata Jul 15, 2026
9d0b59e
Make visual regression scaffold runnable and verify CSS refactor parity
machida Jul 15, 2026
24ef8b5
docs(visual): document local-only workflow, drop CI integration
machida Jul 15, 2026
1cf6838
Fix Layout/ExtraSpacing in visual test base class
machida Jul 15, 2026
21c2bb6
Keep visual regression tests out of CI
machida Jul 15, 2026
38e27f8
Merge pull request #10291 from fjordllc/css_refactor
machida Jul 15, 2026
339b5e3
サムネイルのバックフィル処理をcloudbuildのoneshotタスク内で実行するよう変更
zamami Jul 16, 2026
82909dc
checks.ymlのproductのスペルミスを修正
mikan-v7y Jul 16, 2026
3925d4a
fixture名変更に伴い参照箇所を修正
mikan-v7y Jul 16, 2026
aef4282
db/fixtures/checks.ymlのキー名を修正
mikan-v7y Jul 16, 2026
241455a
Merge pull request #10295 from fjordllc/feature/show-thumbnail-img
komagata Jul 16, 2026
3b248e5
Merge pull request #10296 from fjordllc/chore/fix-product-typo
komagata Jul 16, 2026
0f70553
ステージングtaskにAPP_HOST_NAMEの既定値を設定
komagata Jul 17, 2026
de867d0
Merge pull request #10302 from fjordllc/fix-staging-task-app-host-name
komagata Jul 17, 2026
a0c36cc
ステージングtaskにSECRET_KEY_BASEの既定値を設定
komagata Jul 17, 2026
8758081
Merge pull request #10303 from fjordllc/fix-staging-task-app-host-name
komagata Jul 17, 2026
aae2b23
ステージングtaskにDB接続環境変数を設定
komagata Jul 17, 2026
00770fa
Merge pull request #10304 from fjordllc/fix-staging-task-environment
komagata Jul 17, 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
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ jobs:
- run:
name: Test
command: |
circleci tests glob "test/**/*_test.rb" | timeout 20m circleci tests run --command="xargs bundle exec rails test" --verbose --split-by=timings --timings-type=filename
circleci tests glob "test/**/*_test.rb" | grep -v '^test/visual/' | timeout 20m circleci tests run --command="xargs bundle exec rails test" --verbose --split-by=timings --timings-type=filename
- store_test_results:
path: test/reports
- store_artifacts:
Expand Down
12 changes: 10 additions & 2 deletions .cloudbuild/cloudbuild-task.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,15 @@ steps:
- id: Task
name: asia.gcr.io/$PROJECT_ID/$REPO_NAME:$COMMIT_SHA
automapSubstitutions: true
env:
- RAILS_ENV=production
- APP_HOST_NAME=bootcamp-staging.fjord.jp
- SECRET_KEY_BASE=dummy
- DB_HOST=/cloudsql/$_CLOUD_SQL_HOST
- DB_NAME=$_DB_NAME
- DB_USER=$_DB_USER
- DB_PASS=$_DB_PASS
- OPEN_AI_ACCESS_TOKEN=$_OPEN_AI_ACCESS_TOKEN
waitFor:
- Build
volumes:
Expand All @@ -34,7 +43,6 @@ steps:
- bash
- "-c"
- |-
eval "$(.cloudbuild/cloud-build-env exports)"
bin/rails bootcamp:oneshot:cloudbuild
- id: Kill_SqlProxy
name: gcr.io/cloud-builders/docker
Expand All @@ -50,7 +58,7 @@ options:
substitutionOption: ALLOW_LOOSE
automapSubstitutions: true
substitutions:
_APP_HOST_NAME: _
_APP_HOST_NAME: bootcamp-staging.fjord.jp
_CLOUD_SQL_HOST: _
_DB_NAME: _
_DB_PASS: _
Expand Down
4 changes: 2 additions & 2 deletions .cloudbuild/deploy-cloud-run
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,12 @@ fi
case "$environment" in
production)
export _RAILS_MAX_THREADS=5
export _PJORD_LLM_MODEL=claude-sonnet-4-6
export _PJORD_LLM_MODEL=claude-sonnet-5
cloud_run_args+=(--concurrency 5)
;;
staging)
export _MISSION_CONTROL_USERNAME="${_MISSION_CONTROL_USERNAME:-fjord}"
export _PJORD_LLM_MODEL=claude-sonnet-4-6
export _PJORD_LLM_MODEL=claude-sonnet-5
;;
review)
export _DISCORD_NOTICE_WEBHOOK_URL=
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -222,10 +222,10 @@ jobs:
uses: actions/checkout@v4

- name: Generate flakewatch HTML
# komagata/flakewatch v0.6.31
uses: komagata/flakewatch@e734ba749bb1f8de2b9ae8a35b2cb02d63bbbf76
# komagata/flakewatch v0.6.32
uses: komagata/flakewatch@v0.6.32
with:
junit-artifact-pattern: junit-xml-*
source-root: ${{ github.workspace }}
history-branch: flakewatch-data
history-write: auto
history-write: false
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@

vendor/bundle/

# Visual regression: commit baseline PNGs, ignore transient diff/latest output.
test/visual/screenshots/**/*.diff.png
test/visual/screenshots/**/*.latest.png
test/visual/screenshots/**/*.committed.png
test/visual/screenshots/**/.attempts/

/node_modules
/yarn-error.log

Expand Down
1 change: 1 addition & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ RUN apt-get update -qq && apt-get install -y --no-install-recommends \
python3 \
git \
ca-certificates \
ffmpeg \
libvips && \
rm -rf /var/lib/apt/lists/*

Expand Down
1 change: 1 addition & 0 deletions Dockerfile.dev
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ RUN apt-get update -qq && apt-get install -y --no-install-recommends \
libvips-dev \
postgresql-client \
tzdata \
ffmpeg \
vim && \
rm -rf /var/lib/apt/lists/*

Expand Down
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ end
group :test do
gem 'capybara'
gem 'capybara-playwright-driver', '~> 0.5.9'
gem 'capybara-screenshot-diff', require: false
gem 'minitest', '< 6.0'
gem 'minitest-ci'
gem 'minitest-retry'
Expand Down
3 changes: 3 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,8 @@ GEM
addressable
capybara
playwright-ruby-client (>= 1.16.0)
capybara-screenshot-diff (1.12.0)
capybara (>= 2, < 4)
childprocess (5.1.0)
logger (~> 1.5)
cocooned (2.5.0)
Expand Down Expand Up @@ -814,6 +816,7 @@ DEPENDENCIES
byebug
capybara
capybara-playwright-driver (~> 0.5.9)
capybara-screenshot-diff
cocooned
concurrent-ruby (= 1.3.4)
countries (>= 5.5.0)
Expand Down
19 changes: 18 additions & 1 deletion app/agents/pjord/product_review_agent.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,27 @@ class Pjord::ProductReviewAgent < Pjord::Agent

class << self
def review(product)
extract_public_response_body(new.ask(message(product)).content).presence
review_result(product)[:body]
end

def review_result(product)
content = new.ask(message(product)).content
{
body: extract_public_response_body(content).presence,
auto_check: auto_check?(content)
}
end

private

def auto_check?(content)
return false unless content.respond_to?(:to_h)

values = content.to_h
value = values.key?(:auto_check) ? values[:auto_check] : values['auto_check']
ActiveModel::Type::Boolean.new.cast(value) || false
end

def message(product)
user_course_practice = UserCoursePractice.new(product.user)
<<~TEXT
Expand All @@ -31,6 +47,7 @@ def message(product)

## プラクティス
- タイトル: #{product.practice.title}
- ピヨルドによる提出物OK: #{product.practice.pjord_auto_check? ? '許可されています' : '許可されていません'}
- ゴール:
#{truncate_for_prompt(product.practice.goal)}
- 説明:
Expand Down
15 changes: 3 additions & 12 deletions app/assets/stylesheets/application.css
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
@import "./application/blocks/admin/_embedding-status.css";
@import "./application/blocks/auth-form/_auth-form-nav.css";
@import "./application/blocks/auth-form/_auth-form.css";
@import "./application/blocks/auth-form/_next-settlement-time.css";
@import "./application/blocks/auth-form/_skip-practices.css";
@import "./application/blocks/cards/_card-counts.css";
@import "./application/blocks/cards/_card-body-main-actions.css";
Expand All @@ -39,15 +38,13 @@
@import "./application/blocks/header/_header.css";
@import "./application/blocks/mention/_mention.css";
@import "./application/blocks/modal/_modal-celebrate-report-count-body.css";
@import "./application/blocks/page/_o-page-info.css";
@import "./application/blocks/page/_page-body-actions.css";
@import "./application/blocks/page/_page-body-header.css";
@import "./application/blocks/page/_page-body.css";
@import "./application/blocks/page/_page-header.css";
@import "./application/blocks/page/_page-header-actions.css";
@import "./application/blocks/page/_page-main-header-actions.css";
@import "./application/blocks/page/_page-main-header.css";
@import "./application/blocks/page/_page-notices.css";
@import "./application/blocks/page/_page-optional-header.css";
@import "./application/blocks/page/_page-tabs.css";
@import "./application/blocks/page/_page.css";
Expand All @@ -63,8 +60,6 @@
@import "./application/blocks/pair-work/_pair-work-schedule-dates.css";
@import "./application/blocks/practice/_categories.css";
@import "./application/blocks/practice/_category-practices-item.css";
@import "./application/blocks/practice/_completion-massage.css";
@import "./application/blocks/practice/_practice-content-actions.css";
@import "./application/blocks/practice/_practice-content.css";
@import "./application/blocks/practice/_practice-contents.css";
@import "./application/blocks/practice/_practice-first-actions.css";
Expand All @@ -79,25 +74,22 @@
@import "./application/blocks/side/_side-tabs.css";
@import "./application/blocks/side/_user-statuses.css";
@import "./application/blocks/static-pages/_thanks-message.css";
@import "./application/blocks/static-pages/_thanks.css";
@import "./application/blocks/survey/_survey-added-question.css";
@import "./application/blocks/survey/_survey-additional-question.css";
@import "./application/blocks/survey/_survey-questions-item.css";
@import "./application/blocks/survey/_survey-questions.css";
@import "./application/blocks/survey/survey-answer.css";
@import "./application/blocks/survey/survey-result.css";
@import "./application/blocks/survey/survey-answers.css";
@import "./application/blocks/survey/_survey-answer.css";
@import "./application/blocks/survey/_survey-result.css";
@import "./application/blocks/survey/_survey-answers.css";
@import "./application/blocks/tags/_random-tags.css";
@import "./application/blocks/tags/_tag-links.css";
@import "./application/blocks/tags/_tag-input.css";
@import "./application/blocks/thread/_thread-comment-form.css";
@import "./application/blocks/thread/_thread-comment.css";
@import "./application/blocks/thread/_thread-comments-more.css";
@import "./application/blocks/thread/_thread-comments.css";
@import "./application/blocks/thread/_thread-form.css";
@import "./application/blocks/thread/_thread-header.css";
@import "./application/blocks/thread/_action-completed.css";
@import "./application/blocks/user/_active-practices-list.css";
@import "./application/blocks/user/_companies-item.css";
@import "./application/blocks/user/_completed-practices-progress.css";
@import "./application/blocks/user/_following.css";
Expand All @@ -109,7 +101,6 @@
@import "./application/blocks/user/_user-group.css";
@import "./application/blocks/user/_user-metas.css";
@import "./application/blocks/user/_user-profile.css";
@import "./application/blocks/user/_user-secret-attributes.css";
@import "./application/blocks/user/_users-item.css";
@import "./application/blocks/user/_user-study-streak-tracker.css";
@import "./application/blocks/coding-test/_code-editor.css";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

.auth-form-logo-image {
display: block;
}
Expand Down Expand Up @@ -60,9 +59,6 @@
padding: 1rem 1.75rem;
}

.auth-form__body {
}

@media (width >= 48em) {
.auth-form__body {
padding: 1.5rem 1.75rem;
Expand All @@ -86,10 +82,6 @@
font-weight: 700;
}

.auth-form-items {
margin-bottom: 1.25rem;
}

.auth-form__alert {
padding: .5rem 1.5rem;
background-color: var(--danger);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@

.card-counts {
}

@media (width >= 48em) {
.card-counts.is-user {
margin-bottom: 1.5rem;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,29 +1,3 @@
.company-profile__header {
padding: 1rem;
}

.company-profile__header .company-links__items {
justify-content: flex-start;
}

.company-profile__header-inner {
text-align: center;
}

.company-profile__header-start {
margin-right: 1.25rem;
}

.company-profile__header-end {
flex: 1;
}

.company-profile__logo {
position: static;
text-align: center;
margin-bottom: 0.25rem;
}

.company-profile__logo-image {
background-color: var(--base);
object-fit: contain;
Expand All @@ -32,13 +6,6 @@
height: 3.5rem;
}

.company-profile__name {
font-weight: 800;
color: var(--main-text);
font-size: 1.25rem;
line-height: 1.45;
}

.company-profile__body {
padding: 1rem;
}
Expand All @@ -48,25 +15,11 @@
}

@media (width >= 48em) {
.company-profile__header-inner {
display: flex;
text-align: left;
}

.company-profile__logo {
margin-bottom: 0;
text-align: left;
}

.company-profile__logo-image {
width: 4.5rem;
height: 4.5rem;
}

.company-profile__name {
font-size: 1.5rem;
}

.company-profile__description {
font-size: 0.9375rem;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@

.event-meta {
}

@media (width >= 48em) {
.event-meta {
font-size: .8125rem;
Expand All @@ -14,9 +10,6 @@
}
}

.event-meta__inner {
}

@media (width >= 48em) {
.event-meta__inner {
padding: .75rem 1.5rem;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

.footer-nav__items {
display: flex;
line-height: 1.4;
Expand All @@ -20,9 +19,6 @@
}
}

.footer-nav__item {
}

@media (width <= 47.9375em) {
.footer-nav__item {
flex: 0 0 50%;
Expand Down
Loading
Loading