<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.archivematica.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hbecker</id>
	<title>Archivematica - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.archivematica.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hbecker"/>
	<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/Special:Contributions/Hbecker"/>
	<updated>2026-05-25T04:09:44Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.4</generator>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Merging&amp;diff=11793</id>
		<title>Merging</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Merging&amp;diff=11793"/>
		<updated>2017-03-31T22:26:13Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: /* Code review &amp;amp; approval */ Update code review link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; Merging &amp;amp; Branches&lt;br /&gt;
&lt;br /&gt;
== Branching guidelines ==&lt;br /&gt;
&lt;br /&gt;
Guidelines on when to create branches for new development in Archivematica projects.  Short answer: always create branches!&lt;br /&gt;
&lt;br /&gt;
* All development work happens in branches - nothing is committed directly to master, qa/ or stable/ branches&lt;br /&gt;
* Development branches should follow the naming format: &amp;lt;code&amp;gt;dev/issue-####-short-description&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;dev/&amp;lt;/code&amp;gt; marks it as being a development branch, not for QA integration or a stable release&lt;br /&gt;
** &amp;lt;code&amp;gt;issue-####&amp;lt;/code&amp;gt; is the Redmine ticket that the work is mostly related to.  If the branch expands in scope to include multiple tickets later, that's fine, and don't worry about renaming branches&lt;br /&gt;
** &amp;lt;code&amp;gt;short-description&amp;lt;/code&amp;gt; is a couple word description of the branch, to make it easier to remember what the topic of the branch is.&lt;br /&gt;
** Example: &amp;lt;code&amp;gt;dev/issue-8161-dashboard-i18n&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;dev/issue-8693-dataverse&amp;lt;/code&amp;gt;&lt;br /&gt;
* Development branches should generally be create from the branch they will be merged into. In most cases, this is master, qa/1.x (Archivematica) or qa/0.x (Storage Service). If something is a patch for an old release, it may be more appropriate to branch from the old stable branch (e.g. stable/1.5.x)&lt;br /&gt;
* All branches should undergo code review before being merged into the target branch. If something was developed for an old release, it should be cherry-picked to the current development branch, and a comment with the commit hash should be left in the pull request for tracking.&lt;br /&gt;
&lt;br /&gt;
== Code review &amp;amp; approval ==&lt;br /&gt;
&lt;br /&gt;
All code changes merged into a stable or qa branch must go through code review.  We use Github's pull request feature for code review. Every change being submitted to an Artefactual project should be submitted as a pull request to the appropriate repository. &lt;br /&gt;
&lt;br /&gt;
Another core contributor (usually an Artefactual employee) will review the code for content, style and suitability in the project. A more extensive guideline to code review is [https://github.com/artefactual/archivematica/blob/qa/1.x/code_review.md also available].  After the reviewer is satisfied with the code, they will approve it on github. If at least one reviewer approves, and there are no disapprovals, the branch can be merged.&lt;br /&gt;
&lt;br /&gt;
In general, the original contributor will [[#Merge process | merge the branch]].  For external contributions, the reviewer can merge or cherry-pick the commits.  This will leave the Author correct in git, but update the committer.&lt;br /&gt;
&lt;br /&gt;
== Merge process ==&lt;br /&gt;
&lt;br /&gt;
We use a rebase-based workflow, where branches are brought up to date with the latest stable by rebasing them. (This is compared to a merge-based workflow, where branches are merged, and conflicts resolved in the merge commit).  This shows the process for merging development branch &amp;lt;code&amp;gt;dev/test&amp;lt;/code&amp;gt; into target branch &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;.  The target branch is usually master, qa/0.x or qa/1.x.&lt;br /&gt;
&lt;br /&gt;
The instructions are formatted: &amp;lt;code&amp;gt;(current branch) $ &amp;lt;command to run&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Check your remote is set to be gitolite&lt;br /&gt;
#* &amp;lt;code&amp;gt;$ git remote -v&amp;lt;/code&amp;gt; should show &amp;lt;code&amp;gt;origin  git@git.artefactual.com:&amp;lt;repository-name&amp;gt;.git&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Not all repositories have gitolite as the canonical repo - ask if you're unsure&lt;br /&gt;
# Ensure your copy of the target branch is up to date&lt;br /&gt;
#* &amp;lt;code&amp;gt;$ git checkout master&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;(master) $ git pull --rebase &amp;lt;/code&amp;gt;&lt;br /&gt;
# Ensure your development branch is based off the latest target branch&lt;br /&gt;
#* &amp;lt;code&amp;gt;$ git checkout dev/test&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;(dev/test) $ git rebase master&amp;lt;/code&amp;gt;&lt;br /&gt;
# Check that your changes still work after rebasing&lt;br /&gt;
# Check tests pass (see https://wiki.archivematica.org/Getting_started#Tests for more details)&lt;br /&gt;
#* &amp;lt;code&amp;gt;(dev/test) $ py.test&amp;lt;/code&amp;gt;&lt;br /&gt;
# Push your newly-rebased branch to remote.  Because this is a rebase, which changes history, you'll need --force. The rebased dev branch has to be pushed before the master branch is or github gets confused.&lt;br /&gt;
#* '''Never force push on a stable/, qa/ or master branch!'''&lt;br /&gt;
#* &amp;lt;code&amp;gt;(dev/test) $ git push -f&amp;lt;/code&amp;gt;&lt;br /&gt;
# Fast-forward merge&lt;br /&gt;
#* &amp;lt;code&amp;gt;$ git checkout master&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;(master) $ git merge dev/test&amp;lt;/code&amp;gt;&lt;br /&gt;
# Push merge!&lt;br /&gt;
#* &amp;lt;code&amp;gt;(master) $ git push&amp;lt;/code&amp;gt;&lt;br /&gt;
# Delete dev branch&lt;br /&gt;
#* Locally: &amp;lt;code&amp;gt;(master) $ git branch -d dev/test&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Remote: &amp;lt;code&amp;gt;(master) $ git push origin --delete dev/test&amp;lt;/code&amp;gt;&lt;br /&gt;
# Update the related ticket, if needed&lt;br /&gt;
# You're done!&lt;br /&gt;
&lt;br /&gt;
== Proposed changes ==&lt;br /&gt;
&lt;br /&gt;
=== Forks ===&lt;br /&gt;
&lt;br /&gt;
* '''Current status''': All development branches are created in the artefactual (or artefactual-labs) owned repository, and core contributors (usually Artefactual employees) commit directly to the official repository&lt;br /&gt;
* '''Proposed change''': Development happens in contributor's forks, and the official repo contains only stable &amp;amp; QA branches&lt;br /&gt;
* '''Pros''':&lt;br /&gt;
** Fewer branches in the official repository, so there is less clutter and noise for people watching activity&lt;br /&gt;
** Handles more contributors, since there won't be dozens or hundreds of branches of uncertain development status&lt;br /&gt;
** Contribution process is the same for external and internal contributors&lt;br /&gt;
** Contributors can handle their repository branches however they want - naming conventions, deleting old branches or not, etc&lt;br /&gt;
* '''Cons''':&lt;br /&gt;
** Potential confusion about which repository is the correct official one&lt;br /&gt;
** Potential to push changes to the wrong repo (e.g. push a development branch to the official repo instead of the contributor's fork)&lt;br /&gt;
** Developers have to keep 2 repositories up to date: upstream and their fork&lt;br /&gt;
** Harder for analysts to check out development code, since they would have to set their remote to the contributor's fork&lt;br /&gt;
&lt;br /&gt;
=== Hybrid merge/rebase model ===&lt;br /&gt;
&lt;br /&gt;
* '''Current status''': All branches are rebased onto their target branch before being (fast-forward) merged&lt;br /&gt;
* '''Proposed change''': Small or minor branches are rebased, larger feature branches are true merged&lt;br /&gt;
* '''Pros''':&lt;br /&gt;
** Commit history clearly shows 'feature', and which commits came in together as a unit&lt;br /&gt;
** Rebasing small branches preserves clean history for minor changes&lt;br /&gt;
** Better reflects nature of development - shows minor changes as happening inline, and major changes as happening in parallel&lt;br /&gt;
** Merge commits are clear places to look for integration issues&lt;br /&gt;
* '''Cons''':&lt;br /&gt;
** Confusion about when to merged vs rebase&lt;br /&gt;
** Developers have to learn two workflows&lt;br /&gt;
&lt;br /&gt;
[[Category:Process documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=11791</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=11791"/>
		<updated>2017-03-31T19:13:13Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Add warning on waiting endpoint&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; Archivematica API&lt;br /&gt;
&lt;br /&gt;
Endpoints require authentication with a username and API key.  This can be submitted as GET parameters (eg &amp;lt;code&amp;gt;?username=demo&amp;amp;api_key=e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;) or as a header (eg &amp;lt;code&amp;gt;Authorization: ApiKey demo:e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Endpoints return JSON.  If there's an error, they will return a 4xx or 5xx HTTP error code and a JSON body &amp;lt;code&amp;gt;{'error': True, 'message': 'message describing error'}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Transfer ==&lt;br /&gt;
&lt;br /&gt;
=== Start Transfer ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/start_transfer/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a transfer.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of new transfer&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Type of the new transfer. One of: standard, unzipped bag, zipped bag, dspace&lt;br /&gt;
** &amp;lt;code&amp;gt;accession&amp;lt;/code&amp;gt;: Accession number of new transfer&lt;br /&gt;
** &amp;lt;code&amp;gt;paths[]&amp;lt;/code&amp;gt;: List of base64-encoded &amp;quot;&amp;lt;location_uuid&amp;gt;:&amp;lt;relative_path&amp;gt;&amp;quot; to be copied into the new transfer. Location UUIDs should be associated with this pipeline, and relative path should be relative to the location (TODO confirm relative vs absolute path).  E.g. NWJiYWJjMTMtMTIyNy00MWE3LWIwY2QtZjJhYzM1MjkxZTdmOi92YWdyYW50L3NhbXBsZWRhdGEvQ1NWbWV0YWRhdGE= (decoded: 5bbabc13-1227-41a7-b0cd-f2ac35291e7f:/vagrant/sampledata/CSVmetadata)&lt;br /&gt;
** &amp;lt;code&amp;gt;row_ids[]&amp;lt;/code&amp;gt;: ID of the associated TransferMetadataSet for disk image ingest.  Can be provided as [&amp;quot;&amp;quot;]&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Copy successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path the transfer was copied to on start?&lt;br /&gt;
&lt;br /&gt;
=== List Unapproved Transfers ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/unapproved&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns a list of transfers waiting for approval.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched unapproved transfers successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of dicts with keys:&lt;br /&gt;
*** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Transfer type. One of: standard, unzipped bag, zipped bag, dspace&lt;br /&gt;
*** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Directory the transfer is in currently&lt;br /&gt;
*** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the transfer&lt;br /&gt;
&lt;br /&gt;
=== Approve Transfer ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/approve&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Approve a transfer waiting to be started.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Type of the transfer to approved. One of: standard, unzipped bag, zipped bag, dspace.&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory for the transfer to approve&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the approved transfer&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/transfer/status/&amp;lt;transfer UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns the status of the transfer.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;: One of FAILED, REJECTED, USER_INPUT, COMPLETE or PROCESSING&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the transfer, e.g. &amp;quot;imgs&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: If status is COMPLETE, this field will exist with either the UUID of the SIP or 'BACKLOG'&lt;br /&gt;
** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory, e.g. &amp;quot;imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Full path to the transfer, e.g. &amp;quot;/var/archivematica/sharedDirectory/watchedDirectories/SIPCreation/completedTransfers/imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c/&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched status for &amp;lt;transfer UUID&amp;gt; successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: &amp;quot;transfer&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the transfer, e.g. &amp;quot;52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Hide ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/&amp;lt;transfer UUID&amp;gt;/delete/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': DELETE&lt;br /&gt;
* Hide a transfer&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;removed&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== Completed ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/completed/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Return list of Transfers that are completed&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched completed transfers successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of UUIDs of completed Transfers&lt;br /&gt;
* Added in Archivematica 1.6&lt;br /&gt;
&lt;br /&gt;
=== Start Reingest ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/reingest&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a full reingest.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the AIP. The AIP should also be found at &amp;lt;code&amp;gt;%sharedDirectory%/tmp/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the AIP to reingest&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest_uuid&amp;lt;/code&amp;gt;: UUID of the reingested transfer&lt;br /&gt;
&lt;br /&gt;
== Ingest ==&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/ingest/status/&amp;lt;unit UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns the status of the SIP&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;: One of FAILED, REJECTED, USER_INPUT, COMPLETE or PROCESSING&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the SIP, e.g. &amp;quot;imgs&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory, e.g. &amp;quot;imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Full path to the transfer, e.g. &amp;quot;/var/archivematica/sharedDirectory/currentlyProcessing/imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c/&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched status for &amp;lt;SIP UUID&amp;gt; successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: &amp;quot;SIP&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the SIP, e.g. &amp;quot;52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Hide ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/&amp;lt;SIP UUID&amp;gt;/delete/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': DELETE&lt;br /&gt;
* Hide a SIP&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;removed&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== List SIPS Waiting for User Input ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/waiting&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns a list of SIPs waiting for user input.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched units successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of dicts with keys:&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_directory&amp;lt;/code&amp;gt;: Directory the SIP is in currently&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: UUID of the SIP&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_name&amp;lt;/code&amp;gt;: Name of the SIP&lt;br /&gt;
*** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: Despite the URL, this currently returns both SIPs &amp;amp; transfers that are waiting for user input. A separate &amp;lt;code&amp;gt;/api/transfer/waiting&amp;lt;/code&amp;gt; should be added for transfers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Completed ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/completed/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Return list of SIPs that are completed&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched completed ingests successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of UUIDs of completed SIPs&lt;br /&gt;
* Added in Archivematica 1.6&lt;br /&gt;
&lt;br /&gt;
=== Reingest ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/reingest&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a partial or metadata-only reingest.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the AIP. The AIP should also be found at &amp;lt;code&amp;gt;%sharedDirectory%/tmp/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the AIP to reingest&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest_uuid&amp;lt;/code&amp;gt;: UUID of the reingested SIP&lt;br /&gt;
&lt;br /&gt;
=== Copy Metadata ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/copy_metadata_files/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Add metadata files to a SIP.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: UUID of the SIP to put files in&lt;br /&gt;
** &amp;lt;code&amp;gt;source_paths[]&amp;lt;/code&amp;gt;: List of files to be copied, base64 encoded, in the format 'source_location_uuid:full_path'&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt;: False&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Files added successfully.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Levels of Description ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/administration/dips/atom/levels/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Returns a JSON-encoded set of the configured levels of description.&lt;br /&gt;
* ''Response'': JSON. List of AtoM Levels of description with key 'UUID' and value 'name of level of description'.&lt;br /&gt;
&lt;br /&gt;
=== Fetch Levels of Description ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/administration/dips/atom/fetch_levels/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Fetch all levels of description from an AtoM database, replacing any previously existing.&lt;br /&gt;
* '''Response''': JSON. Updated list of AtoM Levels of description with key 'UUID' and value 'name of level of description'.&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
=== Path Metadata ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/filesystem/metadata/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET, POST&lt;br /&gt;
* Fetch (GET) or update (POST) metadata for a path (currently only level of description).&lt;br /&gt;
* '''Parameters''': Query string parameters (GET) or JSON body (POST)&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Arranged path to get metadata on&lt;br /&gt;
* '''GET response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;level_of_description&amp;lt;/code&amp;gt;: Level of description&lt;br /&gt;
* '''POST response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;success&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== Processing Configuration ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/processing-configuration/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Return processing configuration with &amp;lt;name&amp;gt;&lt;br /&gt;
* '''Response''': The processing config file as a stream.&lt;br /&gt;
* '''Content type''': text/xml&lt;br /&gt;
&lt;br /&gt;
[[Category:Development documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=SIP_Structure&amp;diff=11789</id>
		<title>SIP Structure</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=SIP_Structure&amp;diff=11789"/>
		<updated>2017-03-31T00:05:42Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Links to features&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[:Category:Development documentation]] &amp;gt; SIP Structure&lt;br /&gt;
&lt;br /&gt;
A Transfer or SIP in Archivematica has a number of special directories and files.  Many of these are created by Archivematica, and should not be submitted by users.  Others will trigger specific workflows if included in the transfer.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
!Path&lt;br /&gt;
!File or Folder?&lt;br /&gt;
!Source?&lt;br /&gt;
!Usage&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|User&lt;br /&gt;
|Top level container for the the SIP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/DIP&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|Archivematica&lt;br /&gt;
|This will become the [[DIP_structure|DIP]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/DIP/objects&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|Archivematica&lt;br /&gt;
|Contains the access derivatives&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/DIP/thumbnails&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|Archivematica&lt;br /&gt;
|Contains thumbnails for the DIP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/logs&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|Archivematica&lt;br /&gt;
|Log files generated by Archivematica&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/logs/fileMeta&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|User&lt;br /&gt;
|Uncertain, used in the TRIM workflow&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/metadata&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|User&lt;br /&gt;
|Metadata files provided by the user. Depending on the file, these may be processed by Archivematica.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/metadata/checksum.md5&amp;lt;/code&amp;gt;&lt;br /&gt;
|text file&lt;br /&gt;
|User&lt;br /&gt;
|External checksums for original files. Format is the same as the output of &amp;lt;code&amp;gt;md5deep -rl objects/&amp;lt;/code&amp;gt;. Also supported: &amp;lt;code&amp;gt;checksums.sha1&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;checksums.sha256&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/metadata/file_labels.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
|CSV file&lt;br /&gt;
|User&lt;br /&gt;
|Labels for files in the METS structMap&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/metadata/metadata.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
|CSV file&lt;br /&gt;
|User&lt;br /&gt;
|File-level [[Metadata_import|DublinCore metadata]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/metadata/metadata.json&amp;lt;/code&amp;gt;&lt;br /&gt;
|JSON file&lt;br /&gt;
|User&lt;br /&gt;
|File-level DublinCore metadata formatted as JSON. Will be converted to a CSV during processing&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/metadata/rights.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
|CSV file&lt;br /&gt;
|User&lt;br /&gt;
|[[Object-level_PREMIS_rights_import|File-level PREMIS Rights]] metadata.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/METS.sip-uuid.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
|XML file&lt;br /&gt;
|Archivematica&lt;br /&gt;
|Contains all of the metadata on the METS&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/objects&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|User or Archivematica&lt;br /&gt;
|Original objects provide by the user. If this directory doesn't exist, all files in &amp;lt;code&amp;gt;/SIP_Folder&amp;lt;/code&amp;gt; will be moved here by Archivematica&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/objects/access&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|User&lt;br /&gt;
|Triggers manually created access derivatives workflow, which is deprecated in favor of [[Manual_normalization_requirements_and_testing_procedures|manual normalization]] workflow.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/objects/manualNormalization/normalization.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
|CSV file&lt;br /&gt;
|User&lt;br /&gt;
|CSV that provides a mapping for original objects of the same name to their access and preservation derivatives in [[Manual_normalization_requirements_and_testing_procedures|manual normalization]].&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/objects/manualNormalization/access&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|User&lt;br /&gt;
|Access derivatives created outside of Archivematica. Should have the same filename as the original, but may have a different extension&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/objects/manualNormalization/preservation&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|User&lt;br /&gt;
|Preservation derivatives created outside of Archivematica. Should have the same filename as the original, but may have a different extension&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/objects/service&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|User&lt;br /&gt;
|Service files - cleaned up versions of the original that are not derivatives. Normalization can be performed on these files instead of the originals&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/processingMCP.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
|XML file&lt;br /&gt;
|Archivematica or user&lt;br /&gt;
|Automates workflow decisions. Created by Archivematica, but can be submitted as part of the Transfer to override the default pipeline workflow choices.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/submissionDocumentation&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|User&lt;br /&gt;
|Folder for files that are not original objects but should still be in the AIP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/thumbnails&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|Archivematica&lt;br /&gt;
|Contains thumbnail derivatives&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=SIP_Structure&amp;diff=11788</id>
		<title>SIP Structure</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=SIP_Structure&amp;diff=11788"/>
		<updated>2017-03-30T23:57:00Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: More details, formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[:Category:Development documentation]] &amp;gt; SIP Structure&lt;br /&gt;
&lt;br /&gt;
A Transfer or SIP in Archivematica has a number of special directories and files.  Many of these are created by Archivematica, and should not be submitted by users.  Others will trigger specific workflows if included in the transfer.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
!Path&lt;br /&gt;
!File or Folder?&lt;br /&gt;
!Source?&lt;br /&gt;
!Usage&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|User&lt;br /&gt;
|Top level container for the the SIP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/DIP&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|Archivematica&lt;br /&gt;
|This will become the DIP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/DIP/objects&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|Archivematica&lt;br /&gt;
|Contains the access derivatives&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/DIP/thumbnails&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|Archivematica&lt;br /&gt;
|Contains thumbnails for the DIP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/logs&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|Archivematica&lt;br /&gt;
|Log files generated by Archivematica&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/logs/fileMeta&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|User&lt;br /&gt;
|Uncertain, used in the TRIM workflow&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/metadata&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|User&lt;br /&gt;
|Metadata files provided by the user. Depending on the file, these may be processed by Archivematica.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/metadata/checksum.md5&amp;lt;/code&amp;gt;&lt;br /&gt;
|text file&lt;br /&gt;
|User&lt;br /&gt;
|External checksums for original files. Format is the same as the output of &amp;lt;code&amp;gt;md5deep -rl objects/&amp;lt;/code&amp;gt;. Also supported: &amp;lt;code&amp;gt;checksums.sha1&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;checksums.sha256&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/metadata/file_labels.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
|CSV file&lt;br /&gt;
|User&lt;br /&gt;
|Labels for files in the METS structMap&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/metadata/metadata.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
|CSV file&lt;br /&gt;
|User&lt;br /&gt;
|File-level DublinCore metadata&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/metadata/metadata.json&amp;lt;/code&amp;gt;&lt;br /&gt;
|JSON file&lt;br /&gt;
|User&lt;br /&gt;
|File-level DublinCore metadata formatted as JSON. Will be converted to a CSV during processing&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/METS.sip-uuid.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
|XML file&lt;br /&gt;
|Archivematica&lt;br /&gt;
|Contains all of the metadata on the METS&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/objects&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|User or Archivematica&lt;br /&gt;
|Original objects provide by the user. If this directory doesn't exist, all files in &amp;lt;code&amp;gt;/SIP_Folder&amp;lt;/code&amp;gt; will be moved here by Archivematica&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/objects/access&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|User&lt;br /&gt;
|Triggers manually created access derivatives workflow, which is deprecated in favor of manual normalization workflow.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/objects/manualNormalization/normalization.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
|CSV file&lt;br /&gt;
|User&lt;br /&gt;
|CSV that provides a mapping for original objects of the same name to their access and preservation derivatives in manual normalization.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/objects/manualNormalization/access&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|User&lt;br /&gt;
|Access derivatives created outside of Archivematica. Should have the same filename as the original, but may have a different extension&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/objects/manualNormalization/preservation&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|User&lt;br /&gt;
|Preservation derivatives created outside of Archivematica. Should have the same filename as the original, but may have a different extension&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/objects/service&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|User&lt;br /&gt;
|Service files - cleaned up versions of the original that are not derivatives. Normalization can be performed on these files instead of the originals&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/processingMCP.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
|XML file&lt;br /&gt;
|Archivematica or user&lt;br /&gt;
|Automates workflow decisions. Created by Archivematica, but can be submitted as part of the Transfer to override the default pipeline workflow choices.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/submissionDocumentation&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|User&lt;br /&gt;
|Folder for files that are not original objects but should still be in the AIP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/SIP_Folder/thumbnails&amp;lt;/code&amp;gt;&lt;br /&gt;
|folder&lt;br /&gt;
|Archivematica&lt;br /&gt;
|Contains thumbnail derivatives&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=11787</id>
		<title>Release Process</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=11787"/>
		<updated>2017-03-30T23:37:33Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: /* Update dependencies */ Combine metsrw &amp;amp; agentarchives&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an outline/checklist of the process to create Archivematica &amp;amp; Storage service releases.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
# Merge new features&lt;br /&gt;
# Test new features&lt;br /&gt;
# [[#Update PRONOM]]&lt;br /&gt;
# Write documentation&lt;br /&gt;
# Update dependencies&lt;br /&gt;
# [[#Build deb/rpm packages]]&lt;br /&gt;
# Test packages for new installs and upgrades&lt;br /&gt;
# [[#Tag Release]]&lt;br /&gt;
# Update ansible roles&lt;br /&gt;
# Announce release&lt;br /&gt;
&lt;br /&gt;
== Update PRONOM ==&lt;br /&gt;
&lt;br /&gt;
PRONOM needs to be updated in our file identification tools, FIDO &amp;amp; Siegfried, as well as in the FPR.&lt;br /&gt;
&lt;br /&gt;
=== Update FIDO ===&lt;br /&gt;
&lt;br /&gt;
The FPR update currently use FIDO as a source for new PRONOM, since it is formatted nicer than PRONOM offers, so we depend on FIDO having updated their PRONOM.  If that has not happened, we can generate a new formats-v##.xml by updating signatures manually. Artefactual can also update PRONOM and submit a PR to FIDO.&lt;br /&gt;
&lt;br /&gt;
# Checkout fido from https://github.com/openpreserve/fido&lt;br /&gt;
# Update signatures&lt;br /&gt;
#* Run &amp;lt;code&amp;gt;python -m fido.update_signatures&amp;lt;/code&amp;gt; from the fido repository root&lt;br /&gt;
# Add:&lt;br /&gt;
#* New signature file &amp;lt;code&amp;gt;fido/conf/DROID_SignatureFile-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New formats file &amp;lt;code&amp;gt;fido/conf/formats-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New PRONOM zip file &amp;lt;code&amp;gt;fido/conf/pronom-xml-v##.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Updated &amp;lt;code&amp;gt;fido/conf/versions.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
# Remove:&lt;br /&gt;
#* Old signature file&lt;br /&gt;
#* Old formats file&lt;br /&gt;
#* Old PRONOM zip file&lt;br /&gt;
# Update &amp;lt;code&amp;gt;fido/fido.py&amp;lt;/code&amp;gt; to point to the new format_files&lt;br /&gt;
# Create pull request.  This may trigger a release from FIDO&lt;br /&gt;
&lt;br /&gt;
=== Package FIDO ===&lt;br /&gt;
&lt;br /&gt;
First, clone the [https://github.com/artefactual-labs/am-packbuild/  am-packbuild]  repo. The most recent work has been done in branch dev/packages-1.6-docker, and needs to be merged into main.&lt;br /&gt;
&lt;br /&gt;
Update the Makefiles available at &amp;lt;code&amp;gt;rpm/fido/Makefile&amp;lt;/code&amp;gt;, and  &amp;lt;code&amp;gt;deb/fido/Makefile&amp;lt;/code&amp;gt; , and run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in each directory to build the packages.&lt;br /&gt;
&lt;br /&gt;
=== Package Siegfried ===&lt;br /&gt;
&lt;br /&gt;
First, clone the [https://github.com/artefactual-labs/am-packbuild/  am-packbuild]  repo. The most recent work has been done in branch dev/packages-1.6-docker, and needs to be merged into main.&lt;br /&gt;
&lt;br /&gt;
Update the Makefiles available at &amp;lt;code&amp;gt;rpm/siegfried/Makefile&amp;lt;/code&amp;gt;, and  &amp;lt;code&amp;gt;deb/siegfried/Makefile&amp;lt;/code&amp;gt; , and run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in each directory to build the packages.&lt;br /&gt;
&lt;br /&gt;
=== Update FPR ===&lt;br /&gt;
&lt;br /&gt;
This process is currently more convoluted than it needs to be, and should be simplified.&lt;br /&gt;
&lt;br /&gt;
This depends on FIDO having updated their PRONOM files. See [[#Update FIDO]]&lt;br /&gt;
&lt;br /&gt;
# Install the latest stable Archivematica release&lt;br /&gt;
# Generate a JSON with the current version of the FPR (for use later)&lt;br /&gt;
#* &amp;lt;code&amp;gt;./src/dashboard/src/manage.py dumpdata fpr &amp;gt; fpr-current.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Install the latest development version of Archivematica&lt;br /&gt;
# Generate a blank data migration in the FPR-admin module&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;./src/dashboard/src/manage.py makemigrations --empty --name pronom_89 fpr&amp;lt;/code&amp;gt;&lt;br /&gt;
# Generate the FPR migration body.  This also updates the local database's FPR with the new PRONOM IDs&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;am import-pronom-ids fido/fido/conf/formats-v89.xml --output-filename archivematica/pronom89.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Copy the output into the blank migration, add RunPython operation&lt;br /&gt;
#* &amp;lt;code&amp;gt;migrations.RunPython(data_migration),&amp;lt;/code&amp;gt;&lt;br /&gt;
# Due to a [https://projects.artefactual.com/issues/10466#change-46673 bug], fix the imports&lt;br /&gt;
#* Remove the &amp;lt;code&amp;gt;apps.get_model&amp;lt;/code&amp;gt; lines&lt;br /&gt;
#* Import the models directly with &amp;lt;code&amp;gt;from fpr.models import Format, FormatVersion, IDRule&amp;lt;/code&amp;gt;&lt;br /&gt;
# Commit&lt;br /&gt;
# Deploy on testing pipeline&lt;br /&gt;
# (Analysts) Update the new entries&lt;br /&gt;
#* Move new formats to a more appropriate category&lt;br /&gt;
#* Create rules &amp;amp; commands&lt;br /&gt;
#* Test with data for new formats&lt;br /&gt;
# Generate a JSON with the updated version of the FPR on the testing pipeline&lt;br /&gt;
#* &amp;lt;code&amp;gt;./src/dashboard/src/manage.py dumpdata fpr &amp;gt; fpr-updated.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Get the updates as JSON&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;am get-fpr-changes fpr-current.json fpr-updated.json src/dashboard/src/fpr/migrations/pronom_89.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Update the migration to load the JSON updates&lt;br /&gt;
#* Replace the contents of the data migration function with&lt;br /&gt;
#** &amp;lt;code&amp;gt;fixture_file = os.path.join(os.path.dirname(__file__), 'pronom_89.json')&amp;lt;/code&amp;gt;&lt;br /&gt;
#** &amp;lt;code&amp;gt;call_command('loaddata', fixture_file, app_label='fpr')&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Remove the direct imports from the bug&lt;br /&gt;
#* Improvement Note: Because this is using loaddata, this will have problems if the FPR models are changed. A possible solution is to update get-fpr-changes to generate a migration instead of JSON&lt;br /&gt;
# Commit&lt;br /&gt;
# Merge&lt;br /&gt;
&lt;br /&gt;
== Update dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Python Packages ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/artefactual-labs/mets-reader-writer metsrw] and [https://github.com/artefactual-labs/agentarchives agentarchives] both have Makefiles that handle most of the packaging&lt;br /&gt;
&lt;br /&gt;
# Check for open PRs, merge as necessary&lt;br /&gt;
# Update &amp;lt;code&amp;gt;setup.py&amp;lt;/code&amp;gt; with the new version, create a pull request, code review, [[Merging | merge]].&lt;br /&gt;
# Tag new release, push tag&lt;br /&gt;
#* &amp;lt;code&amp;gt;git push --tags&amp;lt;/code&amp;gt;&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make package&amp;lt;/code&amp;gt;&lt;br /&gt;
#* This will build the package and upload it to PyPI. It will prompt for your PyPI username and password for the upload&lt;br /&gt;
#* The Makefile was created from instructions at https://packaging.python.org/distributing/&lt;br /&gt;
# &amp;lt;code&amp;gt;make clean&amp;lt;/code&amp;gt; will delete packaging related files&lt;br /&gt;
&lt;br /&gt;
== Build deb/rpm packages ==&lt;br /&gt;
&lt;br /&gt;
The am-packbuild repository has all the code related to building packages, except the building gpg keys. The steps to follow in order to build production production packages are as follow&lt;br /&gt;
&lt;br /&gt;
=== Debian packages ===&lt;br /&gt;
&lt;br /&gt;
# Clone the [https://github.com/artefactual-labs/am-packbuild am-packbuild] repo. Latest work is available in dev/packages-1.6-docker&lt;br /&gt;
# Put your gpg private key into &amp;lt;code&amp;gt;debs/GPG-KEYS-REPOS&amp;lt;/code&amp;gt;. That's the place the Dockerfile looks for it when building the environment.&lt;br /&gt;
# Update the makefile at &amp;lt;code&amp;gt;debs/archivematica/Makefile&amp;lt;/code&amp;gt; in order to reflect version/keys you want to use. If you want to build the storage service, you need also to change the packbuild.py line to reflect that (TODO: create service-storage package folder)&lt;br /&gt;
This dockerfile uses packbuild.py  script, whose function is downloadig the code from github, creating a debian/changelog file for each ubuntu version with the expected version name and description of last commit included, and build the package aftewards. It can be run on their own too, without the need of a docker environment.&lt;br /&gt;
# Run &amp;lt;make&amp;gt;, and the packages will be available in the &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; once the building finishes.&lt;br /&gt;
# Upload packages to public debian repository&lt;br /&gt;
&lt;br /&gt;
=== Debian reposities ===&lt;br /&gt;
&lt;br /&gt;
There are two debian repositories, one for archivematica packages, and one for dependencies. The procedure in order to create new ones, or upload packages to them, is the same:&lt;br /&gt;
&lt;br /&gt;
#* Create folder for repo, and configuration file:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
mkdir -p /path/to/repos/repo/conf&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /path/to/repos/repo/conf/distributions &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
Codename: trusty&lt;br /&gt;
&lt;br /&gt;
Components: main&lt;br /&gt;
&lt;br /&gt;
Architectures: amd64 source&lt;br /&gt;
&lt;br /&gt;
SignWith: &amp;lt;short gpg keyid&amp;gt; &lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#* Go inside the repo, and import the packages previously uploaded with:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd /path/to/repos/repo/&lt;br /&gt;
&lt;br /&gt;
reprepro includedeb trusty /path/to/packages/*.deb&lt;br /&gt;
&lt;br /&gt;
reprepro includedsc trusty /path/to/packages/*.deb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The current official repo is at packages.archivematica.org&lt;br /&gt;
&lt;br /&gt;
=== RPM Packages ===&lt;br /&gt;
&lt;br /&gt;
# Package specs are available in [https://github.com/artefactual-labs/am-packbuild/tree/dev/packaging-1.6-docker/rpm am-packbuild/rpms]&lt;br /&gt;
# There are vars in the Makefiles for version/release , so update them when needed&lt;br /&gt;
# In order to build them, just go into the directory you want to build, and run “make”&lt;br /&gt;
&lt;br /&gt;
=== RPM Repositories ===&lt;br /&gt;
&lt;br /&gt;
Once the packages are built, upload them to packages.archivematica.org/&amp;lt;version&amp;gt;/centos&lt;br /&gt;
Go inside that dir, and run “createrepo .” (For packages other than archivematica , use  “centos-extras” repository)&lt;br /&gt;
&lt;br /&gt;
== Website ==&lt;br /&gt;
&lt;br /&gt;
'''Needs to be improved!'''&lt;br /&gt;
&lt;br /&gt;
==== Homepage ====&lt;br /&gt;
&lt;br /&gt;
* Make changes in archivematica-web.git&lt;br /&gt;
** Update links&lt;br /&gt;
** Add new doc repos&lt;br /&gt;
* Deploy&lt;br /&gt;
** Log in sites-pub as archivematica-web and run update-web.sh&lt;br /&gt;
&lt;br /&gt;
==== Documentation ====&lt;br /&gt;
&lt;br /&gt;
* Deploy&lt;br /&gt;
** Log in sites-pub as archivematica-web and run update-docs.sh&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
&lt;br /&gt;
* Release notes&lt;br /&gt;
* Installation notes&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== News ==&lt;br /&gt;
&lt;br /&gt;
* Twitter&lt;br /&gt;
* Mailing list&lt;br /&gt;
* News section in artefactual.com&lt;br /&gt;
&lt;br /&gt;
== Update ansible roles ==&lt;br /&gt;
&lt;br /&gt;
Check that the deploy-pub vars files for archivematica are updated, and the ansible-ansiblematica-src and ansible-archivematica-pkg roles are able to deploy the new version&lt;br /&gt;
&lt;br /&gt;
== Tag Release ==&lt;br /&gt;
&lt;br /&gt;
# Add release tags to repositories&lt;br /&gt;
#* Archivematica&lt;br /&gt;
#* Storage Service&lt;br /&gt;
#* FPR-admin&lt;br /&gt;
#* appraisal tab&lt;br /&gt;
#* transfer browser&lt;br /&gt;
#* Others?&lt;br /&gt;
# Create stable/#.x branch&lt;br /&gt;
# Delete qa/#.x branch if necessary&lt;br /&gt;
&lt;br /&gt;
[[Category:Process documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=11786</id>
		<title>Release Process</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=11786"/>
		<updated>2017-03-30T23:35:18Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: /* agentarchives */ Packaging instructions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an outline/checklist of the process to create Archivematica &amp;amp; Storage service releases.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
# Merge new features&lt;br /&gt;
# Test new features&lt;br /&gt;
# [[#Update PRONOM]]&lt;br /&gt;
# Write documentation&lt;br /&gt;
# Update dependencies&lt;br /&gt;
# [[#Build deb/rpm packages]]&lt;br /&gt;
# Test packages for new installs and upgrades&lt;br /&gt;
# [[#Tag Release]]&lt;br /&gt;
# Update ansible roles&lt;br /&gt;
# Announce release&lt;br /&gt;
&lt;br /&gt;
== Update PRONOM ==&lt;br /&gt;
&lt;br /&gt;
PRONOM needs to be updated in our file identification tools, FIDO &amp;amp; Siegfried, as well as in the FPR.&lt;br /&gt;
&lt;br /&gt;
=== Update FIDO ===&lt;br /&gt;
&lt;br /&gt;
The FPR update currently use FIDO as a source for new PRONOM, since it is formatted nicer than PRONOM offers, so we depend on FIDO having updated their PRONOM.  If that has not happened, we can generate a new formats-v##.xml by updating signatures manually. Artefactual can also update PRONOM and submit a PR to FIDO.&lt;br /&gt;
&lt;br /&gt;
# Checkout fido from https://github.com/openpreserve/fido&lt;br /&gt;
# Update signatures&lt;br /&gt;
#* Run &amp;lt;code&amp;gt;python -m fido.update_signatures&amp;lt;/code&amp;gt; from the fido repository root&lt;br /&gt;
# Add:&lt;br /&gt;
#* New signature file &amp;lt;code&amp;gt;fido/conf/DROID_SignatureFile-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New formats file &amp;lt;code&amp;gt;fido/conf/formats-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New PRONOM zip file &amp;lt;code&amp;gt;fido/conf/pronom-xml-v##.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Updated &amp;lt;code&amp;gt;fido/conf/versions.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
# Remove:&lt;br /&gt;
#* Old signature file&lt;br /&gt;
#* Old formats file&lt;br /&gt;
#* Old PRONOM zip file&lt;br /&gt;
# Update &amp;lt;code&amp;gt;fido/fido.py&amp;lt;/code&amp;gt; to point to the new format_files&lt;br /&gt;
# Create pull request.  This may trigger a release from FIDO&lt;br /&gt;
&lt;br /&gt;
=== Package FIDO ===&lt;br /&gt;
&lt;br /&gt;
First, clone the [https://github.com/artefactual-labs/am-packbuild/  am-packbuild]  repo. The most recent work has been done in branch dev/packages-1.6-docker, and needs to be merged into main.&lt;br /&gt;
&lt;br /&gt;
Update the Makefiles available at &amp;lt;code&amp;gt;rpm/fido/Makefile&amp;lt;/code&amp;gt;, and  &amp;lt;code&amp;gt;deb/fido/Makefile&amp;lt;/code&amp;gt; , and run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in each directory to build the packages.&lt;br /&gt;
&lt;br /&gt;
=== Package Siegfried ===&lt;br /&gt;
&lt;br /&gt;
First, clone the [https://github.com/artefactual-labs/am-packbuild/  am-packbuild]  repo. The most recent work has been done in branch dev/packages-1.6-docker, and needs to be merged into main.&lt;br /&gt;
&lt;br /&gt;
Update the Makefiles available at &amp;lt;code&amp;gt;rpm/siegfried/Makefile&amp;lt;/code&amp;gt;, and  &amp;lt;code&amp;gt;deb/siegfried/Makefile&amp;lt;/code&amp;gt; , and run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in each directory to build the packages.&lt;br /&gt;
&lt;br /&gt;
=== Update FPR ===&lt;br /&gt;
&lt;br /&gt;
This process is currently more convoluted than it needs to be, and should be simplified.&lt;br /&gt;
&lt;br /&gt;
This depends on FIDO having updated their PRONOM files. See [[#Update FIDO]]&lt;br /&gt;
&lt;br /&gt;
# Install the latest stable Archivematica release&lt;br /&gt;
# Generate a JSON with the current version of the FPR (for use later)&lt;br /&gt;
#* &amp;lt;code&amp;gt;./src/dashboard/src/manage.py dumpdata fpr &amp;gt; fpr-current.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Install the latest development version of Archivematica&lt;br /&gt;
# Generate a blank data migration in the FPR-admin module&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;./src/dashboard/src/manage.py makemigrations --empty --name pronom_89 fpr&amp;lt;/code&amp;gt;&lt;br /&gt;
# Generate the FPR migration body.  This also updates the local database's FPR with the new PRONOM IDs&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;am import-pronom-ids fido/fido/conf/formats-v89.xml --output-filename archivematica/pronom89.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Copy the output into the blank migration, add RunPython operation&lt;br /&gt;
#* &amp;lt;code&amp;gt;migrations.RunPython(data_migration),&amp;lt;/code&amp;gt;&lt;br /&gt;
# Due to a [https://projects.artefactual.com/issues/10466#change-46673 bug], fix the imports&lt;br /&gt;
#* Remove the &amp;lt;code&amp;gt;apps.get_model&amp;lt;/code&amp;gt; lines&lt;br /&gt;
#* Import the models directly with &amp;lt;code&amp;gt;from fpr.models import Format, FormatVersion, IDRule&amp;lt;/code&amp;gt;&lt;br /&gt;
# Commit&lt;br /&gt;
# Deploy on testing pipeline&lt;br /&gt;
# (Analysts) Update the new entries&lt;br /&gt;
#* Move new formats to a more appropriate category&lt;br /&gt;
#* Create rules &amp;amp; commands&lt;br /&gt;
#* Test with data for new formats&lt;br /&gt;
# Generate a JSON with the updated version of the FPR on the testing pipeline&lt;br /&gt;
#* &amp;lt;code&amp;gt;./src/dashboard/src/manage.py dumpdata fpr &amp;gt; fpr-updated.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Get the updates as JSON&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;am get-fpr-changes fpr-current.json fpr-updated.json src/dashboard/src/fpr/migrations/pronom_89.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Update the migration to load the JSON updates&lt;br /&gt;
#* Replace the contents of the data migration function with&lt;br /&gt;
#** &amp;lt;code&amp;gt;fixture_file = os.path.join(os.path.dirname(__file__), 'pronom_89.json')&amp;lt;/code&amp;gt;&lt;br /&gt;
#** &amp;lt;code&amp;gt;call_command('loaddata', fixture_file, app_label='fpr')&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Remove the direct imports from the bug&lt;br /&gt;
#* Improvement Note: Because this is using loaddata, this will have problems if the FPR models are changed. A possible solution is to update get-fpr-changes to generate a migration instead of JSON&lt;br /&gt;
# Commit&lt;br /&gt;
# Merge&lt;br /&gt;
&lt;br /&gt;
== Update dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== metsrw ===&lt;br /&gt;
&lt;br /&gt;
# Check for open PRs, merge as necessary&lt;br /&gt;
# Update &amp;lt;code&amp;gt;setup.py&amp;lt;/code&amp;gt; with the new version, pull request, merge&lt;br /&gt;
# Tag new release, push tag&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make package&amp;lt;/code&amp;gt;&lt;br /&gt;
#* This will build the package and upload it to PyPI. It will prompt for your PyPI username and password for the upload&lt;br /&gt;
#* The Makefile was created from instructions at https://packaging.python.org/distributing/&lt;br /&gt;
# &amp;lt;code&amp;gt;make clean&amp;lt;/code&amp;gt; will delete packaging related files&lt;br /&gt;
&lt;br /&gt;
=== agentarchives ===&lt;br /&gt;
&lt;br /&gt;
# Check for open PRs, merge as necessary&lt;br /&gt;
# Update &amp;lt;code&amp;gt;setup.py&amp;lt;/code&amp;gt; with the new version, pull request, [[Merging | merge]].&lt;br /&gt;
# Tag new release, push tag&lt;br /&gt;
#* &amp;lt;code&amp;gt;git push --tags&amp;lt;/code&amp;gt;&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make package&amp;lt;/code&amp;gt;&lt;br /&gt;
#* This will build the package and upload it to PyPI. It will prompt for your PyPI username and password for the upload&lt;br /&gt;
#* The Makefile was created from instructions at https://packaging.python.org/distributing/&lt;br /&gt;
# &amp;lt;code&amp;gt;make clean&amp;lt;/code&amp;gt; will delete packaging related files&lt;br /&gt;
&lt;br /&gt;
== Build deb/rpm packages ==&lt;br /&gt;
&lt;br /&gt;
The am-packbuild repository has all the code related to building packages, except the building gpg keys. The steps to follow in order to build production production packages are as follow&lt;br /&gt;
&lt;br /&gt;
=== Debian packages ===&lt;br /&gt;
&lt;br /&gt;
# Clone the [https://github.com/artefactual-labs/am-packbuild am-packbuild] repo. Latest work is available in dev/packages-1.6-docker&lt;br /&gt;
# Put your gpg private key into &amp;lt;code&amp;gt;debs/GPG-KEYS-REPOS&amp;lt;/code&amp;gt;. That's the place the Dockerfile looks for it when building the environment.&lt;br /&gt;
# Update the makefile at &amp;lt;code&amp;gt;debs/archivematica/Makefile&amp;lt;/code&amp;gt; in order to reflect version/keys you want to use. If you want to build the storage service, you need also to change the packbuild.py line to reflect that (TODO: create service-storage package folder)&lt;br /&gt;
This dockerfile uses packbuild.py  script, whose function is downloadig the code from github, creating a debian/changelog file for each ubuntu version with the expected version name and description of last commit included, and build the package aftewards. It can be run on their own too, without the need of a docker environment.&lt;br /&gt;
# Run &amp;lt;make&amp;gt;, and the packages will be available in the &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; once the building finishes.&lt;br /&gt;
# Upload packages to public debian repository&lt;br /&gt;
&lt;br /&gt;
=== Debian reposities ===&lt;br /&gt;
&lt;br /&gt;
There are two debian repositories, one for archivematica packages, and one for dependencies. The procedure in order to create new ones, or upload packages to them, is the same:&lt;br /&gt;
&lt;br /&gt;
#* Create folder for repo, and configuration file:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
mkdir -p /path/to/repos/repo/conf&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /path/to/repos/repo/conf/distributions &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
Codename: trusty&lt;br /&gt;
&lt;br /&gt;
Components: main&lt;br /&gt;
&lt;br /&gt;
Architectures: amd64 source&lt;br /&gt;
&lt;br /&gt;
SignWith: &amp;lt;short gpg keyid&amp;gt; &lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#* Go inside the repo, and import the packages previously uploaded with:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd /path/to/repos/repo/&lt;br /&gt;
&lt;br /&gt;
reprepro includedeb trusty /path/to/packages/*.deb&lt;br /&gt;
&lt;br /&gt;
reprepro includedsc trusty /path/to/packages/*.deb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The current official repo is at packages.archivematica.org&lt;br /&gt;
&lt;br /&gt;
=== RPM Packages ===&lt;br /&gt;
&lt;br /&gt;
# Package specs are available in [https://github.com/artefactual-labs/am-packbuild/tree/dev/packaging-1.6-docker/rpm am-packbuild/rpms]&lt;br /&gt;
# There are vars in the Makefiles for version/release , so update them when needed&lt;br /&gt;
# In order to build them, just go into the directory you want to build, and run “make”&lt;br /&gt;
&lt;br /&gt;
=== RPM Repositories ===&lt;br /&gt;
&lt;br /&gt;
Once the packages are built, upload them to packages.archivematica.org/&amp;lt;version&amp;gt;/centos&lt;br /&gt;
Go inside that dir, and run “createrepo .” (For packages other than archivematica , use  “centos-extras” repository)&lt;br /&gt;
&lt;br /&gt;
== Website ==&lt;br /&gt;
&lt;br /&gt;
'''Needs to be improved!'''&lt;br /&gt;
&lt;br /&gt;
==== Homepage ====&lt;br /&gt;
&lt;br /&gt;
* Make changes in archivematica-web.git&lt;br /&gt;
** Update links&lt;br /&gt;
** Add new doc repos&lt;br /&gt;
* Deploy&lt;br /&gt;
** Log in sites-pub as archivematica-web and run update-web.sh&lt;br /&gt;
&lt;br /&gt;
==== Documentation ====&lt;br /&gt;
&lt;br /&gt;
* Deploy&lt;br /&gt;
** Log in sites-pub as archivematica-web and run update-docs.sh&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
&lt;br /&gt;
* Release notes&lt;br /&gt;
* Installation notes&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== News ==&lt;br /&gt;
&lt;br /&gt;
* Twitter&lt;br /&gt;
* Mailing list&lt;br /&gt;
* News section in artefactual.com&lt;br /&gt;
&lt;br /&gt;
== Update ansible roles ==&lt;br /&gt;
&lt;br /&gt;
Check that the deploy-pub vars files for archivematica are updated, and the ansible-ansiblematica-src and ansible-archivematica-pkg roles are able to deploy the new version&lt;br /&gt;
&lt;br /&gt;
== Tag Release ==&lt;br /&gt;
&lt;br /&gt;
# Add release tags to repositories&lt;br /&gt;
#* Archivematica&lt;br /&gt;
#* Storage Service&lt;br /&gt;
#* FPR-admin&lt;br /&gt;
#* appraisal tab&lt;br /&gt;
#* transfer browser&lt;br /&gt;
#* Others?&lt;br /&gt;
# Create stable/#.x branch&lt;br /&gt;
# Delete qa/#.x branch if necessary&lt;br /&gt;
&lt;br /&gt;
[[Category:Process documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=11785</id>
		<title>Release Process</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=11785"/>
		<updated>2017-03-30T23:31:02Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: /* metsrw */ Add packaging instructions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an outline/checklist of the process to create Archivematica &amp;amp; Storage service releases.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
# Merge new features&lt;br /&gt;
# Test new features&lt;br /&gt;
# [[#Update PRONOM]]&lt;br /&gt;
# Write documentation&lt;br /&gt;
# Update dependencies&lt;br /&gt;
# [[#Build deb/rpm packages]]&lt;br /&gt;
# Test packages for new installs and upgrades&lt;br /&gt;
# [[#Tag Release]]&lt;br /&gt;
# Update ansible roles&lt;br /&gt;
# Announce release&lt;br /&gt;
&lt;br /&gt;
== Update PRONOM ==&lt;br /&gt;
&lt;br /&gt;
PRONOM needs to be updated in our file identification tools, FIDO &amp;amp; Siegfried, as well as in the FPR.&lt;br /&gt;
&lt;br /&gt;
=== Update FIDO ===&lt;br /&gt;
&lt;br /&gt;
The FPR update currently use FIDO as a source for new PRONOM, since it is formatted nicer than PRONOM offers, so we depend on FIDO having updated their PRONOM.  If that has not happened, we can generate a new formats-v##.xml by updating signatures manually. Artefactual can also update PRONOM and submit a PR to FIDO.&lt;br /&gt;
&lt;br /&gt;
# Checkout fido from https://github.com/openpreserve/fido&lt;br /&gt;
# Update signatures&lt;br /&gt;
#* Run &amp;lt;code&amp;gt;python -m fido.update_signatures&amp;lt;/code&amp;gt; from the fido repository root&lt;br /&gt;
# Add:&lt;br /&gt;
#* New signature file &amp;lt;code&amp;gt;fido/conf/DROID_SignatureFile-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New formats file &amp;lt;code&amp;gt;fido/conf/formats-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New PRONOM zip file &amp;lt;code&amp;gt;fido/conf/pronom-xml-v##.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Updated &amp;lt;code&amp;gt;fido/conf/versions.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
# Remove:&lt;br /&gt;
#* Old signature file&lt;br /&gt;
#* Old formats file&lt;br /&gt;
#* Old PRONOM zip file&lt;br /&gt;
# Update &amp;lt;code&amp;gt;fido/fido.py&amp;lt;/code&amp;gt; to point to the new format_files&lt;br /&gt;
# Create pull request.  This may trigger a release from FIDO&lt;br /&gt;
&lt;br /&gt;
=== Package FIDO ===&lt;br /&gt;
&lt;br /&gt;
First, clone the [https://github.com/artefactual-labs/am-packbuild/  am-packbuild]  repo. The most recent work has been done in branch dev/packages-1.6-docker, and needs to be merged into main.&lt;br /&gt;
&lt;br /&gt;
Update the Makefiles available at &amp;lt;code&amp;gt;rpm/fido/Makefile&amp;lt;/code&amp;gt;, and  &amp;lt;code&amp;gt;deb/fido/Makefile&amp;lt;/code&amp;gt; , and run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in each directory to build the packages.&lt;br /&gt;
&lt;br /&gt;
=== Package Siegfried ===&lt;br /&gt;
&lt;br /&gt;
First, clone the [https://github.com/artefactual-labs/am-packbuild/  am-packbuild]  repo. The most recent work has been done in branch dev/packages-1.6-docker, and needs to be merged into main.&lt;br /&gt;
&lt;br /&gt;
Update the Makefiles available at &amp;lt;code&amp;gt;rpm/siegfried/Makefile&amp;lt;/code&amp;gt;, and  &amp;lt;code&amp;gt;deb/siegfried/Makefile&amp;lt;/code&amp;gt; , and run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in each directory to build the packages.&lt;br /&gt;
&lt;br /&gt;
=== Update FPR ===&lt;br /&gt;
&lt;br /&gt;
This process is currently more convoluted than it needs to be, and should be simplified.&lt;br /&gt;
&lt;br /&gt;
This depends on FIDO having updated their PRONOM files. See [[#Update FIDO]]&lt;br /&gt;
&lt;br /&gt;
# Install the latest stable Archivematica release&lt;br /&gt;
# Generate a JSON with the current version of the FPR (for use later)&lt;br /&gt;
#* &amp;lt;code&amp;gt;./src/dashboard/src/manage.py dumpdata fpr &amp;gt; fpr-current.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Install the latest development version of Archivematica&lt;br /&gt;
# Generate a blank data migration in the FPR-admin module&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;./src/dashboard/src/manage.py makemigrations --empty --name pronom_89 fpr&amp;lt;/code&amp;gt;&lt;br /&gt;
# Generate the FPR migration body.  This also updates the local database's FPR with the new PRONOM IDs&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;am import-pronom-ids fido/fido/conf/formats-v89.xml --output-filename archivematica/pronom89.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Copy the output into the blank migration, add RunPython operation&lt;br /&gt;
#* &amp;lt;code&amp;gt;migrations.RunPython(data_migration),&amp;lt;/code&amp;gt;&lt;br /&gt;
# Due to a [https://projects.artefactual.com/issues/10466#change-46673 bug], fix the imports&lt;br /&gt;
#* Remove the &amp;lt;code&amp;gt;apps.get_model&amp;lt;/code&amp;gt; lines&lt;br /&gt;
#* Import the models directly with &amp;lt;code&amp;gt;from fpr.models import Format, FormatVersion, IDRule&amp;lt;/code&amp;gt;&lt;br /&gt;
# Commit&lt;br /&gt;
# Deploy on testing pipeline&lt;br /&gt;
# (Analysts) Update the new entries&lt;br /&gt;
#* Move new formats to a more appropriate category&lt;br /&gt;
#* Create rules &amp;amp; commands&lt;br /&gt;
#* Test with data for new formats&lt;br /&gt;
# Generate a JSON with the updated version of the FPR on the testing pipeline&lt;br /&gt;
#* &amp;lt;code&amp;gt;./src/dashboard/src/manage.py dumpdata fpr &amp;gt; fpr-updated.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Get the updates as JSON&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;am get-fpr-changes fpr-current.json fpr-updated.json src/dashboard/src/fpr/migrations/pronom_89.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Update the migration to load the JSON updates&lt;br /&gt;
#* Replace the contents of the data migration function with&lt;br /&gt;
#** &amp;lt;code&amp;gt;fixture_file = os.path.join(os.path.dirname(__file__), 'pronom_89.json')&amp;lt;/code&amp;gt;&lt;br /&gt;
#** &amp;lt;code&amp;gt;call_command('loaddata', fixture_file, app_label='fpr')&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Remove the direct imports from the bug&lt;br /&gt;
#* Improvement Note: Because this is using loaddata, this will have problems if the FPR models are changed. A possible solution is to update get-fpr-changes to generate a migration instead of JSON&lt;br /&gt;
# Commit&lt;br /&gt;
# Merge&lt;br /&gt;
&lt;br /&gt;
== Update dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== metsrw ===&lt;br /&gt;
&lt;br /&gt;
# Check for open PRs, merge as necessary&lt;br /&gt;
# Update &amp;lt;code&amp;gt;setup.py&amp;lt;/code&amp;gt; with the new version, pull request, merge&lt;br /&gt;
# Tag new release, push tag&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make package&amp;lt;/code&amp;gt;&lt;br /&gt;
#* This will build the package and upload it to PyPI. It will prompt for your PyPI username and password for the upload&lt;br /&gt;
#* The Makefile was created from instructions at https://packaging.python.org/distributing/&lt;br /&gt;
# &amp;lt;code&amp;gt;make clean&amp;lt;/code&amp;gt; will delete packaging related files&lt;br /&gt;
&lt;br /&gt;
=== agentarchives ===&lt;br /&gt;
&lt;br /&gt;
== Build deb/rpm packages ==&lt;br /&gt;
&lt;br /&gt;
The am-packbuild repository has all the code related to building packages, except the building gpg keys. The steps to follow in order to build production production packages are as follow&lt;br /&gt;
&lt;br /&gt;
=== Debian packages ===&lt;br /&gt;
&lt;br /&gt;
# Clone the [https://github.com/artefactual-labs/am-packbuild am-packbuild] repo. Latest work is available in dev/packages-1.6-docker&lt;br /&gt;
# Put your gpg private key into &amp;lt;code&amp;gt;debs/GPG-KEYS-REPOS&amp;lt;/code&amp;gt;. That's the place the Dockerfile looks for it when building the environment.&lt;br /&gt;
# Update the makefile at &amp;lt;code&amp;gt;debs/archivematica/Makefile&amp;lt;/code&amp;gt; in order to reflect version/keys you want to use. If you want to build the storage service, you need also to change the packbuild.py line to reflect that (TODO: create service-storage package folder)&lt;br /&gt;
This dockerfile uses packbuild.py  script, whose function is downloadig the code from github, creating a debian/changelog file for each ubuntu version with the expected version name and description of last commit included, and build the package aftewards. It can be run on their own too, without the need of a docker environment.&lt;br /&gt;
# Run &amp;lt;make&amp;gt;, and the packages will be available in the &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; once the building finishes.&lt;br /&gt;
# Upload packages to public debian repository&lt;br /&gt;
&lt;br /&gt;
=== Debian reposities ===&lt;br /&gt;
&lt;br /&gt;
There are two debian repositories, one for archivematica packages, and one for dependencies. The procedure in order to create new ones, or upload packages to them, is the same:&lt;br /&gt;
&lt;br /&gt;
#* Create folder for repo, and configuration file:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
mkdir -p /path/to/repos/repo/conf&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /path/to/repos/repo/conf/distributions &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
Codename: trusty&lt;br /&gt;
&lt;br /&gt;
Components: main&lt;br /&gt;
&lt;br /&gt;
Architectures: amd64 source&lt;br /&gt;
&lt;br /&gt;
SignWith: &amp;lt;short gpg keyid&amp;gt; &lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#* Go inside the repo, and import the packages previously uploaded with:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd /path/to/repos/repo/&lt;br /&gt;
&lt;br /&gt;
reprepro includedeb trusty /path/to/packages/*.deb&lt;br /&gt;
&lt;br /&gt;
reprepro includedsc trusty /path/to/packages/*.deb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The current official repo is at packages.archivematica.org&lt;br /&gt;
&lt;br /&gt;
=== RPM Packages ===&lt;br /&gt;
&lt;br /&gt;
# Package specs are available in [https://github.com/artefactual-labs/am-packbuild/tree/dev/packaging-1.6-docker/rpm am-packbuild/rpms]&lt;br /&gt;
# There are vars in the Makefiles for version/release , so update them when needed&lt;br /&gt;
# In order to build them, just go into the directory you want to build, and run “make”&lt;br /&gt;
&lt;br /&gt;
=== RPM Repositories ===&lt;br /&gt;
&lt;br /&gt;
Once the packages are built, upload them to packages.archivematica.org/&amp;lt;version&amp;gt;/centos&lt;br /&gt;
Go inside that dir, and run “createrepo .” (For packages other than archivematica , use  “centos-extras” repository)&lt;br /&gt;
&lt;br /&gt;
== Website ==&lt;br /&gt;
&lt;br /&gt;
'''Needs to be improved!'''&lt;br /&gt;
&lt;br /&gt;
==== Homepage ====&lt;br /&gt;
&lt;br /&gt;
* Make changes in archivematica-web.git&lt;br /&gt;
** Update links&lt;br /&gt;
** Add new doc repos&lt;br /&gt;
* Deploy&lt;br /&gt;
** Log in sites-pub as archivematica-web and run update-web.sh&lt;br /&gt;
&lt;br /&gt;
==== Documentation ====&lt;br /&gt;
&lt;br /&gt;
* Deploy&lt;br /&gt;
** Log in sites-pub as archivematica-web and run update-docs.sh&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
&lt;br /&gt;
* Release notes&lt;br /&gt;
* Installation notes&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== News ==&lt;br /&gt;
&lt;br /&gt;
* Twitter&lt;br /&gt;
* Mailing list&lt;br /&gt;
* News section in artefactual.com&lt;br /&gt;
&lt;br /&gt;
== Update ansible roles ==&lt;br /&gt;
&lt;br /&gt;
Check that the deploy-pub vars files for archivematica are updated, and the ansible-ansiblematica-src and ansible-archivematica-pkg roles are able to deploy the new version&lt;br /&gt;
&lt;br /&gt;
== Tag Release ==&lt;br /&gt;
&lt;br /&gt;
# Add release tags to repositories&lt;br /&gt;
#* Archivematica&lt;br /&gt;
#* Storage Service&lt;br /&gt;
#* FPR-admin&lt;br /&gt;
#* appraisal tab&lt;br /&gt;
#* transfer browser&lt;br /&gt;
#* Others?&lt;br /&gt;
# Create stable/#.x branch&lt;br /&gt;
# Delete qa/#.x branch if necessary&lt;br /&gt;
&lt;br /&gt;
[[Category:Process documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=11784</id>
		<title>Release Process</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=11784"/>
		<updated>2017-03-30T22:08:34Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Stub dependencies section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an outline/checklist of the process to create Archivematica &amp;amp; Storage service releases.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
# Merge new features&lt;br /&gt;
# Test new features&lt;br /&gt;
# [[#Update PRONOM]]&lt;br /&gt;
# Write documentation&lt;br /&gt;
# Update dependencies&lt;br /&gt;
# [[#Build deb/rpm packages]]&lt;br /&gt;
# Test packages for new installs and upgrades&lt;br /&gt;
# [[#Tag Release]]&lt;br /&gt;
# Update ansible roles&lt;br /&gt;
# Announce release&lt;br /&gt;
&lt;br /&gt;
== Update PRONOM ==&lt;br /&gt;
&lt;br /&gt;
PRONOM needs to be updated in our file identification tools, FIDO &amp;amp; Siegfried, as well as in the FPR.&lt;br /&gt;
&lt;br /&gt;
=== Update FIDO ===&lt;br /&gt;
&lt;br /&gt;
The FPR update currently use FIDO as a source for new PRONOM, since it is formatted nicer than PRONOM offers, so we depend on FIDO having updated their PRONOM.  If that has not happened, we can generate a new formats-v##.xml by updating signatures manually. Artefactual can also update PRONOM and submit a PR to FIDO.&lt;br /&gt;
&lt;br /&gt;
# Checkout fido from https://github.com/openpreserve/fido&lt;br /&gt;
# Update signatures&lt;br /&gt;
#* Run &amp;lt;code&amp;gt;python -m fido.update_signatures&amp;lt;/code&amp;gt; from the fido repository root&lt;br /&gt;
# Add:&lt;br /&gt;
#* New signature file &amp;lt;code&amp;gt;fido/conf/DROID_SignatureFile-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New formats file &amp;lt;code&amp;gt;fido/conf/formats-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New PRONOM zip file &amp;lt;code&amp;gt;fido/conf/pronom-xml-v##.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Updated &amp;lt;code&amp;gt;fido/conf/versions.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
# Remove:&lt;br /&gt;
#* Old signature file&lt;br /&gt;
#* Old formats file&lt;br /&gt;
#* Old PRONOM zip file&lt;br /&gt;
# Update &amp;lt;code&amp;gt;fido/fido.py&amp;lt;/code&amp;gt; to point to the new format_files&lt;br /&gt;
# Create pull request.  This may trigger a release from FIDO&lt;br /&gt;
&lt;br /&gt;
=== Package FIDO ===&lt;br /&gt;
&lt;br /&gt;
First, clone the [https://github.com/artefactual-labs/am-packbuild/  am-packbuild]  repo. The most recent work has been done in branch dev/packages-1.6-docker, and needs to be merged into main.&lt;br /&gt;
&lt;br /&gt;
Update the Makefiles available at &amp;lt;code&amp;gt;rpm/fido/Makefile&amp;lt;/code&amp;gt;, and  &amp;lt;code&amp;gt;deb/fido/Makefile&amp;lt;/code&amp;gt; , and run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in each directory to build the packages.&lt;br /&gt;
&lt;br /&gt;
=== Package Siegfried ===&lt;br /&gt;
&lt;br /&gt;
First, clone the [https://github.com/artefactual-labs/am-packbuild/  am-packbuild]  repo. The most recent work has been done in branch dev/packages-1.6-docker, and needs to be merged into main.&lt;br /&gt;
&lt;br /&gt;
Update the Makefiles available at &amp;lt;code&amp;gt;rpm/siegfried/Makefile&amp;lt;/code&amp;gt;, and  &amp;lt;code&amp;gt;deb/siegfried/Makefile&amp;lt;/code&amp;gt; , and run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in each directory to build the packages.&lt;br /&gt;
&lt;br /&gt;
=== Update FPR ===&lt;br /&gt;
&lt;br /&gt;
This process is currently more convoluted than it needs to be, and should be simplified.&lt;br /&gt;
&lt;br /&gt;
This depends on FIDO having updated their PRONOM files. See [[#Update FIDO]]&lt;br /&gt;
&lt;br /&gt;
# Install the latest stable Archivematica release&lt;br /&gt;
# Generate a JSON with the current version of the FPR (for use later)&lt;br /&gt;
#* &amp;lt;code&amp;gt;./src/dashboard/src/manage.py dumpdata fpr &amp;gt; fpr-current.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Install the latest development version of Archivematica&lt;br /&gt;
# Generate a blank data migration in the FPR-admin module&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;./src/dashboard/src/manage.py makemigrations --empty --name pronom_89 fpr&amp;lt;/code&amp;gt;&lt;br /&gt;
# Generate the FPR migration body.  This also updates the local database's FPR with the new PRONOM IDs&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;am import-pronom-ids fido/fido/conf/formats-v89.xml --output-filename archivematica/pronom89.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Copy the output into the blank migration, add RunPython operation&lt;br /&gt;
#* &amp;lt;code&amp;gt;migrations.RunPython(data_migration),&amp;lt;/code&amp;gt;&lt;br /&gt;
# Due to a [https://projects.artefactual.com/issues/10466#change-46673 bug], fix the imports&lt;br /&gt;
#* Remove the &amp;lt;code&amp;gt;apps.get_model&amp;lt;/code&amp;gt; lines&lt;br /&gt;
#* Import the models directly with &amp;lt;code&amp;gt;from fpr.models import Format, FormatVersion, IDRule&amp;lt;/code&amp;gt;&lt;br /&gt;
# Commit&lt;br /&gt;
# Deploy on testing pipeline&lt;br /&gt;
# (Analysts) Update the new entries&lt;br /&gt;
#* Move new formats to a more appropriate category&lt;br /&gt;
#* Create rules &amp;amp; commands&lt;br /&gt;
#* Test with data for new formats&lt;br /&gt;
# Generate a JSON with the updated version of the FPR on the testing pipeline&lt;br /&gt;
#* &amp;lt;code&amp;gt;./src/dashboard/src/manage.py dumpdata fpr &amp;gt; fpr-updated.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Get the updates as JSON&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;am get-fpr-changes fpr-current.json fpr-updated.json src/dashboard/src/fpr/migrations/pronom_89.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Update the migration to load the JSON updates&lt;br /&gt;
#* Replace the contents of the data migration function with&lt;br /&gt;
#** &amp;lt;code&amp;gt;fixture_file = os.path.join(os.path.dirname(__file__), 'pronom_89.json')&amp;lt;/code&amp;gt;&lt;br /&gt;
#** &amp;lt;code&amp;gt;call_command('loaddata', fixture_file, app_label='fpr')&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Remove the direct imports from the bug&lt;br /&gt;
#* Improvement Note: Because this is using loaddata, this will have problems if the FPR models are changed. A possible solution is to update get-fpr-changes to generate a migration instead of JSON&lt;br /&gt;
# Commit&lt;br /&gt;
# Merge&lt;br /&gt;
&lt;br /&gt;
== Update dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== metsrw ===&lt;br /&gt;
&lt;br /&gt;
=== agentarchives ===&lt;br /&gt;
&lt;br /&gt;
== Build deb/rpm packages ==&lt;br /&gt;
&lt;br /&gt;
The am-packbuild repository has all the code related to building packages, except the building gpg keys. The steps to follow in order to build production production packages are as follow&lt;br /&gt;
&lt;br /&gt;
=== Debian packages ===&lt;br /&gt;
&lt;br /&gt;
# Clone the [https://github.com/artefactual-labs/am-packbuild am-packbuild] repo. Latest work is available in dev/packages-1.6-docker&lt;br /&gt;
# Put your gpg private key into &amp;lt;code&amp;gt;debs/GPG-KEYS-REPOS&amp;lt;/code&amp;gt;. That's the place the Dockerfile looks for it when building the environment.&lt;br /&gt;
# Update the makefile at &amp;lt;code&amp;gt;debs/archivematica/Makefile&amp;lt;/code&amp;gt; in order to reflect version/keys you want to use. If you want to build the storage service, you need also to change the packbuild.py line to reflect that (TODO: create service-storage package folder)&lt;br /&gt;
This dockerfile uses packbuild.py  script, whose function is downloadig the code from github, creating a debian/changelog file for each ubuntu version with the expected version name and description of last commit included, and build the package aftewards. It can be run on their own too, without the need of a docker environment.&lt;br /&gt;
# Run &amp;lt;make&amp;gt;, and the packages will be available in the &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; once the building finishes.&lt;br /&gt;
# Upload packages to public debian repository&lt;br /&gt;
&lt;br /&gt;
=== Debian reposities ===&lt;br /&gt;
&lt;br /&gt;
There are two debian repositories, one for archivematica packages, and one for dependencies. The procedure in order to create new ones, or upload packages to them, is the same:&lt;br /&gt;
&lt;br /&gt;
#* Create folder for repo, and configuration file:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
mkdir -p /path/to/repos/repo/conf&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /path/to/repos/repo/conf/distributions &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
Codename: trusty&lt;br /&gt;
&lt;br /&gt;
Components: main&lt;br /&gt;
&lt;br /&gt;
Architectures: amd64 source&lt;br /&gt;
&lt;br /&gt;
SignWith: &amp;lt;short gpg keyid&amp;gt; &lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#* Go inside the repo, and import the packages previously uploaded with:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd /path/to/repos/repo/&lt;br /&gt;
&lt;br /&gt;
reprepro includedeb trusty /path/to/packages/*.deb&lt;br /&gt;
&lt;br /&gt;
reprepro includedsc trusty /path/to/packages/*.deb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The current official repo is at packages.archivematica.org&lt;br /&gt;
&lt;br /&gt;
=== RPM Packages ===&lt;br /&gt;
&lt;br /&gt;
# Package specs are available in [https://github.com/artefactual-labs/am-packbuild/tree/dev/packaging-1.6-docker/rpm am-packbuild/rpms]&lt;br /&gt;
# There are vars in the Makefiles for version/release , so update them when needed&lt;br /&gt;
# In order to build them, just go into the directory you want to build, and run “make”&lt;br /&gt;
&lt;br /&gt;
=== RPM Repositories ===&lt;br /&gt;
&lt;br /&gt;
Once the packages are built, upload them to packages.archivematica.org/&amp;lt;version&amp;gt;/centos&lt;br /&gt;
Go inside that dir, and run “createrepo .” (For packages other than archivematica , use  “centos-extras” repository)&lt;br /&gt;
&lt;br /&gt;
== Website ==&lt;br /&gt;
&lt;br /&gt;
'''Needs to be improved!'''&lt;br /&gt;
&lt;br /&gt;
==== Homepage ====&lt;br /&gt;
&lt;br /&gt;
* Make changes in archivematica-web.git&lt;br /&gt;
** Update links&lt;br /&gt;
** Add new doc repos&lt;br /&gt;
* Deploy&lt;br /&gt;
** Log in sites-pub as archivematica-web and run update-web.sh&lt;br /&gt;
&lt;br /&gt;
==== Documentation ====&lt;br /&gt;
&lt;br /&gt;
* Deploy&lt;br /&gt;
** Log in sites-pub as archivematica-web and run update-docs.sh&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
&lt;br /&gt;
* Release notes&lt;br /&gt;
* Installation notes&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== News ==&lt;br /&gt;
&lt;br /&gt;
* Twitter&lt;br /&gt;
* Mailing list&lt;br /&gt;
* News section in artefactual.com&lt;br /&gt;
&lt;br /&gt;
== Update ansible roles ==&lt;br /&gt;
&lt;br /&gt;
Check that the deploy-pub vars files for archivematica are updated, and the ansible-ansiblematica-src and ansible-archivematica-pkg roles are able to deploy the new version&lt;br /&gt;
&lt;br /&gt;
== Tag Release ==&lt;br /&gt;
&lt;br /&gt;
# Add release tags to repositories&lt;br /&gt;
#* Archivematica&lt;br /&gt;
#* Storage Service&lt;br /&gt;
#* FPR-admin&lt;br /&gt;
#* appraisal tab&lt;br /&gt;
#* transfer browser&lt;br /&gt;
#* Others?&lt;br /&gt;
# Create stable/#.x branch&lt;br /&gt;
# Delete qa/#.x branch if necessary&lt;br /&gt;
&lt;br /&gt;
[[Category:Process documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=11783</id>
		<title>Release Process</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=11783"/>
		<updated>2017-03-30T22:07:52Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: /* Overview */ Add dependencies&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an outline/checklist of the process to create Archivematica &amp;amp; Storage service releases.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
# Merge new features&lt;br /&gt;
# Test new features&lt;br /&gt;
# [[#Update PRONOM]]&lt;br /&gt;
# Write documentation&lt;br /&gt;
# Update dependencies&lt;br /&gt;
# [[#Build deb/rpm packages]]&lt;br /&gt;
# Test packages for new installs and upgrades&lt;br /&gt;
# [[#Tag Release]]&lt;br /&gt;
# Update ansible roles&lt;br /&gt;
# Announce release&lt;br /&gt;
&lt;br /&gt;
== Update PRONOM ==&lt;br /&gt;
&lt;br /&gt;
PRONOM needs to be updated in our file identification tools, FIDO &amp;amp; Siegfried, as well as in the FPR.&lt;br /&gt;
&lt;br /&gt;
=== Update FIDO ===&lt;br /&gt;
&lt;br /&gt;
The FPR update currently use FIDO as a source for new PRONOM, since it is formatted nicer than PRONOM offers, so we depend on FIDO having updated their PRONOM.  If that has not happened, we can generate a new formats-v##.xml by updating signatures manually. Artefactual can also update PRONOM and submit a PR to FIDO.&lt;br /&gt;
&lt;br /&gt;
# Checkout fido from https://github.com/openpreserve/fido&lt;br /&gt;
# Update signatures&lt;br /&gt;
#* Run &amp;lt;code&amp;gt;python -m fido.update_signatures&amp;lt;/code&amp;gt; from the fido repository root&lt;br /&gt;
# Add:&lt;br /&gt;
#* New signature file &amp;lt;code&amp;gt;fido/conf/DROID_SignatureFile-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New formats file &amp;lt;code&amp;gt;fido/conf/formats-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New PRONOM zip file &amp;lt;code&amp;gt;fido/conf/pronom-xml-v##.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Updated &amp;lt;code&amp;gt;fido/conf/versions.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
# Remove:&lt;br /&gt;
#* Old signature file&lt;br /&gt;
#* Old formats file&lt;br /&gt;
#* Old PRONOM zip file&lt;br /&gt;
# Update &amp;lt;code&amp;gt;fido/fido.py&amp;lt;/code&amp;gt; to point to the new format_files&lt;br /&gt;
# Create pull request.  This may trigger a release from FIDO&lt;br /&gt;
&lt;br /&gt;
=== Package FIDO ===&lt;br /&gt;
&lt;br /&gt;
First, clone the [https://github.com/artefactual-labs/am-packbuild/  am-packbuild]  repo. The most recent work has been done in branch dev/packages-1.6-docker, and needs to be merged into main.&lt;br /&gt;
&lt;br /&gt;
Update the Makefiles available at &amp;lt;code&amp;gt;rpm/fido/Makefile&amp;lt;/code&amp;gt;, and  &amp;lt;code&amp;gt;deb/fido/Makefile&amp;lt;/code&amp;gt; , and run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in each directory to build the packages.&lt;br /&gt;
&lt;br /&gt;
=== Package Siegfried ===&lt;br /&gt;
&lt;br /&gt;
First, clone the [https://github.com/artefactual-labs/am-packbuild/  am-packbuild]  repo. The most recent work has been done in branch dev/packages-1.6-docker, and needs to be merged into main.&lt;br /&gt;
&lt;br /&gt;
Update the Makefiles available at &amp;lt;code&amp;gt;rpm/siegfried/Makefile&amp;lt;/code&amp;gt;, and  &amp;lt;code&amp;gt;deb/siegfried/Makefile&amp;lt;/code&amp;gt; , and run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in each directory to build the packages.&lt;br /&gt;
&lt;br /&gt;
=== Update FPR ===&lt;br /&gt;
&lt;br /&gt;
This process is currently more convoluted than it needs to be, and should be simplified.&lt;br /&gt;
&lt;br /&gt;
This depends on FIDO having updated their PRONOM files. See [[#Update FIDO]]&lt;br /&gt;
&lt;br /&gt;
# Install the latest stable Archivematica release&lt;br /&gt;
# Generate a JSON with the current version of the FPR (for use later)&lt;br /&gt;
#* &amp;lt;code&amp;gt;./src/dashboard/src/manage.py dumpdata fpr &amp;gt; fpr-current.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Install the latest development version of Archivematica&lt;br /&gt;
# Generate a blank data migration in the FPR-admin module&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;./src/dashboard/src/manage.py makemigrations --empty --name pronom_89 fpr&amp;lt;/code&amp;gt;&lt;br /&gt;
# Generate the FPR migration body.  This also updates the local database's FPR with the new PRONOM IDs&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;am import-pronom-ids fido/fido/conf/formats-v89.xml --output-filename archivematica/pronom89.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Copy the output into the blank migration, add RunPython operation&lt;br /&gt;
#* &amp;lt;code&amp;gt;migrations.RunPython(data_migration),&amp;lt;/code&amp;gt;&lt;br /&gt;
# Due to a [https://projects.artefactual.com/issues/10466#change-46673 bug], fix the imports&lt;br /&gt;
#* Remove the &amp;lt;code&amp;gt;apps.get_model&amp;lt;/code&amp;gt; lines&lt;br /&gt;
#* Import the models directly with &amp;lt;code&amp;gt;from fpr.models import Format, FormatVersion, IDRule&amp;lt;/code&amp;gt;&lt;br /&gt;
# Commit&lt;br /&gt;
# Deploy on testing pipeline&lt;br /&gt;
# (Analysts) Update the new entries&lt;br /&gt;
#* Move new formats to a more appropriate category&lt;br /&gt;
#* Create rules &amp;amp; commands&lt;br /&gt;
#* Test with data for new formats&lt;br /&gt;
# Generate a JSON with the updated version of the FPR on the testing pipeline&lt;br /&gt;
#* &amp;lt;code&amp;gt;./src/dashboard/src/manage.py dumpdata fpr &amp;gt; fpr-updated.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Get the updates as JSON&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;am get-fpr-changes fpr-current.json fpr-updated.json src/dashboard/src/fpr/migrations/pronom_89.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Update the migration to load the JSON updates&lt;br /&gt;
#* Replace the contents of the data migration function with&lt;br /&gt;
#** &amp;lt;code&amp;gt;fixture_file = os.path.join(os.path.dirname(__file__), 'pronom_89.json')&amp;lt;/code&amp;gt;&lt;br /&gt;
#** &amp;lt;code&amp;gt;call_command('loaddata', fixture_file, app_label='fpr')&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Remove the direct imports from the bug&lt;br /&gt;
#* Improvement Note: Because this is using loaddata, this will have problems if the FPR models are changed. A possible solution is to update get-fpr-changes to generate a migration instead of JSON&lt;br /&gt;
# Commit&lt;br /&gt;
# Merge&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build deb/rpm packages ==&lt;br /&gt;
&lt;br /&gt;
The am-packbuild repository has all the code related to building packages, except the building gpg keys. The steps to follow in order to build production production packages are as follow&lt;br /&gt;
&lt;br /&gt;
=== Debian packages ===&lt;br /&gt;
&lt;br /&gt;
# Clone the [https://github.com/artefactual-labs/am-packbuild am-packbuild] repo. Latest work is available in dev/packages-1.6-docker&lt;br /&gt;
# Put your gpg private key into &amp;lt;code&amp;gt;debs/GPG-KEYS-REPOS&amp;lt;/code&amp;gt;. That's the place the Dockerfile looks for it when building the environment.&lt;br /&gt;
# Update the makefile at &amp;lt;code&amp;gt;debs/archivematica/Makefile&amp;lt;/code&amp;gt; in order to reflect version/keys you want to use. If you want to build the storage service, you need also to change the packbuild.py line to reflect that (TODO: create service-storage package folder)&lt;br /&gt;
This dockerfile uses packbuild.py  script, whose function is downloadig the code from github, creating a debian/changelog file for each ubuntu version with the expected version name and description of last commit included, and build the package aftewards. It can be run on their own too, without the need of a docker environment.&lt;br /&gt;
# Run &amp;lt;make&amp;gt;, and the packages will be available in the &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; once the building finishes.&lt;br /&gt;
# Upload packages to public debian repository&lt;br /&gt;
&lt;br /&gt;
=== Debian reposities ===&lt;br /&gt;
&lt;br /&gt;
There are two debian repositories, one for archivematica packages, and one for dependencies. The procedure in order to create new ones, or upload packages to them, is the same:&lt;br /&gt;
&lt;br /&gt;
#* Create folder for repo, and configuration file:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
mkdir -p /path/to/repos/repo/conf&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /path/to/repos/repo/conf/distributions &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
Codename: trusty&lt;br /&gt;
&lt;br /&gt;
Components: main&lt;br /&gt;
&lt;br /&gt;
Architectures: amd64 source&lt;br /&gt;
&lt;br /&gt;
SignWith: &amp;lt;short gpg keyid&amp;gt; &lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#* Go inside the repo, and import the packages previously uploaded with:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd /path/to/repos/repo/&lt;br /&gt;
&lt;br /&gt;
reprepro includedeb trusty /path/to/packages/*.deb&lt;br /&gt;
&lt;br /&gt;
reprepro includedsc trusty /path/to/packages/*.deb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The current official repo is at packages.archivematica.org&lt;br /&gt;
&lt;br /&gt;
=== RPM Packages ===&lt;br /&gt;
&lt;br /&gt;
# Package specs are available in [https://github.com/artefactual-labs/am-packbuild/tree/dev/packaging-1.6-docker/rpm am-packbuild/rpms]&lt;br /&gt;
# There are vars in the Makefiles for version/release , so update them when needed&lt;br /&gt;
# In order to build them, just go into the directory you want to build, and run “make”&lt;br /&gt;
&lt;br /&gt;
=== RPM Repositories ===&lt;br /&gt;
&lt;br /&gt;
Once the packages are built, upload them to packages.archivematica.org/&amp;lt;version&amp;gt;/centos&lt;br /&gt;
Go inside that dir, and run “createrepo .” (For packages other than archivematica , use  “centos-extras” repository)&lt;br /&gt;
&lt;br /&gt;
== Website ==&lt;br /&gt;
&lt;br /&gt;
'''Needs to be improved!'''&lt;br /&gt;
&lt;br /&gt;
==== Homepage ====&lt;br /&gt;
&lt;br /&gt;
* Make changes in archivematica-web.git&lt;br /&gt;
** Update links&lt;br /&gt;
** Add new doc repos&lt;br /&gt;
* Deploy&lt;br /&gt;
** Log in sites-pub as archivematica-web and run update-web.sh&lt;br /&gt;
&lt;br /&gt;
==== Documentation ====&lt;br /&gt;
&lt;br /&gt;
* Deploy&lt;br /&gt;
** Log in sites-pub as archivematica-web and run update-docs.sh&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
&lt;br /&gt;
* Release notes&lt;br /&gt;
* Installation notes&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== News ==&lt;br /&gt;
&lt;br /&gt;
* Twitter&lt;br /&gt;
* Mailing list&lt;br /&gt;
* News section in artefactual.com&lt;br /&gt;
&lt;br /&gt;
== Update ansible roles ==&lt;br /&gt;
&lt;br /&gt;
Check that the deploy-pub vars files for archivematica are updated, and the ansible-ansiblematica-src and ansible-archivematica-pkg roles are able to deploy the new version&lt;br /&gt;
&lt;br /&gt;
== Tag Release ==&lt;br /&gt;
&lt;br /&gt;
# Add release tags to repositories&lt;br /&gt;
#* Archivematica&lt;br /&gt;
#* Storage Service&lt;br /&gt;
#* FPR-admin&lt;br /&gt;
#* appraisal tab&lt;br /&gt;
#* transfer browser&lt;br /&gt;
#* Others?&lt;br /&gt;
# Create stable/#.x branch&lt;br /&gt;
# Delete qa/#.x branch if necessary&lt;br /&gt;
&lt;br /&gt;
[[Category:Process documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=SIP_Structure&amp;diff=11778</id>
		<title>SIP Structure</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=SIP_Structure&amp;diff=11778"/>
		<updated>2017-03-30T21:37:14Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Expand magic files list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[:Category:Development documentation]] &amp;gt; SIP Structure&lt;br /&gt;
&lt;br /&gt;
A Transfer or SIP in Archivematica has a number of special directories and files that will trigger specific workflows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
!Path&lt;br /&gt;
!File or Folder?&lt;br /&gt;
!Usage&lt;br /&gt;
|-&lt;br /&gt;
|/SIP_Folder&lt;br /&gt;
|folder&lt;br /&gt;
|Top level container for the the SIP&lt;br /&gt;
|-&lt;br /&gt;
|/SIP_Folder/DIP&lt;br /&gt;
|folder&lt;br /&gt;
|Created by Archivematica for the DIP&lt;br /&gt;
|-&lt;br /&gt;
|/SIP_Folder/DIP/objects&lt;br /&gt;
|folder&lt;br /&gt;
|Created by Archivematica and contains the access objects&lt;br /&gt;
|-&lt;br /&gt;
|/SIP_Folder/DIP/thumbnails&lt;br /&gt;
|folder&lt;br /&gt;
|Created by Archivematica for thumbnails for the DIP objects&lt;br /&gt;
|-&lt;br /&gt;
|/SIP_Folder/logs&lt;br /&gt;
|folder&lt;br /&gt;
|Created by Archivematica for log files generated by Archivematica&lt;br /&gt;
|-&lt;br /&gt;
|/SIP_Folder/logs/fileMeta&lt;br /&gt;
|folder&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
|/SIP_Folder/metadata&lt;br /&gt;
|folder&lt;br /&gt;
|Metadata files provided by the user or created by Archivematica&lt;br /&gt;
|-&lt;br /&gt;
|/SIP_Folder/metadata/checksums.md5&lt;br /&gt;
|text file&lt;br /&gt;
|User-provided checksums for original files. Format is the same as the output of &amp;lt;code&amp;gt;md5deep -rl objects/&amp;lt;/code&amp;gt;. Also supported: &amp;lt;code&amp;gt;checksums.sha1&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;checksums.sha256&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|/SIP_Folder/metadata/file_labels.csv&lt;br /&gt;
|CSV file&lt;br /&gt;
|???&lt;br /&gt;
|-&lt;br /&gt;
|/SIP_Folder/metadata/metadata.csv&lt;br /&gt;
|CSV file&lt;br /&gt;
|User-provided file-level DublinCore metadata&lt;br /&gt;
|-&lt;br /&gt;
|/SIP_Folder/metadata/metadata.json&lt;br /&gt;
|JSON file&lt;br /&gt;
|User-provided file-level DublinCore metadata formatted as JSON. Will be converted to a CSV during processing&lt;br /&gt;
|-&lt;br /&gt;
|/SIP_Folder/METS.sip-uuid.xml&lt;br /&gt;
|XML file&lt;br /&gt;
|Created by Archivematica with all of the metadata on the METS&lt;br /&gt;
|-&lt;br /&gt;
|/SIP_Folder/objects&lt;br /&gt;
|folder&lt;br /&gt;
|Original objects provide by the user. If this directory doesn't exist, all files in /SIP_Folder will be moved here by Archivematica&lt;br /&gt;
|-&lt;br /&gt;
|/SIP_Folder/objects/access&lt;br /&gt;
|folder&lt;br /&gt;
|Triggers access workflow. Deprecated in favor of manual normalization workflow.&lt;br /&gt;
|-&lt;br /&gt;
|/SIP_Folder/objects/manualNormalization/normalization.csv&lt;br /&gt;
|CSV file&lt;br /&gt;
|User-provided CSV that provides a mapping for original objects of the same name to their access and preservation derivatives&lt;br /&gt;
|-&lt;br /&gt;
|/SIP_Folder/objects/manualNormalization/access&lt;br /&gt;
|folder&lt;br /&gt;
|Access derivatives created outside of Archivematica. Should have the same filename as the original, but may have a different extension&lt;br /&gt;
|-&lt;br /&gt;
|/SIP_Folder/objects/manualNormalization/preservation&lt;br /&gt;
|folder&lt;br /&gt;
|Preservation derivatives created outside of Archivematica. Should have the same filename as the original, but may have a different extension&lt;br /&gt;
|-&lt;br /&gt;
|/SIP_Folder/service&lt;br /&gt;
|folder&lt;br /&gt;
|User-provided service files. Normalization can be performed on these files instead of the originals&lt;br /&gt;
|-&lt;br /&gt;
|/SIP_Folder/submissionDocumentation&lt;br /&gt;
|folder&lt;br /&gt;
|Folder for user-provided files that are not original objects but should still be in the AIP&lt;br /&gt;
|-&lt;br /&gt;
|/SIP_Folder/thumbnails&lt;br /&gt;
|folder&lt;br /&gt;
|Created by Archivematica for thumbnail derivatives&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=11776</id>
		<title>Release Process</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=11776"/>
		<updated>2017-03-30T20:40:31Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Link to package creation in overview, move tagging section below packages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an outline/checklist of the process to create Archivematica &amp;amp; Storage service releases.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
# Merge new features&lt;br /&gt;
# Test new features&lt;br /&gt;
# [[#Update PRONOM]]&lt;br /&gt;
# Write documentation&lt;br /&gt;
# [[#Build deb/rpm packages]]&lt;br /&gt;
# [[#Tag Release]]&lt;br /&gt;
# Announce release&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Update PRONOM ==&lt;br /&gt;
&lt;br /&gt;
PRONOM needs to be updated in our file identification tools, FIDO &amp;amp; Siegfried, as well as in the FPR.&lt;br /&gt;
&lt;br /&gt;
=== Update FIDO ===&lt;br /&gt;
&lt;br /&gt;
The FPR update currently use FIDO as a source for new PRONOM, since it is formatted nicer than PRONOM offers, so we depend on FIDO having updated their PRONOM.  If that has not happened, we can generate a new formats-v##.xml by updating signatures manually. Artefactual can also update PRONOM and submit a PR to FIDO.&lt;br /&gt;
&lt;br /&gt;
# Checkout fido from https://github.com/openpreserve/fido&lt;br /&gt;
# Update signatures&lt;br /&gt;
#* Run &amp;lt;code&amp;gt;python -m fido.update_signatures&amp;lt;/code&amp;gt; from the fido repository root&lt;br /&gt;
# Add:&lt;br /&gt;
#* New signature file &amp;lt;code&amp;gt;fido/conf/DROID_SignatureFile-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New formats file &amp;lt;code&amp;gt;fido/conf/formats-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New PRONOM zip file &amp;lt;code&amp;gt;fido/conf/pronom-xml-v##.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Updated &amp;lt;code&amp;gt;fido/conf/versions.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
# Remove:&lt;br /&gt;
#* Old signature file&lt;br /&gt;
#* Old formats file&lt;br /&gt;
#* Old PRONOM zip file&lt;br /&gt;
# Update &amp;lt;code&amp;gt;fido/fido.py&amp;lt;/code&amp;gt; to point to the new format_files&lt;br /&gt;
# Create pull request.  This may trigger a release from FIDO&lt;br /&gt;
&lt;br /&gt;
=== Package FIDO ===&lt;br /&gt;
&lt;br /&gt;
First, clone the [https://github.com/artefactual-labs/am-packbuild/  am-packbuild]  repo. The most recent work has been done in branch dev/packages-1.6-docker, and needs to be merged into main.&lt;br /&gt;
&lt;br /&gt;
Update the Makefiles available at &amp;lt;code&amp;gt;rpm/fido/Makefile&amp;lt;/code&amp;gt;, and  &amp;lt;code&amp;gt;deb/fido/Makefile&amp;lt;/code&amp;gt; , and run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in each directory to build the packages.&lt;br /&gt;
&lt;br /&gt;
=== Package Siegfried ===&lt;br /&gt;
&lt;br /&gt;
First, clone the [https://github.com/artefactual-labs/am-packbuild/  am-packbuild]  repo. The most recent work has been done in branch dev/packages-1.6-docker, and needs to be merged into main.&lt;br /&gt;
&lt;br /&gt;
Update the Makefiles available at &amp;lt;code&amp;gt;rpm/siegfried/Makefile&amp;lt;/code&amp;gt;, and  &amp;lt;code&amp;gt;deb/siegfried/Makefile&amp;lt;/code&amp;gt; , and run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in each directory to build the packages.&lt;br /&gt;
&lt;br /&gt;
=== Update FPR ===&lt;br /&gt;
&lt;br /&gt;
This process is currently more convoluted than it needs to be, and should be simplified.&lt;br /&gt;
&lt;br /&gt;
This depends on FIDO having updated their PRONOM files. See [[#Update FIDO]]&lt;br /&gt;
&lt;br /&gt;
# Install the latest stable Archivematica release&lt;br /&gt;
# Generate a JSON with the current version of the FPR (for use later)&lt;br /&gt;
#* &amp;lt;code&amp;gt;./src/dashboard/src/manage.py dumpdata fpr &amp;gt; fpr-current.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Install the latest development version of Archivematica&lt;br /&gt;
# Generate a blank data migration in the FPR-admin module&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;./src/dashboard/src/manage.py makemigrations --empty --name pronom_89 fpr&amp;lt;/code&amp;gt;&lt;br /&gt;
# Generate the FPR migration body.  This also updates the local database's FPR with the new PRONOM IDs&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;am import-pronom-ids fido/fido/conf/formats-v89.xml --output-filename archivematica/pronom89.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Copy the output into the blank migration, add RunPython operation&lt;br /&gt;
#* &amp;lt;code&amp;gt;migrations.RunPython(data_migration),&amp;lt;/code&amp;gt;&lt;br /&gt;
# Due to a [https://projects.artefactual.com/issues/10466#change-46673 bug], fix the imports&lt;br /&gt;
#* Remove the &amp;lt;code&amp;gt;apps.get_model&amp;lt;/code&amp;gt; lines&lt;br /&gt;
#* Import the models directly with &amp;lt;code&amp;gt;from fpr.models import Format, FormatVersion, IDRule&amp;lt;/code&amp;gt;&lt;br /&gt;
# Commit&lt;br /&gt;
# Deploy on testing pipeline&lt;br /&gt;
# (Analysts) Update the new entries&lt;br /&gt;
#* Move new formats to a more appropriate category&lt;br /&gt;
#* Create rules &amp;amp; commands&lt;br /&gt;
#* Test with data for new formats&lt;br /&gt;
# Generate a JSON with the updated version of the FPR on the testing pipeline&lt;br /&gt;
#* &amp;lt;code&amp;gt;./src/dashboard/src/manage.py dumpdata fpr &amp;gt; fpr-updated.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Get the updates as JSON&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;am get-fpr-changes fpr-current.json fpr-updated.json src/dashboard/src/fpr/migrations/pronom_89.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Update the migration to load the JSON updates&lt;br /&gt;
#* Replace the contents of the data migration function with&lt;br /&gt;
#** &amp;lt;code&amp;gt;fixture_file = os.path.join(os.path.dirname(__file__), 'pronom_89.json')&amp;lt;/code&amp;gt;&lt;br /&gt;
#** &amp;lt;code&amp;gt;call_command('loaddata', fixture_file, app_label='fpr')&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Remove the direct imports from the bug&lt;br /&gt;
#* Improvement Note: Because this is using loaddata, this will have problems if the FPR models are changed. A possible solution is to update get-fpr-changes to generate a migration instead of JSON&lt;br /&gt;
# Commit&lt;br /&gt;
# Merge&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build deb/rpm packages ==&lt;br /&gt;
&lt;br /&gt;
The am-packbuild repository has all the code related to building packages, except the building gpg keys. The steps to follow in order to build production production packages are as follow&lt;br /&gt;
&lt;br /&gt;
=== Debian packages ===&lt;br /&gt;
&lt;br /&gt;
# Clone the [https://github.com/artefactual-labs/am-packbuild am-packbuild] repo. Latest work is available in dev/packages-1.6-docker&lt;br /&gt;
# Put your gpg private key into &amp;lt;code&amp;gt;debs/GPG-KEYS-REPOS&amp;lt;/code&amp;gt;. That's the place the Dockerfile looks for it when building the environment.&lt;br /&gt;
# Update the makefile at &amp;lt;code&amp;gt;debs/archivematica/Makefile&amp;lt;/code&amp;gt; in order to reflect version/keys you want to use. If you want to build the storage service, you need also to change the packbuild.py line to reflect that (TODO: create service-storage package folder)&lt;br /&gt;
This dockerfile uses packbuild.py  script, whose function is downloadig the code from github, creating a debian/changelog file for each ubuntu version with the expected version name and description of last commit included, and build the package aftewards. It can be run on their own too, without the need of a docker environment.&lt;br /&gt;
# Run &amp;lt;make&amp;gt;, and the packages will be available in the &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; once the building finishes.&lt;br /&gt;
# Upload packages to public debian repository&lt;br /&gt;
&lt;br /&gt;
=== Debian reposities ===&lt;br /&gt;
&lt;br /&gt;
There are two debian repositories, one for archivematica packages, and one for dependencies. The procedure in order to create new ones, or upload packages to them, is the same:&lt;br /&gt;
&lt;br /&gt;
#* Create folder for repo, and configuration file:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
mkdir -p /path/to/repos/repo/conf&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /path/to/repos/repo/conf/distributions &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
Codename: trusty&lt;br /&gt;
&lt;br /&gt;
Components: main&lt;br /&gt;
&lt;br /&gt;
Architectures: amd64 source&lt;br /&gt;
&lt;br /&gt;
SignWith: &amp;lt;short gpg keyid&amp;gt; &lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#* Go inside the repo, and import the packages previously uploaded with:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd /path/to/repos/repo/&lt;br /&gt;
&lt;br /&gt;
reprepro includedeb trusty /path/to/packages/*.deb&lt;br /&gt;
&lt;br /&gt;
reprepro includedsc trusty /path/to/packages/*.deb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The current official repo is at packages.archivematica.org&lt;br /&gt;
&lt;br /&gt;
=== RPM Packages ===&lt;br /&gt;
&lt;br /&gt;
# Package specs are available in [https://github.com/artefactual-labs/am-packbuild/tree/dev/packaging-1.6-docker/rpm am-packbuild/rpms]&lt;br /&gt;
# There are vars in the Makefiles for version/release , so update them when needed&lt;br /&gt;
# In order to build them, just go into the directory you want to build, and run “make”&lt;br /&gt;
&lt;br /&gt;
=== RPM Repositories ===&lt;br /&gt;
&lt;br /&gt;
Once the packages are built, upload them to packages.archivematica.org/&amp;lt;version&amp;gt;/centos&lt;br /&gt;
Go inside that dir, and run “createrepo .” (For packages other than archivematica , use  “centos-extras” repository)&lt;br /&gt;
&lt;br /&gt;
== Tag Release ==&lt;br /&gt;
&lt;br /&gt;
# Add release tags to repositories&lt;br /&gt;
#* Archivematica&lt;br /&gt;
#* Storage Service&lt;br /&gt;
#* FPR-admin&lt;br /&gt;
#* appraisal tab&lt;br /&gt;
#* transfer browser&lt;br /&gt;
#* Others?&lt;br /&gt;
# Create stable/#.x branch&lt;br /&gt;
# Delete qa/#.x branch if necessary&lt;br /&gt;
&lt;br /&gt;
[[Category:Process documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=11766</id>
		<title>Release Process</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=11766"/>
		<updated>2017-03-28T23:45:34Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Add branch update notes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an outline/checklist of the process to create Archivematica &amp;amp; Storage service releases.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
# Merge new features&lt;br /&gt;
# Test new features&lt;br /&gt;
# [[#Update PRONOM]]&lt;br /&gt;
# Write documentation&lt;br /&gt;
# Create packages&lt;br /&gt;
# [[#Tag Release]]&lt;br /&gt;
# Announce release&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Update PRONOM ==&lt;br /&gt;
&lt;br /&gt;
PRONOM needs to be updated in our file identification tools, FIDO &amp;amp; Siegfried, as well as in the FPR.&lt;br /&gt;
&lt;br /&gt;
=== Update FIDO ===&lt;br /&gt;
&lt;br /&gt;
The FPR update currently use FIDO as a source for new PRONOM, since it is formatted nicer than PRONOM offers, so we depend on FIDO having updated their PRONOM.  If that has not happened, we can generate a new formats-v##.xml by updating signatures manually. Artefactual can also update PRONOM and submit a PR to FIDO.&lt;br /&gt;
&lt;br /&gt;
# Checkout fido from https://github.com/openpreserve/fido&lt;br /&gt;
# Update signatures&lt;br /&gt;
#* Run &amp;lt;code&amp;gt;python -m fido.update_signatures&amp;lt;/code&amp;gt; from the fido repository root&lt;br /&gt;
# Add:&lt;br /&gt;
#* New signature file &amp;lt;code&amp;gt;fido/conf/DROID_SignatureFile-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New formats file &amp;lt;code&amp;gt;fido/conf/formats-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New PRONOM zip file &amp;lt;code&amp;gt;fido/conf/pronom-xml-v##.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Updated &amp;lt;code&amp;gt;fido/conf/versions.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
# Remove:&lt;br /&gt;
#* Old signature file&lt;br /&gt;
#* Old formats file&lt;br /&gt;
#* Old PRONOM zip file&lt;br /&gt;
# Update &amp;lt;code&amp;gt;fido/fido.py&amp;lt;/code&amp;gt; to point to the new format_files&lt;br /&gt;
# Create pull request.  This may trigger a release from FIDO&lt;br /&gt;
&lt;br /&gt;
=== Package FIDO ===&lt;br /&gt;
&lt;br /&gt;
Add packaging instructions here...&lt;br /&gt;
&lt;br /&gt;
=== Package Siegfried ===&lt;br /&gt;
&lt;br /&gt;
Add packaging instructions here...&lt;br /&gt;
&lt;br /&gt;
=== Update FPR ===&lt;br /&gt;
&lt;br /&gt;
This process is currently more convoluted than it needs to be, and should be simplified.&lt;br /&gt;
&lt;br /&gt;
This depends on FIDO having updated their PRONOM files. See [[#Update FIDO]]&lt;br /&gt;
&lt;br /&gt;
# Install the latest stable Archivematica release&lt;br /&gt;
# Generate a JSON with the current version of the FPR (for use later)&lt;br /&gt;
#* &amp;lt;code&amp;gt;./src/dashboard/src/manage.py dumpdata fpr &amp;gt; fpr-current.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Install the latest development version of Archivematica&lt;br /&gt;
# Generate a blank data migration in the FPR-admin module&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;./src/dashboard/src/manage.py makemigrations --empty --name pronom_89 fpr&amp;lt;/code&amp;gt;&lt;br /&gt;
# Generate the FPR migration body.  This also updates the local database's FPR with the new PRONOM IDs&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;am import-pronom-ids fido/fido/conf/formats-v89.xml --output-filename archivematica/pronom89.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Copy the output into the blank migration, add RunPython operation&lt;br /&gt;
#* &amp;lt;code&amp;gt;migrations.RunPython(data_migration),&amp;lt;/code&amp;gt;&lt;br /&gt;
# Due to a [https://projects.artefactual.com/issues/10466#change-46673 bug], fix the imports&lt;br /&gt;
#* Remove the &amp;lt;code&amp;gt;apps.get_model&amp;lt;/code&amp;gt; lines&lt;br /&gt;
#* Import the models directly with &amp;lt;code&amp;gt;from fpr.models import Format, FormatVersion, IDRule&amp;lt;/code&amp;gt;&lt;br /&gt;
# Commit&lt;br /&gt;
# Deploy on testing pipeline&lt;br /&gt;
# (Analysts) Update the new entries&lt;br /&gt;
#* Move new formats to a more appropriate category&lt;br /&gt;
#* Create rules &amp;amp; commands&lt;br /&gt;
#* Test with data for new formats&lt;br /&gt;
# Generate a JSON with the updated version of the FPR on the testing pipeline&lt;br /&gt;
#* &amp;lt;code&amp;gt;./src/dashboard/src/manage.py dumpdata fpr &amp;gt; fpr-updated.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Get the updates as JSON&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;am get-fpr-changes fpr-current.json fpr-updated.json src/dashboard/src/fpr/migrations/pronom_89.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Update the migration to load the JSON updates&lt;br /&gt;
#* Replace the contents of the data migration function with&lt;br /&gt;
#** &amp;lt;code&amp;gt;fixture_file = os.path.join(os.path.dirname(__file__), 'pronom_89.json')&amp;lt;/code&amp;gt;&lt;br /&gt;
#** &amp;lt;code&amp;gt;call_command('loaddata', fixture_file, app_label='fpr')&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Remove the direct imports from the bug&lt;br /&gt;
#* Improvement Note: Because this is using loaddata, this will have problems if the FPR models are changed. A possible solution is to update get-fpr-changes to generate a migration instead of JSON&lt;br /&gt;
# Commit&lt;br /&gt;
# Merge&lt;br /&gt;
&lt;br /&gt;
== Tag Release ==&lt;br /&gt;
&lt;br /&gt;
# Add release tags to repositories&lt;br /&gt;
#* Archivematica&lt;br /&gt;
#* Storage Service&lt;br /&gt;
#* FPR-admin&lt;br /&gt;
#* appraisal tab&lt;br /&gt;
#* transfer browser&lt;br /&gt;
#* Others?&lt;br /&gt;
# Create stable/#.x branch&lt;br /&gt;
# Delete qa/#.x branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Process documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=11762</id>
		<title>Release Process</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=11762"/>
		<updated>2017-03-28T23:39:37Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Add PRONOM instructions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an outline/checklist of the process to create Archivematica &amp;amp; Storage service releases.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
# Merge new features&lt;br /&gt;
# Test new features&lt;br /&gt;
# [[#Update PRONOM]]&lt;br /&gt;
# Write documentation&lt;br /&gt;
# Create packages&lt;br /&gt;
# Tag release&lt;br /&gt;
# Announce release&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Update PRONOM ==&lt;br /&gt;
&lt;br /&gt;
PRONOM needs to be updated in our file identification tools, FIDO &amp;amp; Siegfried, as well as in the FPR.&lt;br /&gt;
&lt;br /&gt;
=== Update FIDO ===&lt;br /&gt;
&lt;br /&gt;
The FPR update currently use FIDO as a source for new PRONOM, since it is formatted nicer than PRONOM offers, so we depend on FIDO having updated their PRONOM.  If that has not happened, we can generate a new formats-v##.xml by updating signatures manually. Artefactual can also update PRONOM and submit a PR to FIDO.&lt;br /&gt;
&lt;br /&gt;
# Checkout fido from https://github.com/openpreserve/fido&lt;br /&gt;
# Update signatures&lt;br /&gt;
#* Run &amp;lt;code&amp;gt;python -m fido.update_signatures&amp;lt;/code&amp;gt; from the fido repository root&lt;br /&gt;
# Add:&lt;br /&gt;
#* New signature file &amp;lt;code&amp;gt;fido/conf/DROID_SignatureFile-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New formats file &amp;lt;code&amp;gt;fido/conf/formats-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New PRONOM zip file &amp;lt;code&amp;gt;fido/conf/pronom-xml-v##.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Updated &amp;lt;code&amp;gt;fido/conf/versions.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
# Remove:&lt;br /&gt;
#* Old signature file&lt;br /&gt;
#* Old formats file&lt;br /&gt;
#* Old PRONOM zip file&lt;br /&gt;
# Update &amp;lt;code&amp;gt;fido/fido.py&amp;lt;/code&amp;gt; to point to the new format_files&lt;br /&gt;
# Create pull request.  This may trigger a release from FIDO&lt;br /&gt;
&lt;br /&gt;
=== Package FIDO ===&lt;br /&gt;
&lt;br /&gt;
Add packaging instructions here...&lt;br /&gt;
&lt;br /&gt;
=== Package Siegfried ===&lt;br /&gt;
&lt;br /&gt;
Add packaging instructions here...&lt;br /&gt;
&lt;br /&gt;
=== Update FPR ===&lt;br /&gt;
&lt;br /&gt;
This process is currently more convoluted than it needs to be, and should be simplified.&lt;br /&gt;
&lt;br /&gt;
This depends on FIDO having updated their PRONOM files. See [[#Update FIDO]]&lt;br /&gt;
&lt;br /&gt;
# Install the latest stable Archivematica release&lt;br /&gt;
# Generate a JSON with the current version of the FPR (for use later)&lt;br /&gt;
#* &amp;lt;code&amp;gt;./src/dashboard/src/manage.py dumpdata fpr &amp;gt; fpr-current.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Install the latest development version of Archivematica&lt;br /&gt;
# Generate a blank data migration in the FPR-admin module&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;./src/dashboard/src/manage.py makemigrations --empty --name pronom_89 fpr&amp;lt;/code&amp;gt;&lt;br /&gt;
# Generate the FPR migration body.  This also updates the local database's FPR with the new PRONOM IDs&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;am import-pronom-ids fido/fido/conf/formats-v89.xml --output-filename archivematica/pronom89.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Copy the output into the blank migration, add RunPython operation&lt;br /&gt;
#* &amp;lt;code&amp;gt;migrations.RunPython(data_migration),&amp;lt;/code&amp;gt;&lt;br /&gt;
# Due to a [https://projects.artefactual.com/issues/10466#change-46673 bug], fix the imports&lt;br /&gt;
#* Remove the &amp;lt;code&amp;gt;apps.get_model&amp;lt;/code&amp;gt; lines&lt;br /&gt;
#* Import the models directly with &amp;lt;code&amp;gt;from fpr.models import Format, FormatVersion, IDRule&amp;lt;/code&amp;gt;&lt;br /&gt;
# Commit&lt;br /&gt;
# Deploy on testing pipeline&lt;br /&gt;
# (Analysts) Update the new entries&lt;br /&gt;
#* Move new formats to a more appropriate category&lt;br /&gt;
#* Create rules &amp;amp; commands&lt;br /&gt;
#* Test with data for new formats&lt;br /&gt;
# Generate a JSON with the updated version of the FPR on the testing pipeline&lt;br /&gt;
#* &amp;lt;code&amp;gt;./src/dashboard/src/manage.py dumpdata fpr &amp;gt; fpr-updated.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Get the updates as JSON&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;am get-fpr-changes fpr-current.json fpr-updated.json src/dashboard/src/fpr/migrations/pronom_89.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Update the migration to load the JSON updates&lt;br /&gt;
#* Replace the contents of the data migration function with&lt;br /&gt;
#** &amp;lt;code&amp;gt;fixture_file = os.path.join(os.path.dirname(__file__), 'pronom_89.json')&amp;lt;/code&amp;gt;&lt;br /&gt;
#** &amp;lt;code&amp;gt;call_command('loaddata', fixture_file, app_label='fpr')&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Remove the direct imports from the bug&lt;br /&gt;
#* Improvement Note: Because this is using loaddata, this will have problems if the FPR models are changed. A possible solution is to update get-fpr-changes to generate a migration instead of JSON&lt;br /&gt;
# Commit&lt;br /&gt;
# Merge&lt;br /&gt;
&lt;br /&gt;
[[Category:Process documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=11761</id>
		<title>Release Process</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=11761"/>
		<updated>2017-03-28T23:29:35Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Create page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an outline/checklist of the process to create Archivematica &amp;amp; Storage service releases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Process documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=MCPClient&amp;diff=11753</id>
		<title>MCPClient</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=MCPClient&amp;diff=11753"/>
		<updated>2017-03-27T23:48:12Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: /* Client scripts */ Expand client script info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[:Category:Development documentation|Development documentation]] &amp;gt; MCPClient&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;status&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Design&lt;br /&gt;
&amp;lt;div class=&amp;quot;description&amp;quot;&amp;gt;This page proposes a new feature and reviews design options&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Development&lt;br /&gt;
&amp;lt;div class=&amp;quot;description&amp;quot;&amp;gt;This page describes a feature that's in development&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;active&amp;quot;&amp;gt;&lt;br /&gt;
Documentation&lt;br /&gt;
&amp;lt;div class=&amp;quot;description&amp;quot;&amp;gt;This page documents an implemented feature&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Archivematica has one or more MCPClient instances to perform the actual work.  They are gearman worker implementations that inform the gearman server what tasks they can perform, and wait for the server to assign them a task. When a client starts, it connects to the specified gearman server and provides a list of modules they support. When the [[MCPServer]] informs the gearman server of a Task that the client supports and the gearman server assigns the job to the client, the client will process the Job, and return the results to the gearman server, which in turn will return them to the MCPServer.&lt;br /&gt;
&lt;br /&gt;
== Client scripts ==&lt;br /&gt;
Client scripts do the actual work in Archivematica. They are anything that can be run on the command line, from builtins like mv and cp, to custom-written scripts.&lt;br /&gt;
&lt;br /&gt;
New scripts are defined in &amp;lt;code&amp;gt;[https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/archivematicaClientModules src/MCPClient/lib/archivematicaClientModules]&amp;lt;/code&amp;gt;, which is what is registered with Gearman on MCPClient startup.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement note: archivematicaClientModules lists both 'supportedCommandSpecial' and 'supportedCommands'. This distinction may have once been based on scripts that relied on external services, but serves no purpose now and should be removed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The name is what the [[MCPServer#StandardTasksConfigs | StandardTasksConfig]] table will refer to them as, and the value is the script that will be run. Some are defined as shell builtins (eg copy_v0.0 is cp). Most are paths to a script in the clientScripts directory, using the &amp;lt;code&amp;gt;%clientScriptsDirectory%&amp;lt;/code&amp;gt; replacement variable.  The name of the client script is usually the same as the name in archivematicaClientModules, but for very old scripts may have ‘archivematica’ at the beginning (eg createMETS_v2.0 = archivematicaCreateMETS2.py) or be named more pythonically (eg parseExternalMETS = parse_external_mets.py).  Entries are added alphabetically.&lt;br /&gt;
&lt;br /&gt;
The version (eg copy_v0.0) was originally intended to be used to version the scripts as they changed, and be able to track those changes, but that did not happen.  Newer scripts may not have the version defined.&lt;br /&gt;
&lt;br /&gt;
The list of client scripts is sorted roughly in order of appearance during processing&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== moveTransfer_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Move a Transfer &amp;amp; update database&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaMoveTransfer.py archivematicaMoveTransfer.py]&lt;br /&gt;
* '''Used in''': Transfer&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once  | once]]&lt;br /&gt;
* '''Event?''': No&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Moves the whole Transfer and updates the database with the new location relative to the shared directory.&lt;br /&gt;
&lt;br /&gt;
=== assignFileUUIDs_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Starts tracking files new to Archivematica&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaAssignFileUUID.py archivematicaAssignFileUUID.py]&lt;br /&gt;
* '''Used in''': Transfer, Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': ingestion/reingestion, possibly registration&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
This creates an entry in the Files table with the file's UUID, current &amp;amp; original paths and file group.  It also creates an 'ingestion' Event and an 'registration' Event if an accession ID was specified.  Updating the file group (eg original, preservation, submission documentation) can be disabled with &amp;lt;code&amp;gt;--disable-update-filegrpuse&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In ingest, is used on manually normalized files which may have been newly added, metadata and submission documentation.&lt;br /&gt;
&lt;br /&gt;
On reingest, it parses the METS file instead of generating the file UUID, path &amp;amp; group.  The Event type is 'reingestion'.&lt;br /&gt;
&lt;br /&gt;
=== updateSizeAndChecksum_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Set file's size &amp;amp; checksum&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaUpdateSizeAndChecksum.py archivematicaUpdateSizeAndChecksum.py]&lt;br /&gt;
* '''Used in''': Transfer, Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': message digest calculation&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Updates the entry in the Files table with a size and checksum. IT also generates a 'message digest calculation' Event.&lt;br /&gt;
&lt;br /&gt;
On reingest, it parses the METS file instead of generating the checksums &amp;amp; sizes. It also re-adds Derivation &amp;amp; Format links.&lt;br /&gt;
&lt;br /&gt;
Note this script will fail if there was a problem with [[#assignFileUUIDs_v0.0]].&lt;br /&gt;
&lt;br /&gt;
=== createMETS_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Generate the transfer METS file&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETS.py archivematicaCreateMETS.py]&lt;br /&gt;
* '''Used in''': Transfer&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once | once]]&lt;br /&gt;
* '''Event?''': No&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Creates the Transfer METS file. This will contain all the information generated on the transfer during processing, and is especially useful for backlogged transfers.&lt;br /&gt;
&lt;br /&gt;
Not to be confused with [[#createMETS_v2.0]] for the AIP METS.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement note: The Transfer METS file &amp;amp; related backlog functionality needs to be expanded. See [[Transfer_backlog_requirements#Proposed_improvements]] for details.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== createEvent_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Create an Event outside of other scripts&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/createEvent.py createEvent.py]&lt;br /&gt;
* '''Used in''': Transfer&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': as parameter: quarantine, unquarantine, placement in backlog, removal from backlog&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Used to generate events for when a file is placed in or removed from quarantine or backlog.  These do not have scripts associated with them, so the event creation is handled here.&lt;br /&gt;
&lt;br /&gt;
=== archivematicaClamscan_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Check for viruses in incoming files&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaClamscan.py archivematicaClamscan.py]&lt;br /&gt;
* '''Used in''': Transfer, Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': virus check&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Runs clamscan on the file and generates a 'virus scan' event. If a scan has been run, it is not run again on the same file.&lt;br /&gt;
&lt;br /&gt;
This is run on incoming files, files after extraction, metadata files and submission documentation.  It is not run on normalized files.&lt;br /&gt;
&lt;br /&gt;
=== sanitizeObjectNames_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Strip problematic characters from filenames&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/sanitizeObjectNames.py sanitizeObjectNames.py]&lt;br /&gt;
* '''Used in''': Transfer, Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once | once]]&lt;br /&gt;
* '''Event?''': name cleanup&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
* '''Tests''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/tests/test_sanitize.py test_sanitize.py]&lt;br /&gt;
&lt;br /&gt;
Sanitize object names by replacing anything that isn't an ASCII letter, number, hyphen, underscore, period or parenthesis.  This runs on both files and directories, though only files have Events generated. An Event is generated for a file even if only a parent directory is sanitized.&lt;br /&gt;
&lt;br /&gt;
This used code from [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/sanitizeNames.py sanitizeNames.py]&lt;br /&gt;
&lt;br /&gt;
=== identifyFileFormat_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Identify a file's format&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/identifyFileFormat.py identifyFileFormat.py]&lt;br /&gt;
* '''Used in''': Transfer, Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': format identification&lt;br /&gt;
* '''FPR?''': IDCommand &amp;amp; IDRule&lt;br /&gt;
&lt;br /&gt;
One of the most important scripts in Archivematica. Since the file format is used to determine many later actions (extraction, characterization, normalization etc), if this fails many important command later will also fail.  This is the only script that uses the FPR that doesn't use the file format as a key for looking up what command to run. Instead, an IDCommand is selected and the output is matched to an IDRule to find the FormatVersion.&lt;br /&gt;
&lt;br /&gt;
There is a short circuit handling of PRONOM ID (PUID) outputs. Since many FormatVersions have PUIDs, and both FIDO &amp;amp; Siegfried output PUIDs, this script looks for a FormatVersion with a given PUID. This reduces the number of IDRules that have to be created.&lt;br /&gt;
&lt;br /&gt;
This also populates the legacy but still required FilesIDs table.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: Only one identification tool can be run at a time currently. It would be better to allow a cascading of tools. E.g. if a file is identified as a video to subsequently run a tool specialized in identifying different types of video. Similarly, if the default tool failed, we could run a backup tool for a second opinion.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== extractContents_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Extract files from packages&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/extractContents.py extractContents.py]&lt;br /&gt;
* '''Used in''': Transfer&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once | once]]&lt;br /&gt;
* '''Event?''': unpacking, registration, deletion, message digest calculation&lt;br /&gt;
* '''FPR?''': extract&lt;br /&gt;
&lt;br /&gt;
Extracts files from a package (e.g. zip, tar, 7z etc) and optionally deletes the package.  Generates Events for the new files.&lt;br /&gt;
&lt;br /&gt;
=== characterizeFile_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Collects characterization information on a file&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/characterizeFile.py characterizeFile.py]&lt;br /&gt;
* '''Used in''': Transfer, Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': No&lt;br /&gt;
* '''FPR?''': characterization, default_characterization&lt;br /&gt;
&lt;br /&gt;
Collects characterization commands for the provided file, then either&lt;br /&gt;
# Inserts the tool's XML output into the database, or&lt;br /&gt;
# Prints the tool's stdout, for tools which do not output XML&lt;br /&gt;
&lt;br /&gt;
If a tool has no defined characterization commands, then the default will be run instead (currently FITS).  Can run multiple characterization commands and log the output of all of them.&lt;br /&gt;
&lt;br /&gt;
=== validateFile_v1.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Validate a file&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/validateFile.py validateFile.py]&lt;br /&gt;
* '''Used in''': Transfer&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': validation&lt;br /&gt;
* '''FPR?''': validation, default_validation&lt;br /&gt;
&lt;br /&gt;
Validates files are correct, where correctness is defined by the file format.&lt;br /&gt;
&lt;br /&gt;
=== examineContents_v0.0  ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Run bulk extractor for a detailed analysis of contents&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/examineContents.py examineContents.py]&lt;br /&gt;
* '''Used in''': Transfer&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': No&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Runs bulk extractor and stores the outputs in the logs directory.&lt;br /&gt;
&lt;br /&gt;
=== elasticSearchIndex_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Index the Transfer METS into ElasticSearch when sending files to backlog&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/elasticSearchIndexProcessTransfer.py  elasticSearchIndexProcessTransfer.py]&lt;br /&gt;
* '''Used in''': Transfer&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once | once]]&lt;br /&gt;
* '''Event?''': No&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
The data in ElasticSearch is used by the Backlog tab, SIP Arrangement and the Appraisal tab when dealing with files from backlog. Note that this is not run if the transfer is not sent to backlog (since AM 1.5).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement note: The client config 'disableElasticsearchIndexing' can disable indexing, but this should be removed, since searching for files in backlog is required functionality.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== moveSIP_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Move a SIP &amp;amp; update database&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaMoveSIP.py archivematicaMoveSIP.py]&lt;br /&gt;
* '''Used in''': Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once | once]]&lt;br /&gt;
* '''Event?''': No&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Moves the whole SIP and updates the database with the new location relative to the shared directory.&lt;br /&gt;
&lt;br /&gt;
=== normalize_v1.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Generate a preservation or access derivative&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/normalize.py normalize.py]&lt;br /&gt;
* '''Used in''': Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': normalization&lt;br /&gt;
* '''FPR?''': Rules: access, preservation, thumbnail, default_access, default_thumbnail.  Commands: normalization, verification&lt;br /&gt;
&lt;br /&gt;
One of the most important scripts in Archivematica. This generates the preservation and access derivatives, as well as thumbnails.  If manual normalization happens, this instead finds the manually normalized files and links them as derivatives.&lt;br /&gt;
&lt;br /&gt;
The same script is used for generating preservation, access or thumbnail derivatives, controlled by the parameter passed in. In general, normalization is only performed on original files, but may be done on service files.  This reads the FPR for the specific command, and may fall back to a default access or thumbnail command.&lt;br /&gt;
&lt;br /&gt;
The output is used to generate the normalization report about normalization attempted and success/failure rates.&lt;br /&gt;
&lt;br /&gt;
For historical reasons, much of the functionality is also implemented in [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/transcoder.py transcoder.py].  It runs an event detail &amp;amp; verification command associated with the normalization command.&lt;br /&gt;
&lt;br /&gt;
On reingest, a 'deletion' Event is created for replaced derivatives.&lt;br /&gt;
&lt;br /&gt;
=== transcribeFile_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Generate OCR of files.&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaTranscribeFile.py archivematicaTranscribeFile.py]&lt;br /&gt;
* '''Used in''': Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': transcription&lt;br /&gt;
* '''FPR?''': transcription&lt;br /&gt;
&lt;br /&gt;
Optionally generates an OCR file for original files based on FPR entries for transcription.  If the original file has no transcription rules, runs on the derivative.  The new file is a derivation of the original, has a group of 'text/ocr' and is updated with a UUID, checksum, size etc.&lt;br /&gt;
&lt;br /&gt;
=== createMETS_v2.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Generate the AIP METS file&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETS2.py archivematicaCreateMETS2.py]&lt;br /&gt;
* '''Used in''': SIP&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once  | once]]&lt;br /&gt;
* '''Event?''': No&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
* '''Tests''': &lt;br /&gt;
** [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/tests/test_create_aip_mets.py test_create_aip_mets.py]&lt;br /&gt;
** [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/tests/test_reingest_mets.py test_reingest_mets.py]&lt;br /&gt;
&lt;br /&gt;
Perhaps the most important script in Archivematica: it creates the AIP METS which contains all the archival metadata generated by previous client scripts.&lt;br /&gt;
&lt;br /&gt;
This script imports from several other files for additional functionality: &lt;br /&gt;
[https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETSMetadataCSV.py archivematicaCreateMETSMetadataCSV]&lt;br /&gt;
[https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETSRights.py archivematicaCreateMETSRights]&lt;br /&gt;
[https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETSRightsDspaceMDRef.py archivematicaCreateMETSRightsDspaceMDRef]&lt;br /&gt;
[https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETSTrim.py archivematicaCreateMETSTrim]&lt;br /&gt;
&lt;br /&gt;
On reingest, it short-circuits and runs [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETSReingest.py archivematicaCreateMETSReingest] to update the METS file instead.&lt;br /&gt;
&lt;br /&gt;
Not to be confused with [[#createMETS_v0.0]] for the transfer METS.&lt;br /&gt;
&lt;br /&gt;
=== storeAIP_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Send the completed AIP to the storage service&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/storeAIP.py storeAIP.py]&lt;br /&gt;
* '''Used in''': SIP&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once  | once]]&lt;br /&gt;
* '''Event?''': No&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Sends the currently processing AIP to the storage service.  The Location is selected from the list of AIP Storage Locations associated with the Pipeline in previous tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': &lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/]&lt;br /&gt;
* '''Used in''':&lt;br /&gt;
* '''Task type''': &lt;br /&gt;
* '''Event?''': &lt;br /&gt;
* '''FPR?''': &lt;br /&gt;
* '''Tests''':&lt;br /&gt;
&lt;br /&gt;
== Config File ==&lt;br /&gt;
&lt;br /&gt;
Several config settings are read from &amp;lt;code&amp;gt;/etc/archivematica/MCPClient/clientConfig.conf&amp;lt;/code&amp;gt; on startup.&lt;br /&gt;
&lt;br /&gt;
Variables in the MCPClient section:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Variable !! Description !! Default value&lt;br /&gt;
|-&lt;br /&gt;
| MCPArchivematicaServer || URL of the MCP gearman server. Must match the [[MCPServer#Config File | server config file]]. || localhost:4730&lt;br /&gt;
|-&lt;br /&gt;
| sharedDirectoryMounted || Directory structure owned by Archivematica and shared between the MCPServer &amp;amp; MCPClient. Must match the [[MCPServer#Config File | server config file]]. || /var/archivematica/sharedDirectory/&lt;br /&gt;
|-&lt;br /&gt;
| archivematicaClientModules || Path to the list of jobs to register with Gearman || /usr/lib/archivematica/MCPClient/archivematicaClientModules&lt;br /&gt;
|-&lt;br /&gt;
| clientScriptsDirectory || Path to the directory where client scripts are installed. Used when parsing archivematicaClientModules || /usr/lib/archivematica/MCPClient/clientScripts/&lt;br /&gt;
|- style=&amp;quot;background: #ffeecc;&amp;quot;&lt;br /&gt;
| LoadSupportedCommandsSpecial || Whether or not to register the SupportedCommandsSpecial section of archivematicaClientModules. This should be removed. || True&lt;br /&gt;
|-&lt;br /&gt;
| numberOfTasks || Number of MCPClient workers to created. 0 detects the number of cores and uses that. || 0&lt;br /&gt;
|-&lt;br /&gt;
| elasticsearchServer || URL of the ElasticSearch server. || localhost:9200&lt;br /&gt;
|- style=&amp;quot;background: #ffeecc;&amp;quot;&lt;br /&gt;
| disableElasticsearchIndexing || If true, do not index AIPs or Transfers in backlog. This should be removed, since ElasticSearch indexing is required || False&lt;br /&gt;
|-&lt;br /&gt;
| temp_dir || Path to the temporary usage directory. Should be in the shared directory || /var/archivematica/sharedDirectory/tmp&lt;br /&gt;
|- style=&amp;quot;background: #ffeecc;&amp;quot;&lt;br /&gt;
| kioskMode || Dashboard setting that disables editing users. This should be removed, or at least moved to dashboard settings || False&lt;br /&gt;
|-&lt;br /&gt;
| removableFiles || List of filenames that are not archivally significant and can be removed. || Thumbs.db, Icon, Icon\r, .DS_Store&lt;br /&gt;
|-&lt;br /&gt;
| django_settings_module || Name of the Django settings module, so the client scripts can access the database via the Django ORM. || settings.common&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=MCPClient&amp;diff=11752</id>
		<title>MCPClient</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=MCPClient&amp;diff=11752"/>
		<updated>2017-03-27T23:37:20Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: /* Client scripts */ Expand client script info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[:Category:Development documentation|Development documentation]] &amp;gt; MCPClient&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;status&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Design&lt;br /&gt;
&amp;lt;div class=&amp;quot;description&amp;quot;&amp;gt;This page proposes a new feature and reviews design options&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Development&lt;br /&gt;
&amp;lt;div class=&amp;quot;description&amp;quot;&amp;gt;This page describes a feature that's in development&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;active&amp;quot;&amp;gt;&lt;br /&gt;
Documentation&lt;br /&gt;
&amp;lt;div class=&amp;quot;description&amp;quot;&amp;gt;This page documents an implemented feature&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Archivematica has one or more MCPClient instances to perform the actual work.  They are gearman worker implementations that inform the gearman server what tasks they can perform, and wait for the server to assign them a task. When a client starts, it connects to the specified gearman server and provides a list of modules they support. When the [[MCPServer]] informs the gearman server of a Task that the client supports and the gearman server assigns the job to the client, the client will process the Job, and return the results to the gearman server, which in turn will return them to the MCPServer.&lt;br /&gt;
&lt;br /&gt;
== Client scripts ==&lt;br /&gt;
Client scripts do the actual work in Archivematica. They are anything that can be run on the command line, from builtins like mv and cp, to custom-written scripts.&lt;br /&gt;
&lt;br /&gt;
New scripts are defined in &amp;lt;code&amp;gt;[https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/archivematicaClientModules src/MCPClient/lib/archivematicaClientModules]&amp;lt;/code&amp;gt;, which is what is registered with Gearman on MCPClient startup.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement note: archivematicaClientModules lists both 'supportedCommandSpecial' and 'supportedCommands'. This distinction may have once been based on scripts that relied on external services, but serves no purpose now and should be removed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The name is what the [[MCPServer#StandardTasksConfigs | StandardTasksConfig]] table will refer to them as, and the value is the script that will be run. Some are defined as shell builtins (eg copy_v0.0 is cp). Most are paths to a script in the clientScripts directory, using the &amp;lt;code&amp;gt;%clientScriptsDirectory%&amp;lt;/code&amp;gt; replacement variable.  The name of the client script is usually the same as the name in archivematicaClientModules, but for very old scripts may have ‘archivematica’ at the beginning (eg createMETS_v2.0 = archivematicaCreateMETS2.py) or be named more pythonically (eg parseExternalMETS = parse_external_mets.py).  Entries are added alphabetically.&lt;br /&gt;
&lt;br /&gt;
The version (eg copy_v0.0) was originally intended to be used to version the scripts as they changed, and be able to track those changes, but that did not happen.  Newer scripts may not have the version defined.&lt;br /&gt;
&lt;br /&gt;
The list of client scripts is sorted roughly in order of appearance during processing&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== moveTransfer_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Move a Transfer &amp;amp; update database&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaMoveTransfer.py archivematicaMoveTransfer.py]&lt;br /&gt;
* '''Used in''': Transfer&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once  | once]]&lt;br /&gt;
* '''Event?''': No&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Moves the whole Transfer and updates the database with the new location relative to the shared directory.&lt;br /&gt;
&lt;br /&gt;
=== assignFileUUIDs_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Starts tracking files new to Archivematica&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaAssignFileUUID.py archivematicaAssignFileUUID.py]&lt;br /&gt;
* '''Used in''': Transfer, Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': ingestion/reingestion, possibly registration&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
This creates an entry in the Files table with the file's UUID, current &amp;amp; original paths and file group.  It also creates an 'ingestion' Event and an 'registration' Event if an accession ID was specified.  Updating the file group (eg original, preservation, submission documentation) can be disabled with &amp;lt;code&amp;gt;--disable-update-filegrpuse&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In ingest, is used on manually normalized files which may have been newly added, metadata and submission documentation.&lt;br /&gt;
&lt;br /&gt;
On reingest, it parses the METS file instead of generating the file UUID, path &amp;amp; group.  The Event type is 'reingestion'.&lt;br /&gt;
&lt;br /&gt;
=== updateSizeAndChecksum_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Set file's size &amp;amp; checksum&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaUpdateSizeAndChecksum.py archivematicaUpdateSizeAndChecksum.py]&lt;br /&gt;
* '''Used in''': Transfer, Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': message digest calculation&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Updates the entry in the Files table with a size and checksum. IT also generates a 'message digest calculation' Event.&lt;br /&gt;
&lt;br /&gt;
On reingest, it parses the METS file instead of generating the checksums &amp;amp; sizes. It also re-adds Derivation &amp;amp; Format links.&lt;br /&gt;
&lt;br /&gt;
Note this script will fail if there was a problem with [[#assignFileUUIDs_v0.0]].&lt;br /&gt;
&lt;br /&gt;
=== createEvent_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Create an Event outside of other scripts&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/createEvent.py createEvent.py]&lt;br /&gt;
* '''Used in''': Transfer&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': as parameter: quarantine, unquarantine, placement in backlog, removal from backlog&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Used to generate events for when a file is placed in or removed from quarantine or backlog.  These do not have scripts associated with them, so the event creation is handled here.&lt;br /&gt;
&lt;br /&gt;
=== archivematicaClamscan_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Check for viruses in incoming files&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaClamscan.py archivematicaClamscan.py]&lt;br /&gt;
* '''Used in''': Transfer, Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': virus check&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Runs clamscan on the file and generates a 'virus scan' event. If a scan has been run, it is not run again on the same file.&lt;br /&gt;
&lt;br /&gt;
This is run on incoming files, files after extraction, metadata files and submission documentation.  It is not run on normalized files.&lt;br /&gt;
&lt;br /&gt;
=== sanitizeObjectNames_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Strip problematic characters from filenames&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/sanitizeObjectNames.py sanitizeObjectNames.py]&lt;br /&gt;
* '''Used in''': Transfer, Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once | once]]&lt;br /&gt;
* '''Event?''': name cleanup&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
* '''Tests''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/tests/test_sanitize.py test_sanitize.py]&lt;br /&gt;
&lt;br /&gt;
Sanitize object names by replacing anything that isn't an ASCII letter, number, hyphen, underscore, period or parenthesis.  This runs on both files and directories, though only files have Events generated. An Event is generated for a file even if only a parent directory is sanitized.&lt;br /&gt;
&lt;br /&gt;
This used code from [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/sanitizeNames.py sanitizeNames.py]&lt;br /&gt;
&lt;br /&gt;
=== identifyFileFormat_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Identify a file's format&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/identifyFileFormat.py identifyFileFormat.py]&lt;br /&gt;
* '''Used in''': Transfer, Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': format identification&lt;br /&gt;
* '''FPR?''': IDCommand &amp;amp; IDRule&lt;br /&gt;
&lt;br /&gt;
One of the most important scripts in Archivematica. Since the file format is used to determine many later actions (extraction, characterization, normalization etc), if this fails many important command later will also fail.  This is the only script that uses the FPR that doesn't use the file format as a key for looking up what command to run. Instead, an IDCommand is selected and the output is matched to an IDRule to find the FormatVersion.&lt;br /&gt;
&lt;br /&gt;
There is a short circuit handling of PRONOM ID (PUID) outputs. Since many FormatVersions have PUIDs, and both FIDO &amp;amp; Siegfried output PUIDs, this script looks for a FormatVersion with a given PUID. This reduces the number of IDRules that have to be created.&lt;br /&gt;
&lt;br /&gt;
This also populates the legacy but still required FilesIDs table.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: Only one identification tool can be run at a time currently. It would be better to allow a cascading of tools. E.g. if a file is identified as a video to subsequently run a tool specialized in identifying different types of video. Similarly, if the default tool failed, we could run a backup tool for a second opinion.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== extractContents_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Extract files from packages&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/extractContents.py extractContents.py]&lt;br /&gt;
* '''Used in''': Transfer&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once | once]]&lt;br /&gt;
* '''Event?''': unpacking, registration, deletion, message digest calculation&lt;br /&gt;
* '''FPR?''': extract&lt;br /&gt;
&lt;br /&gt;
Extracts files from a package (e.g. zip, tar, 7z etc) and optionally deletes the package.  Generates Events for the new files.&lt;br /&gt;
&lt;br /&gt;
=== validateFile_v1.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Validate a file&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/validateFile.py validateFile.py]&lt;br /&gt;
* '''Used in''': Transfer&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': validation&lt;br /&gt;
* '''FPR?''': validation, default_validation&lt;br /&gt;
&lt;br /&gt;
Validates files are correct, where correctness is defined by the file format.&lt;br /&gt;
&lt;br /&gt;
=== createMETS_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Generate the transfer METS file&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETS.py archivematicaCreateMETS.py]&lt;br /&gt;
* '''Used in''': Transfer&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once | once]]&lt;br /&gt;
* '''Event?''': No&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Creates the Transfer METS file. This will contain all the information generated on the transfer during processing, and is especially useful for backlogged transfers.&lt;br /&gt;
&lt;br /&gt;
Not to be confused with [[#createMETS_v2.0]] for the AIP METS.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement note: The Transfer METS file &amp;amp; related backlog functionality needs to be expanded. See [[Transfer_backlog_requirements#Proposed_improvements]] for details.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== elasticSearchIndex_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Index the Transfer METS into ElasticSearch when sending files to backlog&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/elasticSearchIndexProcessTransfer.py  elasticSearchIndexProcessTransfer.py]&lt;br /&gt;
* '''Used in''': Transfer&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once | once]]&lt;br /&gt;
* '''Event?''': No&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
The data in ElasticSearch is used by the Backlog tab, SIP Arrangement and the Appraisal tab when dealing with files from backlog. Note that this is not run if the transfer is not sent to backlog (since AM 1.5).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement note: The client config 'disableElasticsearchIndexing' can disable indexing, but this should be removed, since searching for files in backlog is required functionality.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== moveSIP_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Move a SIP &amp;amp; update database&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaMoveSIP.py archivematicaMoveSIP.py]&lt;br /&gt;
* '''Used in''': Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once | once]]&lt;br /&gt;
* '''Event?''': No&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Moves the whole SIP and updates the database with the new location relative to the shared directory.&lt;br /&gt;
&lt;br /&gt;
=== normalize_v1.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Generate a preservation or access derivative&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/normalize.py normalize.py]&lt;br /&gt;
* '''Used in''': Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': normalization&lt;br /&gt;
* '''FPR?''': Rules: access, preservation, thumbnail, default_access, default_thumbnail.  Commands: normalization, verification&lt;br /&gt;
&lt;br /&gt;
One of the most important scripts in Archivematica. This generates the preservation and access derivatives, as well as thumbnails.  If manual normalization happens, this instead finds the manually normalized files and links them as derivatives.&lt;br /&gt;
&lt;br /&gt;
The same script is used for generating preservation, access or thumbnail derivatives, controlled by the parameter passed in. In general, normalization is only performed on original files, but may be done on service files.  This reads the FPR for the specific command, and may fall back to a default access or thumbnail command.&lt;br /&gt;
&lt;br /&gt;
The output is used to generate the normalization report about normalization attempted and success/failure rates.&lt;br /&gt;
&lt;br /&gt;
For historical reasons, much of the functionality is also implemented in [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/transcoder.py transcoder.py].  It runs an event detail &amp;amp; verification command associated with the normalization command.&lt;br /&gt;
&lt;br /&gt;
On reingest, a 'deletion' Event is created for replaced derivatives.&lt;br /&gt;
&lt;br /&gt;
=== transcribeFile_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Generate OCR of files.&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaTranscribeFile.py archivematicaTranscribeFile.py]&lt;br /&gt;
* '''Used in''': Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': transcription&lt;br /&gt;
* '''FPR?''': transcription&lt;br /&gt;
&lt;br /&gt;
Optionally generates an OCR file for original files based on FPR entries for transcription.  If the original file has no transcription rules, runs on the derivative.  The new file is a derivation of the original, has a group of 'text/ocr' and is updated with a UUID, checksum, size etc.&lt;br /&gt;
&lt;br /&gt;
=== createMETS_v2.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Generate the AIP METS file&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETS2.py archivematicaCreateMETS2.py]&lt;br /&gt;
* '''Used in''': SIP&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once  | once]]&lt;br /&gt;
* '''Event?''': No&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
* '''Tests''': &lt;br /&gt;
** [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/tests/test_create_aip_mets.py test_create_aip_mets.py]&lt;br /&gt;
** [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/tests/test_reingest_mets.py test_reingest_mets.py]&lt;br /&gt;
&lt;br /&gt;
Perhaps the most important script in Archivematica: it creates the AIP METS which contains all the archival metadata generated by previous client scripts.&lt;br /&gt;
&lt;br /&gt;
This script imports from several other files for additional functionality: &lt;br /&gt;
[https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETSMetadataCSV.py archivematicaCreateMETSMetadataCSV]&lt;br /&gt;
[https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETSRights.py archivematicaCreateMETSRights]&lt;br /&gt;
[https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETSRightsDspaceMDRef.py archivematicaCreateMETSRightsDspaceMDRef]&lt;br /&gt;
[https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETSTrim.py archivematicaCreateMETSTrim]&lt;br /&gt;
&lt;br /&gt;
On reingest, it short-circuits and runs [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETSReingest.py archivematicaCreateMETSReingest] to update the METS file instead.&lt;br /&gt;
&lt;br /&gt;
Not to be confused with [[#createMETS_v0.0]] for the transfer METS.&lt;br /&gt;
&lt;br /&gt;
=== storeAIP_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Send the completed AIP to the storage service&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/storeAIP.py storeAIP.py]&lt;br /&gt;
* '''Used in''': SIP&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once  | once]]&lt;br /&gt;
* '''Event?''': No&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Sends the currently processing AIP to the storage service.  The Location is selected from the list of AIP Storage Locations associated with the Pipeline in previous tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': &lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/]&lt;br /&gt;
* '''Used in''':&lt;br /&gt;
* '''Task type''': &lt;br /&gt;
* '''Event?''': &lt;br /&gt;
* '''FPR?''': &lt;br /&gt;
* '''Tests''':&lt;br /&gt;
&lt;br /&gt;
== Config File ==&lt;br /&gt;
&lt;br /&gt;
Several config settings are read from &amp;lt;code&amp;gt;/etc/archivematica/MCPClient/clientConfig.conf&amp;lt;/code&amp;gt; on startup.&lt;br /&gt;
&lt;br /&gt;
Variables in the MCPClient section:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Variable !! Description !! Default value&lt;br /&gt;
|-&lt;br /&gt;
| MCPArchivematicaServer || URL of the MCP gearman server. Must match the [[MCPServer#Config File | server config file]]. || localhost:4730&lt;br /&gt;
|-&lt;br /&gt;
| sharedDirectoryMounted || Directory structure owned by Archivematica and shared between the MCPServer &amp;amp; MCPClient. Must match the [[MCPServer#Config File | server config file]]. || /var/archivematica/sharedDirectory/&lt;br /&gt;
|-&lt;br /&gt;
| archivematicaClientModules || Path to the list of jobs to register with Gearman || /usr/lib/archivematica/MCPClient/archivematicaClientModules&lt;br /&gt;
|-&lt;br /&gt;
| clientScriptsDirectory || Path to the directory where client scripts are installed. Used when parsing archivematicaClientModules || /usr/lib/archivematica/MCPClient/clientScripts/&lt;br /&gt;
|- style=&amp;quot;background: #ffeecc;&amp;quot;&lt;br /&gt;
| LoadSupportedCommandsSpecial || Whether or not to register the SupportedCommandsSpecial section of archivematicaClientModules. This should be removed. || True&lt;br /&gt;
|-&lt;br /&gt;
| numberOfTasks || Number of MCPClient workers to created. 0 detects the number of cores and uses that. || 0&lt;br /&gt;
|-&lt;br /&gt;
| elasticsearchServer || URL of the ElasticSearch server. || localhost:9200&lt;br /&gt;
|- style=&amp;quot;background: #ffeecc;&amp;quot;&lt;br /&gt;
| disableElasticsearchIndexing || If true, do not index AIPs or Transfers in backlog. This should be removed, since ElasticSearch indexing is required || False&lt;br /&gt;
|-&lt;br /&gt;
| temp_dir || Path to the temporary usage directory. Should be in the shared directory || /var/archivematica/sharedDirectory/tmp&lt;br /&gt;
|- style=&amp;quot;background: #ffeecc;&amp;quot;&lt;br /&gt;
| kioskMode || Dashboard setting that disables editing users. This should be removed, or at least moved to dashboard settings || False&lt;br /&gt;
|-&lt;br /&gt;
| removableFiles || List of filenames that are not archivally significant and can be removed. || Thumbs.db, Icon, Icon\r, .DS_Store&lt;br /&gt;
|-&lt;br /&gt;
| django_settings_module || Name of the Django settings module, so the client scripts can access the database via the Django ORM. || settings.common&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=MCPClient&amp;diff=11749</id>
		<title>MCPClient</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=MCPClient&amp;diff=11749"/>
		<updated>2017-03-27T22:51:49Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: /* Client scripts */ Expand client script info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[:Category:Development documentation|Development documentation]] &amp;gt; MCPClient&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;status&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Design&lt;br /&gt;
&amp;lt;div class=&amp;quot;description&amp;quot;&amp;gt;This page proposes a new feature and reviews design options&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Development&lt;br /&gt;
&amp;lt;div class=&amp;quot;description&amp;quot;&amp;gt;This page describes a feature that's in development&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;active&amp;quot;&amp;gt;&lt;br /&gt;
Documentation&lt;br /&gt;
&amp;lt;div class=&amp;quot;description&amp;quot;&amp;gt;This page documents an implemented feature&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Archivematica has one or more MCPClient instances to perform the actual work.  They are gearman worker implementations that inform the gearman server what tasks they can perform, and wait for the server to assign them a task. When a client starts, it connects to the specified gearman server and provides a list of modules they support. When the [[MCPServer]] informs the gearman server of a Task that the client supports and the gearman server assigns the job to the client, the client will process the Job, and return the results to the gearman server, which in turn will return them to the MCPServer.&lt;br /&gt;
&lt;br /&gt;
== Client scripts ==&lt;br /&gt;
Client scripts do the actual work in Archivematica. They are anything that can be run on the command line, from builtins like mv and cp, to custom-written scripts.&lt;br /&gt;
&lt;br /&gt;
New scripts are defined in &amp;lt;code&amp;gt;[https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/archivematicaClientModules src/MCPClient/lib/archivematicaClientModules]&amp;lt;/code&amp;gt;, which is what is registered with Gearman on MCPClient startup.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement note: archivematicaClientModules lists both 'supportedCommandSpecial' and 'supportedCommands'. This distinction may have once been based on scripts that relied on external services, but serves no purpose now and should be removed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The name is what the [[MCPServer#StandardTasksConfigs | StandardTasksConfig]] table will refer to them as, and the value is the script that will be run. Some are defined as shell builtins (eg copy_v0.0 is cp). Most are paths to a script in the clientScripts directory, using the &amp;lt;code&amp;gt;%clientScriptsDirectory%&amp;lt;/code&amp;gt; replacement variable.  The name of the client script is usually the same as the name in archivematicaClientModules, but for very old scripts may have ‘archivematica’ at the beginning (eg createMETS_v2.0 = archivematicaCreateMETS2.py) or be named more pythonically (eg parseExternalMETS = parse_external_mets.py).  Entries are added alphabetically.&lt;br /&gt;
&lt;br /&gt;
The version (eg copy_v0.0) was originally intended to be used to version the scripts as they changed, and be able to track those changes, but that did not happen.  Newer scripts may not have the version defined.&lt;br /&gt;
&lt;br /&gt;
The list of client scripts is sorted roughly in order of appearance during processing&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== moveTransfer_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Move a Transfer &amp;amp; update database&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaMoveTransfer.py archivematicaMoveTransfer.py]&lt;br /&gt;
* '''Used in''': Transfer&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once  | once]]&lt;br /&gt;
* '''Event?''': No&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Moves the whole Transfer and updates the database with the new location relative to the shared directory.&lt;br /&gt;
&lt;br /&gt;
=== assignFileUUIDs_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Starts tracking files new to Archivematica&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaAssignFileUUID.py archivematicaAssignFileUUID.py]&lt;br /&gt;
* '''Used in''': Transfer, Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': ingestion/reingestion, possibly accession&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
This creates an entry in the Files table with the file's UUID, current &amp;amp; original paths and file group.  It also creates an 'ingestion' Event and an 'accession' Event if an accession ID was specified.  Updating the file group (eg original, preservation, submission documentation) can be disabled with &amp;lt;code&amp;gt;--disable-update-filegrpuse&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In ingest, is used on manually normalized files which may have been newly added, metadata and submission documentation.&lt;br /&gt;
&lt;br /&gt;
On reingest, it parses the METS file instead of generating the file UUID, path &amp;amp; group.  The Event type is 'reingestion'.&lt;br /&gt;
&lt;br /&gt;
=== updateSizeAndChecksum_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Set file's size &amp;amp; checksum&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaUpdateSizeAndChecksum.py archivematicaUpdateSizeAndChecksum.py]&lt;br /&gt;
* '''Used in''': Transfer, Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': message digest calculation&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Updates the entry in the Files table with a size and checksum. IT also generates a 'message digest calculation' Event.&lt;br /&gt;
&lt;br /&gt;
On reingest, it parses the METS file instead of generating the checksums &amp;amp; sizes. It also re-adds Derivation &amp;amp; Format links.&lt;br /&gt;
&lt;br /&gt;
Note this script will fail if there was a problem with [[#assignFileUUIDs_v0.0]].&lt;br /&gt;
&lt;br /&gt;
=== archivematicaClamscan_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Check for viruses in incoming files&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaClamscan.py archivematicaClamscan.py]&lt;br /&gt;
* '''Used in''': Transfer, Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': virus check&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Runs clamscan on the file and generates a 'virus scan' event. If a scan has been run, it is not run again on the same file.&lt;br /&gt;
&lt;br /&gt;
This is run on incoming files, files after extraction, metadata files and submission documentation.  It is not run on normalized files.&lt;br /&gt;
&lt;br /&gt;
=== identifyFileFormat_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Identify a file's format&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/identifyFileFormat.py identifyFileFormat.py]&lt;br /&gt;
* '''Used in''': Transfer, Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': format identification&lt;br /&gt;
* '''FPR?''': IDCommand &amp;amp; IDRule&lt;br /&gt;
&lt;br /&gt;
One of the most important scripts in Archivematica. Since the file format is used to determine many later actions (extraction, characterization, normalization etc), if this fails many important command later will also fail.  This is the only script that uses the FPR that doesn't use the file format as a key for looking up what command to run. Instead, an IDCommand is selected and the output is matched to an IDRule to find the FormatVersion.&lt;br /&gt;
&lt;br /&gt;
There is a short circuit handling of PRONOM ID (PUID) outputs. Since many FormatVersions have PUIDs, and both FIDO &amp;amp; Siegfried output PUIDs, this script looks for a FormatVersion with a given PUID. This reduces the number of IDRules that have to be created.&lt;br /&gt;
&lt;br /&gt;
This also populates the legacy but still required FilesIDs table.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: Only one identification tool can be run at a time currently. It would be better to allow a cascading of tools. E.g. if a file is identified as a video to subsequently run a tool specialized in identifying different types of video. Similarly, if the default tool failed, we could run a backup tool for a second opinion.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== createMETS_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Generate the transfer METS file&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETS.py archivematicaCreateMETS.py]&lt;br /&gt;
* '''Used in''': Transfer&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once | once]]&lt;br /&gt;
* '''Event?''': No&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Creates the Transfer METS file. This will contain all the information generated on the transfer during processing, and is especially useful for backlogged transfers.&lt;br /&gt;
&lt;br /&gt;
Not to be confused with [[#createMETS_v2.0]] for the AIP METS.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement note: The Transfer METS file &amp;amp; related backlog functionality needs to be expanded. See [[Transfer_backlog_requirements#Proposed_improvements]] for details.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== elasticSearchIndex_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Index the Transfer METS into ElasticSearch when sending files to backlog&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/elasticSearchIndexProcessTransfer.py  elasticSearchIndexProcessTransfer.py]&lt;br /&gt;
* '''Used in''': Transfer&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once | once]]&lt;br /&gt;
* '''Event?''': No&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
The data in ElasticSearch is used by the Backlog tab, SIP Arrangement and the Appraisal tab when dealing with files from backlog. Note that this is not run if the transfer is not sent to backlog (since AM 1.5).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement note: The client config 'disableElasticsearchIndexing' can disable indexing, but this should be removed, since searching for files in backlog is required functionality.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== moveSIP_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Move a SIP &amp;amp; update database&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaMoveSIP.py archivematicaMoveSIP.py]&lt;br /&gt;
* '''Used in''': Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once  | once]]&lt;br /&gt;
* '''Event?''': No&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Moves the whole SIP and updates the database with the new location relative to the shared directory.&lt;br /&gt;
&lt;br /&gt;
=== transcribeFile_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Generate OCR of files.&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaTranscribeFile.py archivematicaTranscribeFile.py]&lt;br /&gt;
* '''Used in''': Ingest&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run for each file | per file]]&lt;br /&gt;
* '''Event?''': transcription&lt;br /&gt;
* '''FPR?''': transcription&lt;br /&gt;
&lt;br /&gt;
Optionally generates an OCR file for original files based on FPR entries for transcription.  If the original file has no transcription rules, runs on the derivative.  The new file is a derivation of the original, has a group of 'text/ocr' and is updated with a UUID, checksum, size etc.&lt;br /&gt;
&lt;br /&gt;
=== createMETS_v2.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Generate the AIP METS file&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETS2.py archivematicaCreateMETS2.py]&lt;br /&gt;
* '''Used in''': SIP&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once  | once]]&lt;br /&gt;
* '''Event?''': No&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
* '''Tests''': &lt;br /&gt;
** [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/tests/test_create_aip_mets.py test_create_aip_mets.py]&lt;br /&gt;
** [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/tests/test_reingest_mets.py test_reingest_mets.py]&lt;br /&gt;
&lt;br /&gt;
Perhaps the most important script in Archivematica: it creates the AIP METS which contains all the archival metadata generated by previous client scripts.&lt;br /&gt;
&lt;br /&gt;
This script imports from several other files for additional functionality: &lt;br /&gt;
[https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETSMetadataCSV.py archivematicaCreateMETSMetadataCSV]&lt;br /&gt;
[https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETSRights.py archivematicaCreateMETSRights]&lt;br /&gt;
[https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETSRightsDspaceMDRef.py archivematicaCreateMETSRightsDspaceMDRef]&lt;br /&gt;
[https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETSTrim.py archivematicaCreateMETSTrim]&lt;br /&gt;
&lt;br /&gt;
On reingest, it short-circuits and runs [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/archivematicaCreateMETSReingest.py archivematicaCreateMETSReingest] to update the METS file instead.&lt;br /&gt;
&lt;br /&gt;
Not to be confused with [[#createMETS_v0.0]] for the transfer METS.&lt;br /&gt;
&lt;br /&gt;
=== storeAIP_v0.0 ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': Send the completed AIP to the storage service&lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/storeAIP.py storeAIP.py]&lt;br /&gt;
* '''Used in''': SIP&lt;br /&gt;
* '''Task type''': [[MCPServer/TaskTypes#Run once  | once]]&lt;br /&gt;
* '''Event?''': No&lt;br /&gt;
* '''FPR?''': No&lt;br /&gt;
&lt;br /&gt;
Sends the currently processing AIP to the storage service.  The Location is selected from the list of AIP Storage Locations associated with the Pipeline in previous tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  ===&lt;br /&gt;
&lt;br /&gt;
* '''Purpose''': &lt;br /&gt;
* '''Script''': [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/]&lt;br /&gt;
* '''Used in''':&lt;br /&gt;
* '''Task type''': &lt;br /&gt;
* '''Event?''': &lt;br /&gt;
* '''FPR?''': &lt;br /&gt;
* '''Tests''':&lt;br /&gt;
&lt;br /&gt;
== Config File ==&lt;br /&gt;
&lt;br /&gt;
Several config settings are read from &amp;lt;code&amp;gt;/etc/archivematica/MCPClient/clientConfig.conf&amp;lt;/code&amp;gt; on startup.&lt;br /&gt;
&lt;br /&gt;
Variables in the MCPClient section:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Variable !! Description !! Default value&lt;br /&gt;
|-&lt;br /&gt;
| MCPArchivematicaServer || URL of the MCP gearman server. Must match the [[MCPServer#Config File | server config file]]. || localhost:4730&lt;br /&gt;
|-&lt;br /&gt;
| sharedDirectoryMounted || Directory structure owned by Archivematica and shared between the MCPServer &amp;amp; MCPClient. Must match the [[MCPServer#Config File | server config file]]. || /var/archivematica/sharedDirectory/&lt;br /&gt;
|-&lt;br /&gt;
| archivematicaClientModules || Path to the list of jobs to register with Gearman || /usr/lib/archivematica/MCPClient/archivematicaClientModules&lt;br /&gt;
|-&lt;br /&gt;
| clientScriptsDirectory || Path to the directory where client scripts are installed. Used when parsing archivematicaClientModules || /usr/lib/archivematica/MCPClient/clientScripts/&lt;br /&gt;
|- style=&amp;quot;background: #ffeecc;&amp;quot;&lt;br /&gt;
| LoadSupportedCommandsSpecial || Whether or not to register the SupportedCommandsSpecial section of archivematicaClientModules. This should be removed. || True&lt;br /&gt;
|-&lt;br /&gt;
| numberOfTasks || Number of MCPClient workers to created. 0 detects the number of cores and uses that. || 0&lt;br /&gt;
|-&lt;br /&gt;
| elasticsearchServer || URL of the ElasticSearch server. || localhost:9200&lt;br /&gt;
|- style=&amp;quot;background: #ffeecc;&amp;quot;&lt;br /&gt;
| disableElasticsearchIndexing || If true, do not index AIPs or Transfers in backlog. This should be removed, since ElasticSearch indexing is required || False&lt;br /&gt;
|-&lt;br /&gt;
| temp_dir || Path to the temporary usage directory. Should be in the shared directory || /var/archivematica/sharedDirectory/tmp&lt;br /&gt;
|- style=&amp;quot;background: #ffeecc;&amp;quot;&lt;br /&gt;
| kioskMode || Dashboard setting that disables editing users. This should be removed, or at least moved to dashboard settings || False&lt;br /&gt;
|-&lt;br /&gt;
| removableFiles || List of filenames that are not archivally significant and can be removed. || Thumbs.db, Icon, Icon\r, .DS_Store&lt;br /&gt;
|-&lt;br /&gt;
| django_settings_module || Name of the Django settings module, so the client scripts can access the database via the Django ORM. || settings.common&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Category:Development_documentation&amp;diff=11748</id>
		<title>Category:Development documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Category:Development_documentation&amp;diff=11748"/>
		<updated>2017-03-27T21:48:08Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Clarify section explanations&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; Development documentation&lt;br /&gt;
&lt;br /&gt;
Archivematica is a web- and standards-based, open-source application which allows institutions to preserve long-term access to trustworthy, authentic and reliable digital content. Our target users are archivists, librarians, and anyone working to preserve digital objects. &lt;br /&gt;
&lt;br /&gt;
The Archivematica project consists of several projects working together:&lt;br /&gt;
* Archivematica: Main repository containing the user-facing dashboard, task manager MCPServer and clients scripts for the MCPClient. Also referred to as a pipeline&lt;br /&gt;
** [[Dashboard]]: User-facing web GUI written in Django. This handles external systems &amp;amp; workflow configuration, Transfer and SIP process status &amp;amp; decisions, and gives access to the backlog and archival storage.&lt;br /&gt;
** [[MCPServer]]: Task manager using gearman that assigns tasks to MCPClients and determines workflow.&lt;br /&gt;
** [[MCPClient]]: Gearman worker that dispatches jobs to the various scripts.&lt;br /&gt;
*** Client scripts: The actual scripts that do the processing. Most are written in Python, some in bash or other tools.&lt;br /&gt;
* [[Storage Service]]: Responsible for moving files to Archivematica for processing, and from Archivematica into storage. It is the more permanent record of AIPs &amp;amp; backlogged transfers and where they’re stored.&lt;br /&gt;
* [[ Format_policy_registry_requirements | Format Policy Registry]]: Submodule shared between Archivematica and the Format Policy Registry (FPR) server that displays and updates FPR rules and commands&lt;br /&gt;
&lt;br /&gt;
Detailed feature descriptions live in the subcategory [[:Category:Feature requirements]].  These may be complete, in progress, or just ideas.  Documentation for old versions that is no longer valid in current Archivematica is moved to [[:Category:Deprecated]].&lt;br /&gt;
&lt;br /&gt;
See also [[:Category:Process documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Transfer_backlog_requirements&amp;diff=11747</id>
		<title>Transfer backlog requirements</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Transfer_backlog_requirements&amp;diff=11747"/>
		<updated>2017-03-27T21:02:24Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: /* Proposed improvements */ Update cross-pipeline backlog&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[:Category:Development documentation|Development documentation]] &amp;gt; Transfer backlog requirements&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature requirements]]&lt;br /&gt;
&lt;br /&gt;
== Proposed improvements ==&lt;br /&gt;
&lt;br /&gt;
=== Handle cross-pipeline backlog ===&lt;br /&gt;
&lt;br /&gt;
March 2017&lt;br /&gt;
&lt;br /&gt;
'''Summary''': Transfers put into backlog should be able to be started as SIP (through the Appraisal tab, SIP arrange, or Backlog tab) on a different pipeline than they were put in backlog from.&lt;br /&gt;
&lt;br /&gt;
'''Problem''': Much of the information needed during Ingest is stored only in the database. If a Transfer is put into backlog and ingest is started on a different pipeline that information is not there.&lt;br /&gt;
&lt;br /&gt;
'''Proposed fix''':  The Transfer METS file should be improved to contain all information needed, which could be parsed back into the database at the start of ingest.&lt;br /&gt;
&lt;br /&gt;
Currently there are 4 places where backlogged transfer data lives: pipeline database, Elasticsearch transfers index, storage service database &amp;amp; transfer METS file. This should be consolidated to a single location and the other sources could be rebuilt from the canonical one.&lt;br /&gt;
&lt;br /&gt;
The METS file is treated as the canonical metadata store in the AIP and is a good choice for the canonical metadata store for a transfer in backlog. Since all of this information is needed in ingest is for the AIP METS file, we know all the information can be stored as a METS file.  We already parse the AIP METS file into the database on full reingest, so there is precedent &amp;amp; examples for doing this.&lt;br /&gt;
&lt;br /&gt;
Tables needed include:&lt;br /&gt;
* Transfers&lt;br /&gt;
* Files&lt;br /&gt;
* DublinCore&lt;br /&gt;
* RightsStatement &amp;amp; related&lt;br /&gt;
* Events&lt;br /&gt;
* Events_agents (link between Event &amp;amp; Agent)&lt;br /&gt;
* Agents (older version of AM?)&lt;br /&gt;
* FilesIdentifiedIDs (file ID info)&lt;br /&gt;
* FilesIDs (more file ID info)&lt;br /&gt;
* main_fpcommandoutput (characterization)&lt;br /&gt;
* Jobs or Tasks may also be required for status checking?&lt;br /&gt;
&lt;br /&gt;
This also needs to handle transfers put in backlog before the transfer METS was updated. It should be straightforward to handle backlogged transfers where the pipeline still exists, as the data is all in the database. For backlogged transfers where the pipeline no longer exists, truncated, stub or default data could be done, or require that it be re-run through transfer.&lt;br /&gt;
&lt;br /&gt;
== Original requirements ==&lt;br /&gt;
&lt;br /&gt;
Added in Archivematica 1.0&lt;br /&gt;
&lt;br /&gt;
=== Transfer Backlog Management ===&lt;br /&gt;
* Related issues: Issue 951, Issue 1220, Issue 1141, Issue 1225, Issue 1257&lt;br /&gt;
&lt;br /&gt;
=== Requirements for transfer backlog search ===&lt;br /&gt;
&lt;br /&gt;
* Add ability to search transfer backlog and send one or more transfers to Ingest&lt;br /&gt;
* Add ability to download and/or view files/transfers (via right click)&lt;br /&gt;
* Search the following fields: Any field, transfer name, file name, accession number, PUID, Mimetype, Date - Ingest&lt;br /&gt;
&lt;br /&gt;
=== Mockup of transfer backlog search ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:1.0_TransferBacklogSearch.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
[[File:1.0_TransBacklogSearchResults.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Transfer Workflow ===&lt;br /&gt;
&lt;br /&gt;
* Administration - allow MCP access to media or storage where transfer is located&lt;br /&gt;
* Assign accession number to transfer&lt;br /&gt;
* Remove transfer backup from workflow - no long processing configuration option&lt;br /&gt;
* Add Send transfer to backlog microservice&lt;br /&gt;
* Add Search transfer backlog tab from Ingest in Dashboard&lt;br /&gt;
* Add ability to download and/or view transfers and files from Search tab&lt;br /&gt;
* Add ability to send transfers from backlog search to Ingest/Create SIP (checkboxes, send button)&lt;br /&gt;
* see workflow diagrams below &lt;br /&gt;
&lt;br /&gt;
'''0.9 Transfer workflow'''&lt;br /&gt;
&lt;br /&gt;
* grey steps are automated, white are manual&lt;br /&gt;
&lt;br /&gt;
[[File:transferWorkflow0.9.png|680px|thumb|center|]]&lt;br /&gt;
[[File:transferWorkflow0.9pt2.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
[[Media:transferWorkflow0.9.pdf|transferWorkflow0.9.pdf]]&lt;br /&gt;
&lt;br /&gt;
=== Administration Tab in Dashboard ===&lt;br /&gt;
&lt;br /&gt;
* Assign permission and access to the MCPServer to copy from transfer media (hard drives, optical media, USB, etc.) or network location. &lt;br /&gt;
* Assign transfer backlog locations (configuration is done outside of AM)&lt;br /&gt;
* Assign source directories&lt;br /&gt;
* Define transfer types&lt;br /&gt;
* Assign report locations (post-1.0)&lt;br /&gt;
* Set AIP storage location&lt;br /&gt;
* Set DIP upload location&lt;br /&gt;
&lt;br /&gt;
=== Accession metadata ===&lt;br /&gt;
&lt;br /&gt;
* PREMIS Event = Registration&lt;br /&gt;
         &amp;lt;event&amp;gt;&lt;br /&gt;
            &amp;lt;eventIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierType&amp;gt;UUID&amp;lt;/eventIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierValue&amp;gt;35cbe00d-d661-4174-b11a-e203f5608008&amp;lt;/eventIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/eventIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;eventType&amp;gt;registration&amp;lt;/eventType&amp;gt;&lt;br /&gt;
            &amp;lt;eventDateTime&amp;gt;2012-03-14&amp;lt;/eventDateTime&amp;gt;&lt;br /&gt;
            &amp;lt;eventDetail&amp;gt;&amp;lt;/eventDetail&amp;gt;&lt;br /&gt;
            &amp;lt;eventOutcomeInformation&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcome&amp;gt;&amp;lt;/eventOutcome&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcomeDetail&amp;gt;&lt;br /&gt;
                &amp;lt;eventOutcomeDetailNote&amp;gt;accession#2012-029&amp;lt;/eventOutcomeDetailNote&amp;gt;&lt;br /&gt;
              &amp;lt;/eventOutcomeDetail&amp;gt;&lt;br /&gt;
            &amp;lt;/eventOutcomeInformation&amp;gt;&lt;br /&gt;
            &amp;lt;linkingAgentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierType&amp;gt;archivist&amp;lt;/linkingAgentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierValue&amp;gt;Courtney Mumma&amp;lt;/linkingAgentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/linkingAgentIdentifier&amp;gt;&lt;br /&gt;
          &amp;lt;/event&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Manually input metadata in template on dashboard (See [[File_Browser_Requirements]]) : accession number&lt;br /&gt;
* Agent is the archivist logged in at the time doing the accession (post-1.0, for 1.0 this will still be repository)&lt;br /&gt;
* Event name is &amp;quot;registration&amp;quot; (to be added to PREMIS events master list should we decide to implement)&lt;br /&gt;
* UUID&lt;br /&gt;
&lt;br /&gt;
* Also see Issue 787 on the Archivematica issues list&lt;br /&gt;
&lt;br /&gt;
=== Microservices Completed Before Move to Backlog ===&lt;br /&gt;
&lt;br /&gt;
* All transfer microservices&lt;br /&gt;
* Indexing: See [[Transfer_and_SIP_creation#Transfer_indexing_requirements_0.9_and_beyond]]&lt;br /&gt;
&lt;br /&gt;
=== Handling of Submission Documentation ===&lt;br /&gt;
&lt;br /&gt;
* [http://sites.tufts.edu/dca/about-us/research-initiatives/taper-tufts-accessioning-program-for-electronic-records/| TAPER]?&lt;br /&gt;
* Normalized with objects in AIP (0.8)&lt;br /&gt;
* Upload submission documentation with transfer in transfer tab - Issue 1255&lt;br /&gt;
&lt;br /&gt;
=== Search transfers from Archival Storage ===&lt;br /&gt;
&lt;br /&gt;
New sponsored development planned for Archivematica 1.6 or later will allow users to manage the transfer backlog through the Archival Storage tab, as outlined in general workflows described in these diagrams:&lt;br /&gt;
&lt;br /&gt;
[[File:Transfer_management_workflows.png|700px]]&lt;br /&gt;
&lt;br /&gt;
As outlined above, users will be able to:&lt;br /&gt;
&lt;br /&gt;
*Search transfers from archival storage tab&lt;br /&gt;
*Download copies of transfers or selected files from archival storage tab&lt;br /&gt;
*Be able to perform transfer deletion requests from archival storage tab&lt;br /&gt;
&lt;br /&gt;
'''Transfer search user stories'''&lt;br /&gt;
&lt;br /&gt;
As an archivist, I need to find transfers by searching...&lt;br /&gt;
&lt;br /&gt;
* by the name of the transfer&lt;br /&gt;
* by the date the transfer was stored in backlog&lt;br /&gt;
* by names of files within the transfer&lt;br /&gt;
* by....?&lt;br /&gt;
&lt;br /&gt;
'''Mockups: Version 1'''&lt;br /&gt;
&lt;br /&gt;
Search transfers from Archival Storage:&lt;br /&gt;
&lt;br /&gt;
[[File:Archival_Storage_Transfer_Search.png|800px]]&lt;br /&gt;
&lt;br /&gt;
'''Notes:''' &lt;br /&gt;
&lt;br /&gt;
*Click on &amp;quot;Show transfers&amp;quot; to search AIPs as well as Transfers&lt;br /&gt;
*A new column in the table indicates whether a package is a Transfer or an AIP.&lt;br /&gt;
*To trigger transfer deletion, click on red &amp;quot;remove&amp;quot; icon (same functionality as AIP deletion)&lt;br /&gt;
&lt;br /&gt;
Search files from transfers in Archival Storage:&lt;br /&gt;
&lt;br /&gt;
[[File:Archival_Storage_Transfer_file_search.png|800px]]&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
&lt;br /&gt;
*Clicking on both &amp;quot;Show files&amp;quot; and &amp;quot;Show transfers&amp;quot; before searching will load preview of files from transfer backlog.&lt;br /&gt;
*The UUID of the package and an indication of whether the file is from a Transfer or an AIP is in the right column.&lt;br /&gt;
&lt;br /&gt;
'''Mockups: Version 2'''&lt;br /&gt;
&lt;br /&gt;
In this version, toggling between searching for AIPs/Transfers is done through a tab at the top. This makes the development significantly less complicated, as we would not need to combine the Elasticsearch indexes for transfer METS and AIP METS.&lt;br /&gt;
&lt;br /&gt;
Transfer search:&lt;br /&gt;
&lt;br /&gt;
[[File:Transfer_search_v2.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Files within transfer search:&lt;br /&gt;
&lt;br /&gt;
[[File:Transfer_search_files_v2.png|800px]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Transfer_backlog_requirements&amp;diff=11746</id>
		<title>Transfer backlog requirements</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Transfer_backlog_requirements&amp;diff=11746"/>
		<updated>2017-03-27T18:59:15Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Add proposed changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[:Category:Development documentation|Development documentation]] &amp;gt; Transfer backlog requirements&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature requirements]]&lt;br /&gt;
&lt;br /&gt;
== Proposed improvements ==&lt;br /&gt;
&lt;br /&gt;
=== Handle cross-pipeline backlog ===&lt;br /&gt;
&lt;br /&gt;
March 2017&lt;br /&gt;
&lt;br /&gt;
'''Summary''': Transfers put into backlog should be able to be started as SIP (through the Appraisal tab, SIP arrange, or Backlog tab) on a different pipeline than they were put in backlog from.&lt;br /&gt;
&lt;br /&gt;
'''Problem''': Much of the information needed during Ingest is stored only in the database. If a Transfer is put into backlog and ingest is started on a different pipeline that information is not there.&lt;br /&gt;
&lt;br /&gt;
'''Proposed fix''':  The Transfer METS file should be improved to contain all information needed, which could be parsed back into the database at the start of ingest.&lt;br /&gt;
&lt;br /&gt;
We already parse a METS file into the database on full reingest, so there is precedent &amp;amp; examples for doing this.&lt;br /&gt;
&lt;br /&gt;
Tables needed include:&lt;br /&gt;
* Transfers&lt;br /&gt;
* Files&lt;br /&gt;
* DublinCore&lt;br /&gt;
* RightsStatement &amp;amp; related&lt;br /&gt;
* Events&lt;br /&gt;
* Agents (older version of AM?)&lt;br /&gt;
* FilesIdentifiedIDs (file ID info)&lt;br /&gt;
* FilesIDs (more file ID info)&lt;br /&gt;
* main_fpcommandoutput (characterization)&lt;br /&gt;
&lt;br /&gt;
== Original requirements ==&lt;br /&gt;
&lt;br /&gt;
Added in Archivematica 1.0&lt;br /&gt;
&lt;br /&gt;
=== Transfer Backlog Management ===&lt;br /&gt;
* Related issues: Issue 951, Issue 1220, Issue 1141, Issue 1225, Issue 1257&lt;br /&gt;
&lt;br /&gt;
=== Requirements for transfer backlog search ===&lt;br /&gt;
&lt;br /&gt;
* Add ability to search transfer backlog and send one or more transfers to Ingest&lt;br /&gt;
* Add ability to download and/or view files/transfers (via right click)&lt;br /&gt;
* Search the following fields: Any field, transfer name, file name, accession number, PUID, Mimetype, Date - Ingest&lt;br /&gt;
&lt;br /&gt;
=== Mockup of transfer backlog search ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:1.0_TransferBacklogSearch.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
[[File:1.0_TransBacklogSearchResults.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Transfer Workflow ===&lt;br /&gt;
&lt;br /&gt;
* Administration - allow MCP access to media or storage where transfer is located&lt;br /&gt;
* Assign accession number to transfer&lt;br /&gt;
* Remove transfer backup from workflow - no long processing configuration option&lt;br /&gt;
* Add Send transfer to backlog microservice&lt;br /&gt;
* Add Search transfer backlog tab from Ingest in Dashboard&lt;br /&gt;
* Add ability to download and/or view transfers and files from Search tab&lt;br /&gt;
* Add ability to send transfers from backlog search to Ingest/Create SIP (checkboxes, send button)&lt;br /&gt;
* see workflow diagrams below &lt;br /&gt;
&lt;br /&gt;
'''0.9 Transfer workflow'''&lt;br /&gt;
&lt;br /&gt;
* grey steps are automated, white are manual&lt;br /&gt;
&lt;br /&gt;
[[File:transferWorkflow0.9.png|680px|thumb|center|]]&lt;br /&gt;
[[File:transferWorkflow0.9pt2.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
[[Media:transferWorkflow0.9.pdf|transferWorkflow0.9.pdf]]&lt;br /&gt;
&lt;br /&gt;
=== Administration Tab in Dashboard ===&lt;br /&gt;
&lt;br /&gt;
* Assign permission and access to the MCPServer to copy from transfer media (hard drives, optical media, USB, etc.) or network location. &lt;br /&gt;
* Assign transfer backlog locations (configuration is done outside of AM)&lt;br /&gt;
* Assign source directories&lt;br /&gt;
* Define transfer types&lt;br /&gt;
* Assign report locations (post-1.0)&lt;br /&gt;
* Set AIP storage location&lt;br /&gt;
* Set DIP upload location&lt;br /&gt;
&lt;br /&gt;
=== Accession metadata ===&lt;br /&gt;
&lt;br /&gt;
* PREMIS Event = Registration&lt;br /&gt;
         &amp;lt;event&amp;gt;&lt;br /&gt;
            &amp;lt;eventIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierType&amp;gt;UUID&amp;lt;/eventIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierValue&amp;gt;35cbe00d-d661-4174-b11a-e203f5608008&amp;lt;/eventIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/eventIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;eventType&amp;gt;registration&amp;lt;/eventType&amp;gt;&lt;br /&gt;
            &amp;lt;eventDateTime&amp;gt;2012-03-14&amp;lt;/eventDateTime&amp;gt;&lt;br /&gt;
            &amp;lt;eventDetail&amp;gt;&amp;lt;/eventDetail&amp;gt;&lt;br /&gt;
            &amp;lt;eventOutcomeInformation&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcome&amp;gt;&amp;lt;/eventOutcome&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcomeDetail&amp;gt;&lt;br /&gt;
                &amp;lt;eventOutcomeDetailNote&amp;gt;accession#2012-029&amp;lt;/eventOutcomeDetailNote&amp;gt;&lt;br /&gt;
              &amp;lt;/eventOutcomeDetail&amp;gt;&lt;br /&gt;
            &amp;lt;/eventOutcomeInformation&amp;gt;&lt;br /&gt;
            &amp;lt;linkingAgentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierType&amp;gt;archivist&amp;lt;/linkingAgentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierValue&amp;gt;Courtney Mumma&amp;lt;/linkingAgentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/linkingAgentIdentifier&amp;gt;&lt;br /&gt;
          &amp;lt;/event&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Manually input metadata in template on dashboard (See [[File_Browser_Requirements]]) : accession number&lt;br /&gt;
* Agent is the archivist logged in at the time doing the accession (post-1.0, for 1.0 this will still be repository)&lt;br /&gt;
* Event name is &amp;quot;registration&amp;quot; (to be added to PREMIS events master list should we decide to implement)&lt;br /&gt;
* UUID&lt;br /&gt;
&lt;br /&gt;
* Also see Issue 787 on the Archivematica issues list&lt;br /&gt;
&lt;br /&gt;
=== Microservices Completed Before Move to Backlog ===&lt;br /&gt;
&lt;br /&gt;
* All transfer microservices&lt;br /&gt;
* Indexing: See [[Transfer_and_SIP_creation#Transfer_indexing_requirements_0.9_and_beyond]]&lt;br /&gt;
&lt;br /&gt;
=== Handling of Submission Documentation ===&lt;br /&gt;
&lt;br /&gt;
* [http://sites.tufts.edu/dca/about-us/research-initiatives/taper-tufts-accessioning-program-for-electronic-records/| TAPER]?&lt;br /&gt;
* Normalized with objects in AIP (0.8)&lt;br /&gt;
* Upload submission documentation with transfer in transfer tab - Issue 1255&lt;br /&gt;
&lt;br /&gt;
=== Search transfers from Archival Storage ===&lt;br /&gt;
&lt;br /&gt;
New sponsored development planned for Archivematica 1.6 or later will allow users to manage the transfer backlog through the Archival Storage tab, as outlined in general workflows described in these diagrams:&lt;br /&gt;
&lt;br /&gt;
[[File:Transfer_management_workflows.png|700px]]&lt;br /&gt;
&lt;br /&gt;
As outlined above, users will be able to:&lt;br /&gt;
&lt;br /&gt;
*Search transfers from archival storage tab&lt;br /&gt;
*Download copies of transfers or selected files from archival storage tab&lt;br /&gt;
*Be able to perform transfer deletion requests from archival storage tab&lt;br /&gt;
&lt;br /&gt;
'''Transfer search user stories'''&lt;br /&gt;
&lt;br /&gt;
As an archivist, I need to find transfers by searching...&lt;br /&gt;
&lt;br /&gt;
* by the name of the transfer&lt;br /&gt;
* by the date the transfer was stored in backlog&lt;br /&gt;
* by names of files within the transfer&lt;br /&gt;
* by....?&lt;br /&gt;
&lt;br /&gt;
'''Mockups: Version 1'''&lt;br /&gt;
&lt;br /&gt;
Search transfers from Archival Storage:&lt;br /&gt;
&lt;br /&gt;
[[File:Archival_Storage_Transfer_Search.png|800px]]&lt;br /&gt;
&lt;br /&gt;
'''Notes:''' &lt;br /&gt;
&lt;br /&gt;
*Click on &amp;quot;Show transfers&amp;quot; to search AIPs as well as Transfers&lt;br /&gt;
*A new column in the table indicates whether a package is a Transfer or an AIP.&lt;br /&gt;
*To trigger transfer deletion, click on red &amp;quot;remove&amp;quot; icon (same functionality as AIP deletion)&lt;br /&gt;
&lt;br /&gt;
Search files from transfers in Archival Storage:&lt;br /&gt;
&lt;br /&gt;
[[File:Archival_Storage_Transfer_file_search.png|800px]]&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
&lt;br /&gt;
*Clicking on both &amp;quot;Show files&amp;quot; and &amp;quot;Show transfers&amp;quot; before searching will load preview of files from transfer backlog.&lt;br /&gt;
*The UUID of the package and an indication of whether the file is from a Transfer or an AIP is in the right column.&lt;br /&gt;
&lt;br /&gt;
'''Mockups: Version 2'''&lt;br /&gt;
&lt;br /&gt;
In this version, toggling between searching for AIPs/Transfers is done through a tab at the top. This makes the development significantly less complicated, as we would not need to combine the Elasticsearch indexes for transfer METS and AIP METS.&lt;br /&gt;
&lt;br /&gt;
Transfer search:&lt;br /&gt;
&lt;br /&gt;
[[File:Transfer_search_v2.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Files within transfer search:&lt;br /&gt;
&lt;br /&gt;
[[File:Transfer_search_files_v2.png|800px]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Transfer_backlog_requirements&amp;diff=11745</id>
		<title>Transfer backlog requirements</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Transfer_backlog_requirements&amp;diff=11745"/>
		<updated>2017-03-27T18:47:55Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move original reqs to subheading&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[:Category:Development documentation|Development documentation]] &amp;gt; Transfer backlog requirements&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature requirements]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Original requirements ==&lt;br /&gt;
&lt;br /&gt;
Added in Archivematica 1.0&lt;br /&gt;
&lt;br /&gt;
=== Transfer Backlog Management ===&lt;br /&gt;
* Related issues: Issue 951, Issue 1220, Issue 1141, Issue 1225, Issue 1257&lt;br /&gt;
&lt;br /&gt;
=== Requirements for transfer backlog search ===&lt;br /&gt;
&lt;br /&gt;
* Add ability to search transfer backlog and send one or more transfers to Ingest&lt;br /&gt;
* Add ability to download and/or view files/transfers (via right click)&lt;br /&gt;
* Search the following fields: Any field, transfer name, file name, accession number, PUID, Mimetype, Date - Ingest&lt;br /&gt;
&lt;br /&gt;
=== Mockup of transfer backlog search ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:1.0_TransferBacklogSearch.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
[[File:1.0_TransBacklogSearchResults.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
=== Transfer Workflow ===&lt;br /&gt;
&lt;br /&gt;
* Administration - allow MCP access to media or storage where transfer is located&lt;br /&gt;
* Assign accession number to transfer&lt;br /&gt;
* Remove transfer backup from workflow - no long processing configuration option&lt;br /&gt;
* Add Send transfer to backlog microservice&lt;br /&gt;
* Add Search transfer backlog tab from Ingest in Dashboard&lt;br /&gt;
* Add ability to download and/or view transfers and files from Search tab&lt;br /&gt;
* Add ability to send transfers from backlog search to Ingest/Create SIP (checkboxes, send button)&lt;br /&gt;
* see workflow diagrams below &lt;br /&gt;
&lt;br /&gt;
'''0.9 Transfer workflow'''&lt;br /&gt;
&lt;br /&gt;
* grey steps are automated, white are manual&lt;br /&gt;
&lt;br /&gt;
[[File:transferWorkflow0.9.png|680px|thumb|center|]]&lt;br /&gt;
[[File:transferWorkflow0.9pt2.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
[[Media:transferWorkflow0.9.pdf|transferWorkflow0.9.pdf]]&lt;br /&gt;
&lt;br /&gt;
=== Administration Tab in Dashboard ===&lt;br /&gt;
&lt;br /&gt;
* Assign permission and access to the MCPServer to copy from transfer media (hard drives, optical media, USB, etc.) or network location. &lt;br /&gt;
* Assign transfer backlog locations (configuration is done outside of AM)&lt;br /&gt;
* Assign source directories&lt;br /&gt;
* Define transfer types&lt;br /&gt;
* Assign report locations (post-1.0)&lt;br /&gt;
* Set AIP storage location&lt;br /&gt;
* Set DIP upload location&lt;br /&gt;
&lt;br /&gt;
=== Accession metadata ===&lt;br /&gt;
&lt;br /&gt;
* PREMIS Event = Registration&lt;br /&gt;
         &amp;lt;event&amp;gt;&lt;br /&gt;
            &amp;lt;eventIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierType&amp;gt;UUID&amp;lt;/eventIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierValue&amp;gt;35cbe00d-d661-4174-b11a-e203f5608008&amp;lt;/eventIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/eventIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;eventType&amp;gt;registration&amp;lt;/eventType&amp;gt;&lt;br /&gt;
            &amp;lt;eventDateTime&amp;gt;2012-03-14&amp;lt;/eventDateTime&amp;gt;&lt;br /&gt;
            &amp;lt;eventDetail&amp;gt;&amp;lt;/eventDetail&amp;gt;&lt;br /&gt;
            &amp;lt;eventOutcomeInformation&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcome&amp;gt;&amp;lt;/eventOutcome&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcomeDetail&amp;gt;&lt;br /&gt;
                &amp;lt;eventOutcomeDetailNote&amp;gt;accession#2012-029&amp;lt;/eventOutcomeDetailNote&amp;gt;&lt;br /&gt;
              &amp;lt;/eventOutcomeDetail&amp;gt;&lt;br /&gt;
            &amp;lt;/eventOutcomeInformation&amp;gt;&lt;br /&gt;
            &amp;lt;linkingAgentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierType&amp;gt;archivist&amp;lt;/linkingAgentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierValue&amp;gt;Courtney Mumma&amp;lt;/linkingAgentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/linkingAgentIdentifier&amp;gt;&lt;br /&gt;
          &amp;lt;/event&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Manually input metadata in template on dashboard (See [[File_Browser_Requirements]]) : accession number&lt;br /&gt;
* Agent is the archivist logged in at the time doing the accession (post-1.0, for 1.0 this will still be repository)&lt;br /&gt;
* Event name is &amp;quot;registration&amp;quot; (to be added to PREMIS events master list should we decide to implement)&lt;br /&gt;
* UUID&lt;br /&gt;
&lt;br /&gt;
* Also see Issue 787 on the Archivematica issues list&lt;br /&gt;
&lt;br /&gt;
=== Microservices Completed Before Move to Backlog ===&lt;br /&gt;
&lt;br /&gt;
* All transfer microservices&lt;br /&gt;
* Indexing: See [[Transfer_and_SIP_creation#Transfer_indexing_requirements_0.9_and_beyond]]&lt;br /&gt;
&lt;br /&gt;
=== Handling of Submission Documentation ===&lt;br /&gt;
&lt;br /&gt;
* [http://sites.tufts.edu/dca/about-us/research-initiatives/taper-tufts-accessioning-program-for-electronic-records/| TAPER]?&lt;br /&gt;
* Normalized with objects in AIP (0.8)&lt;br /&gt;
* Upload submission documentation with transfer in transfer tab - Issue 1255&lt;br /&gt;
&lt;br /&gt;
=== Search transfers from Archival Storage ===&lt;br /&gt;
&lt;br /&gt;
New sponsored development planned for Archivematica 1.6 or later will allow users to manage the transfer backlog through the Archival Storage tab, as outlined in general workflows described in these diagrams:&lt;br /&gt;
&lt;br /&gt;
[[File:Transfer_management_workflows.png|700px]]&lt;br /&gt;
&lt;br /&gt;
As outlined above, users will be able to:&lt;br /&gt;
&lt;br /&gt;
*Search transfers from archival storage tab&lt;br /&gt;
*Download copies of transfers or selected files from archival storage tab&lt;br /&gt;
*Be able to perform transfer deletion requests from archival storage tab&lt;br /&gt;
&lt;br /&gt;
'''Transfer search user stories'''&lt;br /&gt;
&lt;br /&gt;
As an archivist, I need to find transfers by searching...&lt;br /&gt;
&lt;br /&gt;
* by the name of the transfer&lt;br /&gt;
* by the date the transfer was stored in backlog&lt;br /&gt;
* by names of files within the transfer&lt;br /&gt;
* by....?&lt;br /&gt;
&lt;br /&gt;
'''Mockups: Version 1'''&lt;br /&gt;
&lt;br /&gt;
Search transfers from Archival Storage:&lt;br /&gt;
&lt;br /&gt;
[[File:Archival_Storage_Transfer_Search.png|800px]]&lt;br /&gt;
&lt;br /&gt;
'''Notes:''' &lt;br /&gt;
&lt;br /&gt;
*Click on &amp;quot;Show transfers&amp;quot; to search AIPs as well as Transfers&lt;br /&gt;
*A new column in the table indicates whether a package is a Transfer or an AIP.&lt;br /&gt;
*To trigger transfer deletion, click on red &amp;quot;remove&amp;quot; icon (same functionality as AIP deletion)&lt;br /&gt;
&lt;br /&gt;
Search files from transfers in Archival Storage:&lt;br /&gt;
&lt;br /&gt;
[[File:Archival_Storage_Transfer_file_search.png|800px]]&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
&lt;br /&gt;
*Clicking on both &amp;quot;Show files&amp;quot; and &amp;quot;Show transfers&amp;quot; before searching will load preview of files from transfer backlog.&lt;br /&gt;
*The UUID of the package and an indication of whether the file is from a Transfer or an AIP is in the right column.&lt;br /&gt;
&lt;br /&gt;
'''Mockups: Version 2'''&lt;br /&gt;
&lt;br /&gt;
In this version, toggling between searching for AIPs/Transfers is done through a tab at the top. This makes the development significantly less complicated, as we would not need to combine the Elasticsearch indexes for transfer METS and AIP METS.&lt;br /&gt;
&lt;br /&gt;
Transfer search:&lt;br /&gt;
&lt;br /&gt;
[[File:Transfer_search_v2.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Files within transfer search:&lt;br /&gt;
&lt;br /&gt;
[[File:Transfer_search_files_v2.png|800px]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Merging&amp;diff=11744</id>
		<title>Merging</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Merging&amp;diff=11744"/>
		<updated>2017-03-23T23:33:48Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Add code review section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; Merging &amp;amp; Branches&lt;br /&gt;
&lt;br /&gt;
== Branching guidelines ==&lt;br /&gt;
&lt;br /&gt;
Guidelines on when to create branches for new development in Archivematica projects.  Short answer: always create branches!&lt;br /&gt;
&lt;br /&gt;
* All development work happens in branches - nothing is committed directly to master, qa/ or stable/ branches&lt;br /&gt;
* Development branches should follow the naming format: &amp;lt;code&amp;gt;dev/issue-####-short-description&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;dev/&amp;lt;/code&amp;gt; marks it as being a development branch, not for QA integration or a stable release&lt;br /&gt;
** &amp;lt;code&amp;gt;issue-####&amp;lt;/code&amp;gt; is the Redmine ticket that the work is mostly related to.  If the branch expands in scope to include multiple tickets later, that's fine, and don't worry about renaming branches&lt;br /&gt;
** &amp;lt;code&amp;gt;short-description&amp;lt;/code&amp;gt; is a couple word description of the branch, to make it easier to remember what the topic of the branch is.&lt;br /&gt;
** Example: &amp;lt;code&amp;gt;dev/issue-8161-dashboard-i18n&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;dev/issue-8693-dataverse&amp;lt;/code&amp;gt;&lt;br /&gt;
* Development branches should generally be create from the branch they will be merged into. In most cases, this is master, qa/1.x (Archivematica) or qa/0.x (Storage Service). If something is a patch for an old release, it may be more appropriate to branch from the old stable branch (e.g. stable/1.5.x)&lt;br /&gt;
* All branches should undergo code review before being merged into the target branch. If something was developed for an old release, it should be cherry-picked to the current development branch, and a comment with the commit hash should be left in the pull request for tracking.&lt;br /&gt;
&lt;br /&gt;
== Code review &amp;amp; approval ==&lt;br /&gt;
&lt;br /&gt;
All code changes merged into a stable or qa branch must go through code review.  We use Github's pull request feature for code review. Every change being submitted to an Artefactual project should be submitted as a pull request to the appropriate repository. &lt;br /&gt;
&lt;br /&gt;
Another core contributor (usually an Artefactual employee) will review the code for content, style and suitability in the project. A more extensive guideline to code review is [https://github.com/artefactual/archivematica/pull/547 also available].  (TODO update after PR is merged).  After the reviewer is satisfied with the code, they will approve it on github. If at least one reviewer approves, and there are no disapprovals, the branch can be merged.&lt;br /&gt;
&lt;br /&gt;
In general, the original contributor will [[#Merge process | merge the branch]].  For external contributions, the reviewer can merge or cherry-pick the commits.  This will leave the Author correct in git, but update the committer.&lt;br /&gt;
&lt;br /&gt;
== Merge process ==&lt;br /&gt;
&lt;br /&gt;
We use a rebase-based workflow, where branches are brought up to date with the latest stable by rebasing them. (This is compared to a merge-based workflow, where branches are merged, and conflicts resolved in the merge commit).  This shows the process for merging development branch &amp;lt;code&amp;gt;dev/test&amp;lt;/code&amp;gt; into target branch &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;.  The target branch is usually master, qa/0.x or qa/1.x.&lt;br /&gt;
&lt;br /&gt;
The instructions are formatted: &amp;lt;code&amp;gt;(current branch) $ &amp;lt;command to run&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Check your remote is set to be gitolite&lt;br /&gt;
#* &amp;lt;code&amp;gt;$ git remote -v&amp;lt;/code&amp;gt; should show &amp;lt;code&amp;gt;origin  git@git.artefactual.com:&amp;lt;repository-name&amp;gt;.git&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Not all repositories have gitolite as the canonical repo - ask if you're unsure&lt;br /&gt;
# Ensure your copy of the target branch is up to date&lt;br /&gt;
#* &amp;lt;code&amp;gt;$ git checkout master&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;(master) $ git pull --rebase &amp;lt;/code&amp;gt;&lt;br /&gt;
# Ensure your development branch is based off the latest target branch&lt;br /&gt;
#* &amp;lt;code&amp;gt;$ git checkout dev/test&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;(dev/test) $ git rebase master&amp;lt;/code&amp;gt;&lt;br /&gt;
# Check that your changes still work after rebasing&lt;br /&gt;
# Check tests pass (see https://wiki.archivematica.org/Getting_started#Tests for more details)&lt;br /&gt;
#* &amp;lt;code&amp;gt;(dev/test) $ py.test&amp;lt;/code&amp;gt;&lt;br /&gt;
# Push your newly-rebased branch to remote.  Because this is a rebase, which changes history, you'll need --force. The rebased dev branch has to be pushed before the master branch is or github gets confused.&lt;br /&gt;
#* '''Never force push on a stable/, qa/ or master branch!'''&lt;br /&gt;
#* &amp;lt;code&amp;gt;(dev/test) $ git push -f&amp;lt;/code&amp;gt;&lt;br /&gt;
# Fast-forward merge&lt;br /&gt;
#* &amp;lt;code&amp;gt;$ git checkout master&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;(master) $ git merge dev/test&amp;lt;/code&amp;gt;&lt;br /&gt;
# Push merge!&lt;br /&gt;
#* &amp;lt;code&amp;gt;(master) $ git push&amp;lt;/code&amp;gt;&lt;br /&gt;
# Delete dev branch&lt;br /&gt;
#* Locally: &amp;lt;code&amp;gt;(master) $ git branch -d dev/test&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Remote: &amp;lt;code&amp;gt;(master) $ git push origin --delete dev/test&amp;lt;/code&amp;gt;&lt;br /&gt;
# Update the related ticket, if needed&lt;br /&gt;
# You're done!&lt;br /&gt;
&lt;br /&gt;
== Proposed changes ==&lt;br /&gt;
&lt;br /&gt;
=== Forks ===&lt;br /&gt;
&lt;br /&gt;
* '''Current status''': All development branches are created in the artefactual (or artefactual-labs) owned repository, and core contributors (usually Artefactual employees) commit directly to the official repository&lt;br /&gt;
* '''Proposed change''': Development happens in contributor's forks, and the official repo contains only stable &amp;amp; QA branches&lt;br /&gt;
* '''Pros''':&lt;br /&gt;
** Fewer branches in the official repository, so there is less clutter and noise for people watching activity&lt;br /&gt;
** Handles more contributors, since there won't be dozens or hundreds of branches of uncertain development status&lt;br /&gt;
** Contribution process is the same for external and internal contributors&lt;br /&gt;
** Contributors can handle their repository branches however they want - naming conventions, deleting old branches or not, etc&lt;br /&gt;
* '''Cons''':&lt;br /&gt;
** Potential confusion about which repository is the correct official one&lt;br /&gt;
** Potential to push changes to the wrong repo (e.g. push a development branch to the official repo instead of the contributor's fork)&lt;br /&gt;
** Developers have to keep 2 repositories up to date: upstream and their fork&lt;br /&gt;
** Harder for analysts to check out development code, since they would have to set their remote to the contributor's fork&lt;br /&gt;
&lt;br /&gt;
=== Hybrid merge/rebase model ===&lt;br /&gt;
&lt;br /&gt;
* '''Current status''': All branches are rebased onto their target branch before being (fast-forward) merged&lt;br /&gt;
* '''Proposed change''': Small or minor branches are rebased, larger feature branches are true merged&lt;br /&gt;
* '''Pros''':&lt;br /&gt;
** Commit history clearly shows 'feature', and which commits came in together as a unit&lt;br /&gt;
** Rebasing small branches preserves clean history for minor changes&lt;br /&gt;
** Better reflects nature of development - shows minor changes as happening inline, and major changes as happening in parallel&lt;br /&gt;
** Merge commits are clear places to look for integration issues&lt;br /&gt;
* '''Cons''':&lt;br /&gt;
** Confusion about when to merged vs rebase&lt;br /&gt;
** Developers have to learn two workflows&lt;br /&gt;
&lt;br /&gt;
[[Category:Process documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Category:Development_documentation&amp;diff=11741</id>
		<title>Category:Development documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Category:Development_documentation&amp;diff=11741"/>
		<updated>2017-03-23T22:49:36Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Link other categories&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; Development documentation&lt;br /&gt;
&lt;br /&gt;
Archivematica is a web- and standards-based, open-source application which allows institutions to preserve long-term access to trustworthy, authentic and reliable digital content. Our target users are archivists, librarians, and anyone working to preserve digital objects. &lt;br /&gt;
&lt;br /&gt;
The Archivematica project consists of several projects working together:&lt;br /&gt;
* Archivematica: Main repository containing the user-facing dashboard, task manager MCPServer and clients scripts for the MCPClient. Also referred to as a pipeline&lt;br /&gt;
** [[Dashboard]]: User-facing web GUI written in Django. This is where Transfer and SIP process can be monitored and directed, and gives access to the backlog and archival storage.&lt;br /&gt;
** [[MCPServer]]: Task manager using gearman that determines what scripts to run next and what to do on error&lt;br /&gt;
** [[MCPClient]]: Gearman worker that dispatches jobs to the various scripts&lt;br /&gt;
*** Client scripts: The actual scripts that do the processing. Most are written in Python, some in bash or other tools.&lt;br /&gt;
* [[Storage Service]]: Responsible for moving files to Archivematica for processing, and from Archivematica into storage&lt;br /&gt;
* [[ Format_policy_registry_requirements | Format Policy Registry]]: Submodule shared between Archivematica and the Format Policy Registry (FPR) server that displays and updates FPR rules and commands&lt;br /&gt;
&lt;br /&gt;
Detailed feature descriptions live in the subcategory [[:Category:Feature requirements]].  These may be complete, in progress, or just ideas.  Documentation for old versions that is no longer valid in current Archivematica is moved to [[:Category:Deprecated]].&lt;br /&gt;
&lt;br /&gt;
See also [[:Category:Process documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Development&amp;diff=11739</id>
		<title>Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Development&amp;diff=11739"/>
		<updated>2017-03-23T22:47:13Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: /* Developer Resources */ Add link to process docs category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; Development&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page lists the resources available for project contributors:&lt;br /&gt;
&lt;br /&gt;
==Project Communication==&lt;br /&gt;
* [http://groups.google.ca/group/archivematica Discussion list]&lt;br /&gt;
* Archivematica.org wiki: [[Special:UserLogin|create an account]] to correct and add content on this wiki&lt;br /&gt;
* Issue tracking&lt;br /&gt;
** [https://projects.artefactual.com/projects/archivematica Archivematica]&lt;br /&gt;
** [https://projects.artefactual.com/projects/archivematica-storage-service Archivematica Storage Service]&lt;br /&gt;
** [https://projects.artefactual.com/projects/preservation-planning-module Format Policy Registry common]&lt;br /&gt;
&lt;br /&gt;
==Developer Resources==&lt;br /&gt;
* [[Getting started]]&lt;br /&gt;
* [https://github.com/artefactual/archivematica Code repository]&lt;br /&gt;
* [[:Category:Development documentation|Development documentation]]&lt;br /&gt;
* [[:Category:Process documentation|Process documentation]] &amp;amp; contributing code&lt;br /&gt;
** [[Contributor Agreement]]&lt;br /&gt;
** [[License]]&lt;br /&gt;
** [[Trademark]]&lt;br /&gt;
* [[Development_roadmap:_Archivematica|Development roadmap]]&lt;br /&gt;
&lt;br /&gt;
==Project Management==&lt;br /&gt;
Archivematica software development, release management, and community support is managed by [http://artefactual.com Artefactual Systems] in collaboration with its contract clients and a growing network of Archivematica users and service partners.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Merging&amp;diff=11738</id>
		<title>Merging</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Merging&amp;diff=11738"/>
		<updated>2017-03-23T22:46:20Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Copied from internal wiki docs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; Merging &amp;amp; Branches&lt;br /&gt;
&lt;br /&gt;
== Archivematica branching guidelines ==&lt;br /&gt;
&lt;br /&gt;
Guidelines on when to create branches for new development in Archivematica projects.  Short answer: always create branches!&lt;br /&gt;
&lt;br /&gt;
* All development work happens in branches - nothing is committed directly to master, qa/ or stable/ branches&lt;br /&gt;
* Development branches should follow the naming format: &amp;lt;code&amp;gt;dev/issue-####-short-description&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;dev/&amp;lt;/code&amp;gt; marks it as being a development branch, not for QA integration or a stable release&lt;br /&gt;
** &amp;lt;code&amp;gt;issue-####&amp;lt;/code&amp;gt; is the Redmine ticket that the work is mostly related to.  If the branch expands in scope to include multiple tickets later, that's fine, and don't worry about renaming branches&lt;br /&gt;
** &amp;lt;code&amp;gt;short-description&amp;lt;/code&amp;gt; is a couple word description of the branch, to make it easier to remember what the topic of the branch is.&lt;br /&gt;
** Example: &amp;lt;code&amp;gt;dev/issue-8161-dashboard-i18n&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;dev/issue-8693-dataverse&amp;lt;/code&amp;gt;&lt;br /&gt;
* Development branches should generally be create from the branch they will be merged into. In most cases, this is master, qa/1.x (Archivematica) or qa/0.x (Storage Service). If something is a patch for an old release, it may be more appropriate to branch from the old stable branch (e.g. stable/1.5.x)&lt;br /&gt;
* All branches should undergo code review before being merged into the target branch. If something was developed for an old release, it should be cherry-picked to the current development branch, and a comment with the commit hash should be left in the pull request for tracking.&lt;br /&gt;
&lt;br /&gt;
== Archivematica merge process ==&lt;br /&gt;
&lt;br /&gt;
We use a rebase-based workflow, where branches are brought up to date with the latest stable by rebasing them. (This is compared to a merge-based workflow, where branches are merged, and conflicts resolved in the merge commit).  This shows the process for merging development branch &amp;lt;code&amp;gt;dev/test&amp;lt;/code&amp;gt; into target branch &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;.  The target branch is usually master, qa/0.x or qa/1.x.&lt;br /&gt;
&lt;br /&gt;
The instructions are formatted: &amp;lt;code&amp;gt;(current branch) $ &amp;lt;command to run&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Check your remote is set to be gitolite&lt;br /&gt;
#* &amp;lt;code&amp;gt;$ git remote -v&amp;lt;/code&amp;gt; should show &amp;lt;code&amp;gt;origin  git@git.artefactual.com:&amp;lt;repository-name&amp;gt;.git&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Not all repositories have gitolite as the canonical repo - ask if you're unsure&lt;br /&gt;
# Ensure your copy of the target branch is up to date&lt;br /&gt;
#* &amp;lt;code&amp;gt;$ git checkout master&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;(master) $ git pull --rebase &amp;lt;/code&amp;gt;&lt;br /&gt;
# Ensure your development branch is based off the latest target branch&lt;br /&gt;
#* &amp;lt;code&amp;gt;$ git checkout dev/test&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;(dev/test) $ git rebase master&amp;lt;/code&amp;gt;&lt;br /&gt;
# Check that your changes still work after rebasing&lt;br /&gt;
# Check tests pass (see https://wiki.archivematica.org/Getting_started#Tests for more details)&lt;br /&gt;
#* &amp;lt;code&amp;gt;(dev/test) $ py.test&amp;lt;/code&amp;gt;&lt;br /&gt;
# Push your newly-rebased branch to remote.  Because this is a rebase, which changes history, you'll need --force. The rebased dev branch has to be pushed before the master branch is or github gets confused.&lt;br /&gt;
#* '''Never force push on a stable/, qa/ or master branch!'''&lt;br /&gt;
#* &amp;lt;code&amp;gt;(dev/test) $ git push -f&amp;lt;/code&amp;gt;&lt;br /&gt;
# Fast-forward merge&lt;br /&gt;
#* &amp;lt;code&amp;gt;$ git checkout master&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;(master) $ git merge dev/test&amp;lt;/code&amp;gt;&lt;br /&gt;
# Push merge!&lt;br /&gt;
#* &amp;lt;code&amp;gt;(master) $ git push&amp;lt;/code&amp;gt;&lt;br /&gt;
# Delete dev branch&lt;br /&gt;
#* Locally: &amp;lt;code&amp;gt;(master) $ git branch -d dev/test&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Remote: &amp;lt;code&amp;gt;(master) $ git push origin --delete dev/test&amp;lt;/code&amp;gt;&lt;br /&gt;
# Update the related ticket, if needed&lt;br /&gt;
# You're done!&lt;br /&gt;
&lt;br /&gt;
== Proposed changes ==&lt;br /&gt;
&lt;br /&gt;
=== Forks ===&lt;br /&gt;
&lt;br /&gt;
* '''Current status''': All development branches are created in the artefactual (or artefactual-labs) owned repository, and core contributors (usually Artefactual employees) commit directly to the official repository&lt;br /&gt;
* '''Proposed change''': Development happens in contributor's forks, and the official repo contains only stable &amp;amp; QA branches&lt;br /&gt;
* '''Pros''':&lt;br /&gt;
** Fewer branches in the official repository, so there is less clutter and noise for people watching activity&lt;br /&gt;
** Handles more contributors, since there won't be dozens or hundreds of branches of uncertain development status&lt;br /&gt;
** Contribution process is the same for external and internal contributors&lt;br /&gt;
** Contributors can handle their repository branches however they want - naming conventions, deleting old branches or not, etc&lt;br /&gt;
* '''Cons''':&lt;br /&gt;
** Potential confusion about which repository is the correct official one&lt;br /&gt;
** Potential to push changes to the wrong repo (e.g. push a development branch to the official repo instead of the contributor's fork)&lt;br /&gt;
** Developers have to keep 2 repositories up to date: upstream and their fork&lt;br /&gt;
** Harder for analysts to check out development code, since they would have to set their remote to the contributor's fork&lt;br /&gt;
&lt;br /&gt;
=== Hybrid merge/rebase model ===&lt;br /&gt;
&lt;br /&gt;
* '''Current status''': All branches are rebased onto their target branch before being (fast-forward) merged&lt;br /&gt;
* '''Proposed change''': Small or minor branches are rebased, larger feature branches are true merged&lt;br /&gt;
* '''Pros''':&lt;br /&gt;
** Commit history clearly shows 'feature', and which commits came in together as a unit&lt;br /&gt;
** Rebasing small branches preserves clean history for minor changes&lt;br /&gt;
** Better reflects nature of development - shows minor changes as happening inline, and major changes as happening in parallel&lt;br /&gt;
** Merge commits are clear places to look for integration issues&lt;br /&gt;
* '''Cons''':&lt;br /&gt;
** Confusion about when to merged vs rebase&lt;br /&gt;
** Developers have to learn two workflows&lt;br /&gt;
&lt;br /&gt;
[[Category:Process documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Category:Process_documentation&amp;diff=11737</id>
		<title>Category:Process documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Category:Process_documentation&amp;diff=11737"/>
		<updated>2017-03-23T22:43:45Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Initial stub&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; Process documentation&lt;br /&gt;
&lt;br /&gt;
This category describes the processes Archivematica and related projects use.&lt;br /&gt;
&lt;br /&gt;
For development documentation, see [[:Category:Development documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Contributor_Agreement&amp;diff=11735</id>
		<title>Contributor Agreement</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Contributor_Agreement&amp;diff=11735"/>
		<updated>2017-03-23T22:41:25Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Add to process documentation category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[Contribute code]] &amp;gt; Archivematica Contributor's Agreement&lt;br /&gt;
&lt;br /&gt;
In order for the Archivematica development team to accept any patches or code commits, contributors must first sign this '''[[Media:Contributor_agreement.txt|Contributor Agreement]]'''. &lt;br /&gt;
&lt;br /&gt;
==Why do I have to sign a Contributor's Agreement?==&lt;br /&gt;
One of the key challenges for open source software is to support a collaborative development environment while protecting the rights of contributors and users over the long-term. Unifying Archivematica copyrights through contributor agreements is the best way to protect the availability and sustainability of Archivematica over the long-term as free and open-source software. In all cases, contributors who sign the Contributor's Agreement retain full rights to use their original contributions for any other purpose outside of Archivematica, while enabling Artefactual Systems, any successor Foundation which may eventually take over responsibility for Archivematica, and the wider Archivematica community to benefit from their collaboration and contributions in this open source project.&lt;br /&gt;
&lt;br /&gt;
[http://artefactual.com Artefactual Systems] has made the decision and has a proven track record of making our intellectual property available to the community at large. By standardizing contributions on these agreements the Archivematica intellectual property position does not become too complicated. This ensures our resources are devoted to making our project the best they can be, rather than fighting legal battles over contributions.&lt;br /&gt;
&lt;br /&gt;
==Do you have examples of Contributor's Agreements from other projects?==&lt;br /&gt;
The Archivematica contributor's agreement is based almost verbatim on the [http://apache.org Apache Foundation]'s individual [http://www.apache.org/licenses/icla.txt contributor license]. &lt;br /&gt;
&lt;br /&gt;
Examples from other projects include: [https://www.irods.org/index.php/iRODS_Contributor%E2%80%99s_Agreement iRODS] and [http://www.canonical.com/sites/default/files/active/images/Canonical-HA-CLA-ANY-I.pdf Ubuntu] (Canonical).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Process documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Contribute_code&amp;diff=11734</id>
		<title>Contribute code</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Contribute_code&amp;diff=11734"/>
		<updated>2017-03-23T22:40:59Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Add to process documentation category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; Contribute code&lt;br /&gt;
&lt;br /&gt;
Expanded contribution guidelines can also be found in the Archivematica [https://github.com/artefactual/archivematica/blob/qa/1.x/CONTRIBUTING.md contributing document].&lt;br /&gt;
&lt;br /&gt;
[[Category:Process documentation]]&lt;br /&gt;
&lt;br /&gt;
==Patches==&lt;br /&gt;
&lt;br /&gt;
If you find a bug in this project or would like to make an enhancement, please be encouraged to contribute code via a pull request.  Archivematica code is available on github. We will accept git pull requests from individuals who have submitted a [[Contributor Agreement]].&lt;br /&gt;
&lt;br /&gt;
For more information please visit:&lt;br /&gt;
* https://help.github.com/articles/creating-a-pull-request&lt;br /&gt;
* https://help.github.com/articles/using-pull-requests&lt;br /&gt;
* https://help.github.com/articles/fork-a-repo&lt;br /&gt;
&lt;br /&gt;
==Commit access==&lt;br /&gt;
Anyone can contribute code patches to this project. Project collaborators and regular patch contributors will be given access to commit directly to the git code repository.&lt;br /&gt;
&lt;br /&gt;
==Contributor's Agreement==&lt;br /&gt;
In order to accept any patches or code commits, contributors must first sign the [[Contributor Agreement|Archivematica Contributor's Agreement]].&lt;br /&gt;
&lt;br /&gt;
==Standards==&lt;br /&gt;
&lt;br /&gt;
=== Code Style Guide For Archivematica ===&lt;br /&gt;
&lt;br /&gt;
Archivematica follows common Python coding standards, linked below.  We encourage installing a Python [http://stackoverflow.com/questions/8503559/what-is-linting linter] to help with this. [https://pypi.python.org/pypi/flake8 flake8] is recommended because it wraps three common linters (pep8, pyflakes, mccabe).&lt;br /&gt;
* [https://www.python.org/dev/peps/pep-0008/ PEP8] for styling&lt;br /&gt;
** Exception is line length, which should be wrapped at 79 characters or left long for the IDE to wrap.&lt;br /&gt;
** Imports are sorted alphabetically within their grouping to reduce duplicate imports&lt;br /&gt;
* [https://www.python.org/dev/peps/pep-0257/ PEP257] for docstring structure&lt;br /&gt;
** Parameters and return values should be specified in [http://sphinx-doc.org/domains.html#info-field-lists Sphinx-style].&lt;br /&gt;
* See also [https://github.com/artefactual/archivematica/pull/218 this pull request] and associated discussion.&lt;br /&gt;
&lt;br /&gt;
Example docstrings with Sphinx markup below. Other attributes that can be used in a docstring can be found [http://sphinx-doc.org/domains.html#the-python-domain on the Sphinx website].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;def get_unit_status(unit_uuid, unit_type):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Get status for a SIP or Transfer.&lt;br /&gt;
&lt;br /&gt;
    Returns a dict with status info.  Keys will always include 'status' and&lt;br /&gt;
    'microservice', and may include 'sip_uuid'.&lt;br /&gt;
&lt;br /&gt;
    Status is one of FAILED, REJECTED, USER_INPUT, COMPLETE or PROCESSING.&lt;br /&gt;
    Microservice is the name of the current microservice.&lt;br /&gt;
    SIP UUID is populated only if the unit_type was unitTransfer and status is&lt;br /&gt;
    COMPLETE.  Otherwise, it is None.&lt;br /&gt;
&lt;br /&gt;
    :param str unit_uuid: UUID of the SIP or Transfer&lt;br /&gt;
    :param str unit_type: unitSIP or unitTransfer&lt;br /&gt;
    :return: Dict with status info.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;def each_child(path, file_group_identifier, base_path, base_path_name, sip_uuid):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Iterates over entries in a filesystem, beginning at `path`.&lt;br /&gt;
&lt;br /&gt;
    At each entry in the filesystem, yields either a File model instance&lt;br /&gt;
    (for files) or a string (for directories).&lt;br /&gt;
&lt;br /&gt;
    When iterating, makes two passes: first iterating over files, then&lt;br /&gt;
    directories. Does not iterate over directories; consumers should&lt;br /&gt;
    call this function again on directory strings to recurse.&lt;br /&gt;
&lt;br /&gt;
    :param string path: path to a directory on disk to recurse into.&lt;br /&gt;
    :raises ValueError: if the specified path does not exist, or is not a directory.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== File Structure ===&lt;br /&gt;
The file structure in Archivematica will comply with the Filesystem Hierarchy Standard (FHS).  &lt;br /&gt;
&amp;lt;br/&amp;gt;More information on this standard is available at:  &lt;br /&gt;
&amp;lt;br/&amp;gt;http://www.pathname.com/fhs/&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Improvements/warc&amp;diff=11732</id>
		<title>Improvements/warc</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Improvements/warc&amp;diff=11732"/>
		<updated>2017-03-23T19:50:11Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move to feature requirements category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[Category:Feature requirements]]&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
&lt;br /&gt;
Improvements to Archivematica's handling of WARC files could go in a number of directions, most of which involve better extraction of technical and provenance metadata to Archivematica's METS file, which would improve the understanding and preservation of the WARC files overtime.&lt;br /&gt;
&lt;br /&gt;
== User story ==&lt;br /&gt;
&lt;br /&gt;
As an archivist I want an external agent to be recorded in the METS file to records the software agent that created the WARC file.&lt;br /&gt;
    &lt;br /&gt;
As an archivist I want a creation event for the creation of the WARC file to be recorded in the METS file.&lt;br /&gt;
&lt;br /&gt;
As an archivist, I want to record relevant Dublin core in the dmdSec (identifier, isPartOf, rights) of the METS file.&lt;br /&gt;
    &lt;br /&gt;
As an archivist I want there to be a validation rule in FPR using Warcat so I get more meaningful validation output.&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
Some code is in a development branch of Archivematica (https://github.com/artefactual/archivematica/tree/dev/issue-8634-warc-mets) which will read certain elements of the WARC header. This lays the groundwork for parsing this descriptive information to the METS file. This code is based on an Archivematica branch that introduces external agents to the METS file, which lays the ground work for describing the software agent that created the WARC (e.g. ArchiveIt, wget, chrome extension, etc)&lt;br /&gt;
&lt;br /&gt;
== Analysis ==&lt;br /&gt;
&lt;br /&gt;
=== WARCat ===&lt;br /&gt;
&lt;br /&gt;
We tested and evaluated the tool WARCat for verifying, validating and extracting content from WARC files: https://github.com/chfoo/warcat &lt;br /&gt;
&lt;br /&gt;
Here's what we found about how warcat verifies WARC files:&lt;br /&gt;
&lt;br /&gt;
* Iterates through a (possibly gzipped) WARC file&lt;br /&gt;
** During iteration, uses the Content-Length and looking for delimiters (typically newlines) to verify that it's reading each block correctly.  &lt;br /&gt;
** archive-it.warc, chrome.warc and wget.warc all fail this correct-iteration-checking&lt;br /&gt;
&lt;br /&gt;
* The verify command checks lots of things, mostly related to the various headers.&lt;br /&gt;
&lt;br /&gt;
* Checks 'WARC-Record-ID', 'Content-Length', 'WARC-Date', 'WARC-Type' in headers&lt;br /&gt;
** If 'WARC-Block-Digest', checks block checksum&lt;br /&gt;
** If 'WARC-Payload-Digest', checks payload checksum&lt;br /&gt;
** Checks record ID has not been seen before in this WARC file&lt;br /&gt;
** Checks no whitespace in record ID&lt;br /&gt;
** Checks 'Content-Length' also has 'Content-Type'&lt;br /&gt;
** If 'WARC-Concurrent-To' or 'WARC-Refers-To', checks 'WARC-Type' not 'warcinfo', 'conversion' or 'continuation' and that concurrent/refers to record ID has been seen before&lt;br /&gt;
** If 'WARC-Type' is 'response', 'resource', 'request', 'revisit', 'conversion' or 'continuation', checks 'WARC-Target-URI'&lt;br /&gt;
** If 'WARC-Type' is 'warc_info', checks no 'WARC-Target-URI' *&lt;br /&gt;
** If 'WARC-Target-URI' checks no whitespace&lt;br /&gt;
** If 'WARC-Type' is 'warcinfo', checks no 'WARC-Filename'&lt;br /&gt;
** If 'WARC-Type' is 'revisit', checks no 'WARC-Profile'&lt;br /&gt;
** If 'WARC-Type' is 'continuation', checks 'WARC-Segment-Origin-ID' and 'WARC-Segment-Total-Length'&lt;br /&gt;
** If 'WARC-Type' is not 'continuation', checks no 'WARC-Segment-Origin-ID' or 'WARC-Segment-Total-Length'&lt;br /&gt;
&lt;br /&gt;
We think there's a typo in this check, because other places refer to a 'WARC-Type' of 'warcinfo', and this is the only place that refers to a 'warc_info'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The code for the checks is found here: https://github.com/chfoo/warcat/blob/master/warcat/tool.py#L262-L406 &lt;br /&gt;
&lt;br /&gt;
and the checksum verification is here: https://github.com/chfoo/warcat/blob/master/warcat/verify.py#L38-L67 &lt;br /&gt;
&lt;br /&gt;
Iterating through the records is done here https://github.com/chfoo/warcat/blob/master/warcat/model/warc.py#L62-L89 &lt;br /&gt;
&lt;br /&gt;
and here https://github.com/chfoo/warcat/blob/master/warcat/model/warc.py#L62-L89&lt;br /&gt;
&lt;br /&gt;
== Changes to METS ==&lt;br /&gt;
&lt;br /&gt;
Below is a mock-up of an AIP METS file with enhancements for recording WARC files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version='1.0' encoding='ASCII'?&amp;gt;&lt;br /&gt;
&amp;lt;mets:mets xmlns:mets=&amp;quot;http://www.loc.gov/METS/&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot; xsi:schemaLocation=&amp;quot;http://www.loc.gov/METS/ http://www.loc.gov/standards/mets/version18/mets.xsd&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;mets:metsHdr CREATEDATE=&amp;quot;2015-11-27T17:17:29&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;mets:dmdSec ID=&amp;quot;dmdSec_1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;mets:mdWrap MDTYPE=&amp;quot;DC&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mets:xmlData&amp;gt;&lt;br /&gt;
        &amp;lt;dcterms:dublincore xmlns:dcterms=&amp;quot;http://purl.org/dc/terms/&amp;quot; xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot; xsi:schemaLocation=&amp;quot;http://purl.org/dc/terms/ http://dublincore.org/schemas/xmls/qdc/2008/02/11/dcterms.xsd&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;dc:identifier&amp;gt;urn:uuid:33bf5acf-4584-446f-b187-ce4f6ad79af9&amp;lt;/dc:identifier&amp;gt;&lt;br /&gt;
          &amp;lt;!-- source = WARC-Record-ID --&amp;gt;&lt;br /&gt;
          &amp;lt;dc:isPartOf&amp;gt;Sooke Artworks Exhibit 2014&amp;lt;/dc:isPartOf&amp;gt;&lt;br /&gt;
          &amp;lt;!-- source = collectionName (Archive-It only) --&amp;gt;&lt;br /&gt;
          &amp;lt;dc:isPartOf&amp;gt;4867-20141008190114161&amp;lt;/dc:isPartOf&amp;gt;&lt;br /&gt;
          &amp;lt;!-- source = isPartOf (Archive-It and Chrome only) --&amp;gt;&lt;br /&gt;
          &amp;lt;dc:rights&amp;gt;collectionPublic=false&amp;lt;/dc:rights&amp;gt;&lt;br /&gt;
          &amp;lt;!-- source = description (Archive-It only) --&amp;gt;&lt;br /&gt;
        &amp;lt;/dcterms:dublincore&amp;gt;&lt;br /&gt;
      &amp;lt;/mets:xmlData&amp;gt;&lt;br /&gt;
    &amp;lt;/mets:mdWrap&amp;gt;&lt;br /&gt;
  &amp;lt;/mets:dmdSec&amp;gt;&lt;br /&gt;
   &amp;lt;mets:amdSec ID=&amp;quot;amdSec_1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;mets:techMD ID=&amp;quot;techMD_1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mets:mdWrap MDTYPE=&amp;quot;PREMIS:OBJECT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;mets:xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;premis:object xmlns:premis=&amp;quot;info:lc/xmlns/premis-v2&amp;quot; xsi:type=&amp;quot;premis:file&amp;quot; xsi:schemaLocation=&amp;quot;info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd&amp;quot; version=&amp;quot;2.2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;premis:objectIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;premis:objectIdentifierType&amp;gt;UUID&amp;lt;/premis:objectIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;premis:objectIdentifierValue&amp;gt;9a6db35f-b444-4295-a1b9-c0c94665c778&amp;lt;/premis:objectIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/premis:objectIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;premis:objectCharacteristics&amp;gt;&lt;br /&gt;
              &amp;lt;premis:compositionLevel&amp;gt;0&amp;lt;/premis:compositionLevel&amp;gt;&lt;br /&gt;
              &amp;lt;premis:fixity&amp;gt;&lt;br /&gt;
                &amp;lt;premis:messageDigestAlgorithm&amp;gt;sha256&amp;lt;/premis:messageDigestAlgorithm&amp;gt;&lt;br /&gt;
                &amp;lt;premis:messageDigest&amp;gt;b8ed228653bbe2fc73f5a4711daaab3b427bc57920fc00778b9b96da35d5cbd9&amp;lt;/premis:messageDigest&amp;gt;&lt;br /&gt;
              &amp;lt;/premis:fixity&amp;gt;&lt;br /&gt;
              &amp;lt;premis:size&amp;gt;77038680&amp;lt;/premis:size&amp;gt;&lt;br /&gt;
              &amp;lt;premis:format&amp;gt;&lt;br /&gt;
                &amp;lt;premis:formatDesignation&amp;gt;&lt;br /&gt;
                  &amp;lt;premis:formatName&amp;gt;WARC (Web ARChive)&amp;lt;/premis:formatName&amp;gt;&lt;br /&gt;
                  &amp;lt;premis:formatVersion&amp;gt;ISO 28500&amp;lt;/premis:formatVersion&amp;gt;&lt;br /&gt;
                &amp;lt;/premis:formatDesignation&amp;gt;&lt;br /&gt;
                &amp;lt;premis:formatRegistry&amp;gt;&lt;br /&gt;
                  &amp;lt;premis:formatRegistryName&amp;gt;PRONOM&amp;lt;/premis:formatRegistryName&amp;gt;&lt;br /&gt;
                  &amp;lt;premis:formatRegistryKey&amp;gt;fmt/289&amp;lt;/premis:formatRegistryKey&amp;gt;&lt;br /&gt;
                &amp;lt;/premis:formatRegistry&amp;gt;&lt;br /&gt;
              &amp;lt;/premis:format&amp;gt;&lt;br /&gt;
              &amp;lt;premis:objectCharacteristicsExtension&amp;gt;&lt;br /&gt;
              &amp;lt;!-- tool output --&amp;gt;&lt;br /&gt;
              &amp;lt;/premis:objectCharacteristicsExtension&amp;gt;&lt;br /&gt;
            &amp;lt;/premis:objectCharacteristics&amp;gt;&lt;br /&gt;
            &amp;lt;premis:originalName&amp;gt;%transferDirectory%objects/ARCHIVEIT-4867-NONE-15219-20141008190130659-00000-wbgrp-crawl052.us.archive.org-6442.warc&amp;lt;/premis:originalName&amp;gt;&lt;br /&gt;
          &amp;lt;/premis:object&amp;gt;&lt;br /&gt;
        &amp;lt;/mets:xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mets:mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/mets:techMD&amp;gt;&lt;br /&gt;
    &amp;lt;mets:digiprovMD ID=&amp;quot;digiprovMD_1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mets:mdWrap MDTYPE=&amp;quot;PREMIS:EVENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;mets:xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;premis:event xmlns:premis=&amp;quot;info:lc/xmlns/premis-v2&amp;quot; xsi:schemaLocation=&amp;quot;info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd&amp;quot; version=&amp;quot;2.2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;premis:eventIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;premis:eventIdentifierType&amp;gt;UUID&amp;lt;/premis:eventIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;premis:eventIdentifierValue&amp;gt;670799cf-5ca0-4869-b0ba-7d1d951e3857&amp;lt;/premis:eventIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/premis:eventIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;premis:eventType&amp;gt;creation&amp;lt;/premis:eventType&amp;gt;&lt;br /&gt;
            &amp;lt;premis:eventDateTime&amp;gt;2015-11-27T17:14:59&amp;lt;/premis:eventDateTime&amp;gt;&lt;br /&gt;
            &amp;lt;premis:eventDetail&amp;gt;software: Heritrix/3.3.0-SNAPSHOT-20140912-0039 http://crawler.archive.org&lt;br /&gt;
ip: 207.241.226.89&lt;br /&gt;
hostname: wbgrp-crawl052.us.archive.org&lt;br /&gt;
format: WARC File Format 1.0&lt;br /&gt;
conformsTo: http://bibnum.bnf.fr/WARC/WARC_ISO_28500_version1_latestdraft.pdf&lt;br /&gt;
isPartOf: 4867-20141008190114161&lt;br /&gt;
description: recurrence=NONE, maxDuration=3600, maxDocumentCount=null, isTestCrawl=false, isPatchCrawl=false, oneTimeSubtype=CRAWL_SELECTED_SEEDS, seedCount=1, accountId=739, accountType=SUBSCRIBER, organizationName=&amp;quot;Not a Real Institution&amp;quot;, collectionId=4867, collectionName=&amp;quot;Sooke Artworks Exhibit 2014&amp;quot;, collectionPublic=false&lt;br /&gt;
robots: obey&lt;br /&gt;
http-header-user-agent: Mozilla/5.0 (compatible; archive.org_bot; Archive-It; +http://archive-it.org/files/site-owners.html)&lt;br /&gt;
            &amp;lt;/premis:eventDetail&amp;gt;&lt;br /&gt;
            &amp;lt;!-- source = text block starting with software --&amp;gt;&lt;br /&gt;
            &amp;lt;premis:eventOutcomeInformation&amp;gt;&lt;br /&gt;
              &amp;lt;premis:eventOutcome&amp;gt;&amp;lt;/premis:eventOutcome&amp;gt;&lt;br /&gt;
              &amp;lt;premis:eventOutcomeDetail&amp;gt;&lt;br /&gt;
                &amp;lt;premis:eventOutcomeDetailNote&amp;gt;&amp;lt;/premis:eventOutcomeDetailNote&amp;gt;&lt;br /&gt;
              &amp;lt;/premis:eventOutcomeDetail&amp;gt;&lt;br /&gt;
            &amp;lt;/premis:eventOutcomeInformation&amp;gt;&lt;br /&gt;
            &amp;lt;premis:linkingAgentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;premis:linkingAgentIdentifierType&amp;gt;URI&amp;lt;/premis:linkingAgentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;premis:linkingAgentIdentifierValue&amp;gt;http://crawler.archive.org&amp;lt;/premis:linkingAgentIdentifierValue&amp;gt;&lt;br /&gt;
              &amp;lt;!-- source = software --&amp;gt;&lt;br /&gt;
            &amp;lt;/premis:linkingAgentIdentifier&amp;gt;&lt;br /&gt;
          &amp;lt;/premis:event&amp;gt;&lt;br /&gt;
        &amp;lt;/mets:xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mets:mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/mets:digiprovMD&amp;gt;&lt;br /&gt;
    &amp;lt;mets:digiprovMD ID=&amp;quot;digiprovMD_7&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mets:mdWrap MDTYPE=&amp;quot;PREMIS:AGENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;mets:xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;premis:agent xmlns:premis=&amp;quot;info:lc/xmlns/premis-v2&amp;quot; xsi:schemaLocation=&amp;quot;info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd&amp;quot; version=&amp;quot;2.2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;premis:agentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;premis:agentIdentifierType&amp;gt;URI&amp;lt;/premis:agentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;premis:agentIdentifierValue&amp;gt;http://crawler.archive.org&amp;lt;/premis:agentIdentifierValue&amp;gt;&lt;br /&gt;
              &amp;lt;!-- source = software --&amp;gt;&lt;br /&gt;
            &amp;lt;/premis:agentIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;premis:agentName&amp;gt;Heritrix/3.3.0-SNAPSHOT-20140912-0039&amp;lt;/premis:agentName&amp;gt;&lt;br /&gt;
            &amp;lt;!-- source = software --&amp;gt;&lt;br /&gt;
            &amp;lt;premis:agentType&amp;gt;software&amp;lt;/premis:agentType&amp;gt;&lt;br /&gt;
          &amp;lt;/premis:agent&amp;gt;&lt;br /&gt;
        &amp;lt;/mets:xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mets:mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/mets:digiprovMD&amp;gt;&lt;br /&gt;
  &amp;lt;/mets:amdSec&amp;gt;&lt;br /&gt;
  &amp;lt;mets:fileSec&amp;gt;&lt;br /&gt;
    &amp;lt;mets:fileGrp USE=&amp;quot;original&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mets:file GROUPID=&amp;quot;Group-9a6db35f-b444-4295-a1b9-c0c94665c778&amp;quot; ID=&amp;quot;file-9a6db35f-b444-4295-a1b9-c0c94665c778&amp;quot; ADMID=&amp;quot;amdSec_1&amp;quot; DMDID=&amp;quot;dmdSec_1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;mets:FLocat xlink:href=&amp;quot;objects/ARCHIVEIT-4867-NONE-15219-20141008190130659-00000-wbgrp-crawl052.us.archive.org-6442.warc&amp;quot; LOCTYPE=&amp;quot;OTHER&amp;quot; OTHERLOCTYPE=&amp;quot;SYSTEM&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/mets:file&amp;gt;&lt;br /&gt;
    &amp;lt;/mets:fileGrp&amp;gt;&lt;br /&gt;
  &amp;lt;/mets:fileSec&amp;gt;&lt;br /&gt;
  &amp;lt;mets:structMap ID=&amp;quot;structMap_1&amp;quot; LABEL=&amp;quot;Archivematica default&amp;quot; TYPE=&amp;quot;physical&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;mets:div LABEL=&amp;quot;WARC_file-b681af4b-8e17-479e-8a1f-0e9443415d5e&amp;quot; TYPE=&amp;quot;Directory&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mets:div LABEL=&amp;quot;objects&amp;quot; TYPE=&amp;quot;Directory&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;mets:div LABEL=&amp;quot;ARCHIVEIT-4867-NONE-15219-20141008190130659-00000-wbgrp-crawl052.us.archive.org-6442.warc&amp;quot; TYPE=&amp;quot;Item&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;mets:fptr FILEID=&amp;quot;file-9a6db35f-b444-4295-a1b9-c0c94665c778&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/mets:div&amp;gt;&lt;br /&gt;
      &amp;lt;/mets:div&amp;gt;&lt;br /&gt;
    &amp;lt;/mets:div&amp;gt;&lt;br /&gt;
  &amp;lt;/mets:structMap&amp;gt;&lt;br /&gt;
&amp;lt;/mets:mets&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Improvements/Islandora&amp;diff=11731</id>
		<title>Improvements/Islandora</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Improvements/Islandora&amp;diff=11731"/>
		<updated>2017-03-23T19:49:45Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move to feature requirements category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sections of this page have been copied and adapted from the Islandora Foundation's [https://wiki.duraspace.org/display/ISLANDORA/Archidora Archidora documentation] under a [http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-Share Alike 3.0 Unported License]. These sections are appended by a hyperlink to the original content in the Islandora wiki. We are grateful to the Islandora Foundation for both writing and sharing this documentation.&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature requirements]]&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
&lt;br /&gt;
Archidora is a module that integrates the digital preservation functionality of Archivematica with [http://islandora.ca/ Islandora]. It was developed by [http://www.artefactual.com/ Artefactual Systems] and [http://www.discoverygarden.ca/ Discovery Garden], sponsored by the [http://library.usask.ca/ University of Saskatchewan Library].&lt;br /&gt;
&lt;br /&gt;
== User story ==&lt;br /&gt;
&lt;br /&gt;
The goal of the Archidora module is to allow Islandora users to seamlessly preserve content that is ingested into Islandora using Archivematica's suite of digital preservation micro-services, creating preservation copies of that content for long-term storage. The Islandora user ingesting the content should not be required to mediate the transfer to Archivematica in any way. Upon completion of the transfer and ingest into Archivematica, a notification is sent back to Islandora indicating that the storage was successful.&lt;br /&gt;
&lt;br /&gt;
[[File:Archidora-1.png|500px]]&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
The Archidora module was developed in 2014 and has been deployed at the University of Saskatchewan Library since 2015. Testing is ongoing.&lt;br /&gt;
&lt;br /&gt;
The code is currently held [https://github.com/Islandora-Labs/archidora in Github by the Islandora Foundation], but is not being actively maintained.&lt;br /&gt;
&lt;br /&gt;
== Analysis ==&lt;br /&gt;
&lt;br /&gt;
Building on the basic workflow described in the [User story], above, the following detailed workflow was developed to describe how content is ingested from Islandora into Archivematica and stored.&lt;br /&gt;
&lt;br /&gt;
# Content Upload&lt;br /&gt;
## Content is ingested into Islandora&lt;br /&gt;
## Drupal cron and Fedora content validation are used to trigger content upload to Archivematica&lt;br /&gt;
## One upload is created per Fedora Object&lt;br /&gt;
## Metadata includes an AIP ID generated either from user input or based on the collection metadata&lt;br /&gt;
## METS.xml is posted to the Archivematica URI&lt;br /&gt;
# Create Transfer&lt;br /&gt;
## Archivematica parses and validates the METS.xml&lt;br /&gt;
## If the METS is valid, Archivematica sends either a 201 (Created) or 412 (Precondition failed) response to Islandora; Islandora saves the EM-IRI from the response and uses it to notify the user if the transfer was successful&lt;br /&gt;
## Archivematica identifies which files to request from Islandora&lt;br /&gt;
## The transfer object is created&lt;br /&gt;
## The file URIs are passed to Archivematica for asynchronous processing&lt;br /&gt;
# Collect Files&lt;br /&gt;
## Files are retrieved from the Fedora REST API using HTTP GET and added to the transfer; if there is an error, an error response is returned&lt;br /&gt;
## Checksums are confirmed&lt;br /&gt;
# Transfer and Ingest&lt;br /&gt;
## Files are moved to the watchedDirectory&lt;br /&gt;
## Transfer and Ingest are completed in Archivematica, either manually or automatically&lt;br /&gt;
## A blank HTTP POST is sent to SE-IRI; if the HTTP POST is false, the transfer or ingest are still in progress&lt;br /&gt;
# Check Archivematica status&lt;br /&gt;
## Islandora uses GET statement IRI to request status of transfer&lt;br /&gt;
# Status Response&lt;br /&gt;
## If the ingest is successful, Archivematica sends either a 201 (Created) or 412 (Precondition failed) response to Islandora, letting Islandora know that the last object in the AIP has been uploaded&lt;br /&gt;
# Content deleted from Islandora&lt;br /&gt;
## The Hi-Res datastream is deleted from Islandora (configurable), preserving only the access copy/ies of the content&lt;br /&gt;
## Islandora sends an HTTP POST to EM-IRI to indicate that the content has been deleted&lt;br /&gt;
# Log Islandora deletion&lt;br /&gt;
## Archivematica marks objects as deleted from the access system&lt;br /&gt;
## Search index is updated&lt;br /&gt;
## Archivematica sends either a 200 (OK) or 400 (error) response to Islandora&lt;br /&gt;
&lt;br /&gt;
[[File:Archidora-2.png|500 px]]&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
* Islandora module: https://github.com/discoverygarden/archidora&lt;br /&gt;
* Archivematica: Archivematica 1.4 and Storage Service 0.7 or later is required; download from http://www.archivematica.org.&lt;br /&gt;
* This integration is currently considered a beta feature.&lt;br /&gt;
&lt;br /&gt;
- ''[https://wiki.duraspace.org/display/ISLANDORA/Archidora Islandora Archidora documentation]''&lt;br /&gt;
&lt;br /&gt;
== Install ==&lt;br /&gt;
&lt;br /&gt;
Installation and testing is similar to any Drupal module. Please see [https://wiki.duraspace.org/display/ISLANDORA715/Installing+the+Islandora+Enhancement+Modules Installing the Islandora Enhancement Modules] for details.&lt;br /&gt;
&lt;br /&gt;
- ''[https://wiki.duraspace.org/display/ISLANDORA/Archidora Islandora Archidora documentation]''&lt;br /&gt;
&lt;br /&gt;
== Configure ==&lt;br /&gt;
&lt;br /&gt;
=== In the Archivematica Storage Space: ===&lt;br /&gt;
&lt;br /&gt;
* Create a Space with access protocol FEDORA via SWORD2.&lt;br /&gt;
* Create a Location within that Space (purpose = FEDORA deposits)&lt;br /&gt;
* Enter the Fedora URL, username and password.&lt;br /&gt;
** See [https://www.archivematica.org/en/docs/storage-service-0.7/administrators/#fedora Archivematica Storage Service documentation] for more details.&lt;br /&gt;
* Archivematica may also be configured to call back to Islandora to delete the high-res &amp;quot;OBJ&amp;quot; datastreams - this is done in the Storage Service &amp;gt; Administration &amp;gt; Service callbacks&lt;br /&gt;
** URI: http://islandora-base-url/islandora/object/&amp;lt;source_id&amp;gt;/archidora/{Islandora API}/delete&lt;br /&gt;
*** Where the API key is the &amp;quot;Islandora Archivematica integration API key&amp;quot; listed/generated on the Archidora admin screen&lt;br /&gt;
** Event: post-store&lt;br /&gt;
** Method: post&lt;br /&gt;
** Expected status: 200&lt;br /&gt;
&lt;br /&gt;
* Note: the OBJ datastreams are not deleted automatically, but rather are listed at the collection level (or compound object level) on the Manage | Archivematica tab. They can be deleted individually or in bulk.&lt;br /&gt;
&lt;br /&gt;
=== On the Archivematica dashboard: ===&lt;br /&gt;
&lt;br /&gt;
* On the administration tab, add the IP address of the storage service to the IP whitelist for the REST API&lt;br /&gt;
&lt;br /&gt;
=== In Islandora ===&lt;br /&gt;
&lt;br /&gt;
* Enable cron; configure it to run at reasonably frequent intervals (e.g. every five minutes), otherwise the expected callbacks may not be triggered often enough.&lt;br /&gt;
&lt;br /&gt;
* Configure Archidora at admin/islandora/archidora.&lt;br /&gt;
** Archivematica Storage Service Base URL - normally http://archivematica-url:8000&lt;br /&gt;
** Deposit Location - will be configured automatically once storage service URL is entered&lt;br /&gt;
** Archivematica User - Archivematica dashboard user to be used for Islandora integration (not storage service)&lt;br /&gt;
** Archivematica API Key - API key for the Archivematica dashboard user listed above&lt;br /&gt;
** EM-IRI Solr field - used for constructing Sword API call (default is &amp;quot;RELS_EXT_edit_media_uri_ms&amp;quot;)&lt;br /&gt;
** AIP max age - new objects will not be added to a deposit after the specified time has elapsed&lt;br /&gt;
** AIP max size - new objects will not be added to a deposit after the specified size has been reached. Note that this is really the transfer size; the ** AIP could be larger due to normalized objects&lt;br /&gt;
** Cron time - the amount of time for which the queue of items will be allowed to process, at each cron invocation. Setting a higher time is recommended if compound objects are being ingested (especially manually), otherwise the relationships may not be included in the METS file sent to Archivematica&lt;br /&gt;
&lt;br /&gt;
* You may also need to add a rule to the firewall on the Fedora server to allow access from the Archivematica storage service (e.g. to port 8080)&lt;br /&gt;
&lt;br /&gt;
* Collection-level configuration:&lt;br /&gt;
** Check off &amp;quot;Don't Archive Children&amp;quot; to stop objects from being sent to Archivematica for a particular collection.&lt;br /&gt;
&lt;br /&gt;
- ''[https://wiki.duraspace.org/display/ISLANDORA/Archidora Islandora Archidora documentation]''&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
Archidora is still considered a beta feature. As such, further development is likely required to bring it to stability.&lt;br /&gt;
&lt;br /&gt;
Other proposed improvements include the following:&lt;br /&gt;
&lt;br /&gt;
* Ingest Premis from Islandora into Archivematica&lt;br /&gt;
* Ingest other metadata (e.g., DDI)&lt;br /&gt;
* Ingest Bags&lt;br /&gt;
* Format Policy Registry Integration&lt;br /&gt;
* Asynchronous derivative generation&lt;br /&gt;
* Integrate with checksum checker&lt;br /&gt;
* Provide more information back to Islandora (e.g., aip url)&lt;br /&gt;
* Support other workflows (e.g. upload from Archivematica to Islandora)&lt;br /&gt;
* Support Fedora for AIP Storage&lt;br /&gt;
* Improve reporting/logging in Archidora&lt;br /&gt;
&lt;br /&gt;
No estimates have been prepared for the above.&lt;br /&gt;
&lt;br /&gt;
== Interest ==&lt;br /&gt;
&lt;br /&gt;
Please feel free to add your or your organization's name and any comments to this section if you have an interest in improving this module.&lt;br /&gt;
&lt;br /&gt;
Artefactual would like to see active development on Archidora. We are able to do the development work, for a fee. We are also willing to assist others to complete all or part of the work required.&lt;br /&gt;
&lt;br /&gt;
Interested in talking to us about sponsoring development of Archidora? Get in touch with Artefactual at info@artefactual.org or with Discovery Garden at info@discoverygarden.ca.&lt;br /&gt;
&lt;br /&gt;
Interested in contributing code to the Archidora project? [https://github.com/Islandora-Labs/archidora Create a pull request]!&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Email_preservation&amp;diff=11730</id>
		<title>Email preservation</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Email_preservation&amp;diff=11730"/>
		<updated>2017-03-23T19:48:57Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move to feature requirements category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[:Category:Development documentation|Development documentation]] &amp;gt; Email preservation&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature requirements]]&lt;br /&gt;
&lt;br /&gt;
==Functional Requirements==&lt;br /&gt;
&lt;br /&gt;
These are requirements for email preservation in Archivematica:&lt;br /&gt;
*Preservation format&lt;br /&gt;
**Proprietary closed formats such as PST should be converted to open preservation format&lt;br /&gt;
**Preservation format should be text or xml based&lt;br /&gt;
**Email messages, calendars, contacts and other related entities should be normalized to the preservation format&lt;br /&gt;
**Preservation format should preserve the [[Significant characteristics of email|significant characteristics]] of the email messages&lt;br /&gt;
**Preservation format should be capable of being viewed as an access format or should be capable of generating an access format&lt;br /&gt;
*Attachments&lt;br /&gt;
**Attachments should be converted to preservation and access formats&lt;br /&gt;
**Converted attachments should retain links to emails to which they were attached&lt;br /&gt;
*Access format&lt;br /&gt;
**Access format should be human-readable and should be recognizable as email&lt;br /&gt;
**Access format should allow simple, intuitive navigation between messages, attachments, email boxes, contacts, calendars&lt;br /&gt;
**Access format should allow navigation to normalized access copies of attachments&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Formats==&lt;br /&gt;
&lt;br /&gt;
===EML===&lt;br /&gt;
&lt;br /&gt;
From http://www.coolutils.com/Formats/EML:&lt;br /&gt;
*EML, which stands for ‘E-mail’, is the file extension of the Outlook Express Saved Mail Messages files. It belongs to the Microsoft range of e-mail management programs and is used for saving e-mails for storage and forwarding purposes.&lt;br /&gt;
*Since the object of an EML file is to store e-mail messages, it is a plain text file, and as a result, has a standard file structure. It consists of a short header and the main body. The header contains the e-mail addresses of the sender and the recipient, the subject, and the time and date of the message. The main message of the e-mail is in the body of the file. EML files can also contain hyperlinks and attachments.&lt;br /&gt;
*Since EML files are created to comply with the industry RFC 822 standard, they can be used with most e-mail clients, servers and applications. Besides the Microsoft Outlook Express, EML files can be opened using most e-mail clients, such as Microsoft Outlook, Microsoft Entourage, Mozilla Thunderbird, Apple Mail, and IncrediMail. Since EML files are plaintext and formatted much like MHT (MIME HTML) files, they can also be opened directly in the Internet Explorer, Mozilla Firefox and Opera, by first changing the file extension from ‘.eml’ to ‘.mht’. It is also possible to view EML files using notepad or any other text editor. &lt;br /&gt;
&lt;br /&gt;
[http://www.nationalarchives.gov.uk/PRONOM/Format/proFormatSearch.aspx?status=detailReport&amp;amp;id=1018 PRONOM]:&lt;br /&gt;
*Defined in RFC5322 the Internet Message Format provides a syntax for text messages that are sent among computer users, within the framework of &amp;quot;electronic mail&amp;quot;. Consisting of header fields and an optional body, encoded using ASCII characters. The Internet Message Format (*.eml) is a format used by numerous email systems. The format does not prevent the use of alternative formats for storage of electronic mail on those systems.&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MBOX===&lt;br /&gt;
&lt;br /&gt;
From [http://www.significantproperties.org.uk/email-testingreport.html Inspect: Significant Properties Testing Report: Electronic Mail] Gareth Knight, 30 March 2009:&lt;br /&gt;
*&amp;quot;The mbox family refers to four related, but only semi-compatible formats for the storage of one or more email messages and attachments. The four formats - mboxo, mboxrd, mboxcl, and mboxcl2 – originate from different versions of Unix. Each mbox file represents a set of email messages that are ordered sequentially and grouped into a ‘folder ‘. Email messages are stored in their source format, e.g. plain text may be stored as ASCII or Unicode, binary data is stored as Base64-encoded text. The format is well supported by a number of email applications and, thanks to its text-based composition can be processed, rendered and converted by a wide range of text processing software.&amp;quot;&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Maildir===&lt;br /&gt;
&lt;br /&gt;
From http://wiki.dovecot.org/MailboxFormat/Maildir:&lt;br /&gt;
*&amp;quot;This format debuted with the qmail server in the mid-1990s. Each mailbox folder is a directory and each message a file. This improves efficiency because individual emails can be modified, deleted and added without affecting the mailbox or other emails, and makes it safer to use on networked file systems such as NFS.&amp;quot;&lt;br /&gt;
From [http://www.significantproperties.org.uk/email-testingreport.html Inspect: Significant Properties Testing Report: Electronic Mail] Gareth Knight, 30 March 2009:&lt;br /&gt;
*&amp;quot;Maildir is an organizational structure for the storage of one or more emails on a file system. Each email is stored as a distinct file in one of three sub-directories: the ‘tmp ‘ sub-directory temporarily stores emails during processing; ‘new ‘ contains newly delivered emails; and ‘cur ‘ contains emails that have been processed by the client ‘s mail-reader software. The storage of each email as a distinct file in the file structure is cited as workaround to file locking issues that affect compound formats, such as mbox that update the mail data file that the user is accessing. However, the filename convention used for the storage of emails may cause incompatibility in implementations of Maildir for Unix-compatible and Microsoft Windows operating systems. The colon character is an illegal character in Microsoft Windows. However, there is no standard on the alternative character that may be used in the environment.&amp;quot;&lt;br /&gt;
Notes:&lt;br /&gt;
*Archivematica sanitizes filenames to remove characters that are prohibited in various operating systems. In the case of maildir, a filename such as ''1330052116_1.7424.dell-desktop,U=153,FMD5=f72fc74533f0b9f432010a357af35516:2,'' would be changed to ''1330052116_1.7424.dell-desktop_U_153_FMD5_f72fc74533f0b9f432010a357af35516_2_''. If we do ingest and preserver maildir files we may need to skip the name cleanup micro-service if email systems depend on the format of the filename to recognize maildir files.&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
*[http://www.five-ten-sg.com/libpst/rn01re01.html Readpst], which can be downloaded from http://www.five-ten-sg.com/libpst/packages/, converts PST (MS Outlook Personal Folders) files to mbox and other formats.&lt;br /&gt;
*[http://offlineimap.org/ OfflineImap] connects to IMAP accounts and saves the contents locally as maildir backups.&lt;br /&gt;
*[https://gist.github.com/1709069 md2mb.py] is a python script that converts maildir to mbox format.&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Muse===&lt;br /&gt;
[http://mobisocial.stanford.edu/muse/ Muse] is a social media tool that can render mbox files as plain text messages with attachments. &lt;br /&gt;
*Features:&lt;br /&gt;
**Ability to tag restricted messages and export the untagged messages as an mbox file. Note that tagging one message also tags any threads containing the same message.&lt;br /&gt;
**Ability to keyword search email messages.&lt;br /&gt;
**Ability to key quickly through messages by using forward and back arrows on the keyboard.&lt;br /&gt;
**Ability to click on sender or receiver to view all the messages sent or received by that individual.&lt;br /&gt;
**Ability to click on selected terms in the email to view other messages with the same terms.&lt;br /&gt;
*Drawbacks:&lt;br /&gt;
**In alpha development, somewhat brittle in Linux environment.&lt;br /&gt;
**Poorly designed user interface.&lt;br /&gt;
**Poor user documentation.&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Email preservation research==&lt;br /&gt;
[http://dx.doi.org/10.7207/twr11-01 Preserving Email] (DPC Technology Watch Report 11-01, ISSN 2048-7916, Digital Preservation Coalition 2011), Chris Prom, University of Illinois.&lt;br /&gt;
*&amp;quot;In general, if an institution can get email into one of the MBOX or EML formats, it has taken a very big step on the road toward preserving email.&amp;quot; (p.23)&lt;br /&gt;
*&amp;quot;XML conversion tools...can be very useful in achieving format neutrality. However, the author is aware of no general-purpose tools that are intended to facilitate the access, display, searching, or visualization of messages that have been migrated to XML. Until such tools have been developed – if they ever are – institutions will be forced to provide access to migrated messages using an email client of their choice or the user’s choice, recognizing that specific tools support different functionality.&amp;quot; (p.23)&lt;br /&gt;
*&amp;quot;Institutions are beginning to implement the Email Account Schema [CERP], but few tools exist to query, display and render messages that are stored in the format. If the digital preservation community were to develop tools that support the Email Account Schema or a different XML standard for email, that XML format would be a likely candidate for adoption as an International Council on Archives or even an ISO standard.&amp;quot; (p.24)&lt;br /&gt;
**&amp;quot;Until such applications are developed, it may seem that there is relatively little immediate benefit to be gained by migrating email into an XML-based format. Therefore, institutions that decide to keep email in an XML format should also keep a copy of messages in one of the IETF formats, preferable EML, since it allows attachments to be written as separate files.&amp;quot; (p.24)&lt;br /&gt;
*&amp;quot;Once messages have been migrated outside their native client/server architecture, they can be searched, retrieved and displayed by loading them back into another server or Preserving Email client application. Therefore, repositories should keep the original email format or MBOX/EML files as an access copy, which can be imported into email clients as needed.&amp;quot; (pp.28-29)&lt;br /&gt;
*&amp;quot;At present, several tools, including Hypermail and Aid4Mail, can convert messages to a static HTML format. In addition, a tool currently under development at Stanford University shows exciting potential for making preserved email useful. The Muse program, which can capture messages from several server environments to a local computer, also includes a search, browsing, visualization and analysis tool (Stanford University, Mobisocial Laboratory 2011).&amp;quot; (p.29)&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
[http://www.ifs.tuwien.ac.at/dp/ipres2010/schedule.html 2010. Reshaping the Repository: The Challenge of Email Archiving], Goethals, A. and Gogel, W. In 7th International Conference on Preservation of Digital Objects], (iPRES2010). Vienna, Austria.&lt;br /&gt;
*&amp;quot;We have preliminarily chosen to use the CERP/EMCAP schema, because we think it strikes the right balance between fully supporting the complexities of email headers and structure with a welcome lack of manipulation of the message bodies and attachments. Unlike most of the other schemas, it uses generic &amp;lt;Header&amp;gt; elements to store the names and values of the message headers. The advantage of this approach is that it can accommodate unanticipated headers, for example custom headers added by client systems, or those that will be added to future revisions of the email RFCs. It can support multiple message bodies per email, including HTML, and pointers to externally-stored attachments. They also have a separate schema for wrapping base64-encoded attachments, however we will likely decode attachments and store them in their original formats. While the CERP/EMCAP schema is designed to contain all the email messages for an account, we anticipate that it will work equally well at storing a single email message, which is how we intend to use it.&amp;quot; (p.3)&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Archivematica 0.9 maildir ingest requirements==&lt;br /&gt;
&lt;br /&gt;
*The Maildir directory as a whole forms the transfer&lt;br /&gt;
*The Maildir directory is the preservation master in the AIP&lt;br /&gt;
*Attachments must be extracted and normalized&lt;br /&gt;
*Extracted attachments and their normalized versions will reside in a directory outside the Maildir directory&lt;br /&gt;
*Maildir message names must NOT be sanitized (they contain colons, commas and equal signs)&lt;br /&gt;
*The Maildir messages DO NOT have to go through FITS&lt;br /&gt;
*The extracted attachments DO have to go through FITS&lt;br /&gt;
*Each Maildir subdirectory is normalized to an mbox file for access purposes&lt;br /&gt;
*Question: how will we link the mbox file back to the directory in the AIP? May not have to do this for 0.9.&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Creating_Custom_Workflows&amp;diff=11729</id>
		<title>Creating Custom Workflows</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Creating_Custom_Workflows&amp;diff=11729"/>
		<updated>2017-03-23T19:48:25Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move back to dev doc category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; Creating Custom Workflows&lt;br /&gt;
&lt;br /&gt;
* [[ Creating Custom Workflows 0.9 alpha ]]&lt;br /&gt;
* [[ Creating Custom Workflows 0.8 alpha ]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development_documentation]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Creating_Custom_Workflows&amp;diff=11728</id>
		<title>Creating Custom Workflows</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Creating_Custom_Workflows&amp;diff=11728"/>
		<updated>2017-03-23T19:47:02Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move to deprecated category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; Creating Custom Workflows&lt;br /&gt;
&lt;br /&gt;
* [[ Creating Custom Workflows 0.9 alpha ]]&lt;br /&gt;
* [[ Creating Custom Workflows 0.8 alpha ]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Deprecated]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=AIP_integrity_checking&amp;diff=11727</id>
		<title>AIP integrity checking</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=AIP_integrity_checking&amp;diff=11727"/>
		<updated>2017-03-23T19:46:20Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move to feature requirements category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[:Category:Development documentation|Development documentation]] &amp;gt; AIP integrity checking&lt;br /&gt;
&lt;br /&gt;
This is critical requirement because it is required by OAIS, page 4-8, section 4.1.1.3: &amp;quot;The '''Error Checking''' function provides statistically acceptable assurance that no components of the AIP are corrupted during any internal Archival Storage data transfer. This function requires that all hardware and software within the archive provide notification of potential errors and that these errors are routed to standard error logs that are checked by the Archival Storage staff. The PDI Fixity Information provides some assurance that the Content Information has not been altered as the AIP is moved and accessed. Similar information is needed to protect the PDI itself...The storage facility procedures should provide for random verification of the integrity of data objects using CRCs or some other error checking mechanism.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
From [[Development_roadmap#AIP_storage|0.8 Development roadmap]]:&lt;br /&gt;
* AIP storage integrity checking and logging to confirm that:&lt;br /&gt;
** write to storage was successful (completed)&lt;br /&gt;
** ongoing integrity of the AIP is maintained and can be demonstrated. ([https://wiki.umiacs.umd.edu/adapt/index.php/Ace ACE]?)&lt;br /&gt;
&lt;br /&gt;
See also [[Fixity checking and reporting]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature requirements]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Adding_Format_Identification_Tools&amp;diff=11726</id>
		<title>Adding Format Identification Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Adding_Format_Identification_Tools&amp;diff=11726"/>
		<updated>2017-03-23T19:44:49Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move to feature requirements category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffcccc; font-size: 120%; font-weight: bold; &amp;quot; cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
| Warning: These instructions are out of date as of Archivematica 1.0. Please see documentation on the [[Format_policy_registry_requirements | FPR]] and [[MCP | MCPServer]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will show a developer how to add a new tool new tool to identify file formats (file ids), and allow normalization based on the newly identified file formats.&lt;br /&gt;
&lt;br /&gt;
The workflow this section is looking to implement are:&lt;br /&gt;
* Make the fileID tool a selectable choice&lt;br /&gt;
* Specify that normalization will be using that fileIDType&lt;br /&gt;
* Identify files using that tool, with valid archivematica fileIDs (format IDs)&lt;br /&gt;
* Use those format IDs and associated commands to normalize files.&lt;br /&gt;
&lt;br /&gt;
Since each link in the workflow depends on the next one, we need to start at the end and work our way back.&lt;br /&gt;
&lt;br /&gt;
All pk's (primary keys) in the database are UUIDs generated with 'uuid -v4' on the command line&lt;br /&gt;
&lt;br /&gt;
=Add tool=&lt;br /&gt;
To include a new tool in the archivematica packages, it should be a dependency package itself.&lt;br /&gt;
&lt;br /&gt;
==FileIDTypes==&lt;br /&gt;
First, an entry for FileIDTypes is required for the new tool.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO &lt;br /&gt;
    `FileIDTypes` (`pk`, `description`, `replaces`)&lt;br /&gt;
VALUES &lt;br /&gt;
    ('afdbee13-eec5-4182-8c6c-f5638ee290f3','FileIDByFIDO',NULL);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Identify Files Script==&lt;br /&gt;
&lt;br /&gt;
The script to identify the file must be created, and an entry for it added to the FilesIdentifiedIDs table.  For Fido this script is [https://github.com/artefactual/archivematica/blob/642a3df29707e014f6c9ee5b7ea64785454c76cc/src/MCPClient/lib/clientScripts/archivematicaFido.py archivematicaFido.py]  All the arguments the script accepts will be listed as arguments in StandardTasksConfigs, below.&lt;br /&gt;
&lt;br /&gt;
This script must also be added to the client as a supported module by adding it to [https://github.com/artefactual/archivematica/blob/642a3df29707e014f6c9ee5b7ea64785454c76cc/src/MCPClient/etc/archivematicaClientModules archivematicaClientModules].  Please keep the list in alphabetical order.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
archivematicaFido_v0.0 = %clientScriptsDirectory%archivematicaFido.py  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Run tool==&lt;br /&gt;
Now, we set up the chain link that will run the script.  &lt;br /&gt;
&lt;br /&gt;
FIDO workflow link example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Set up the UUIDs to be used as pks&lt;br /&gt;
SET @TasksConfigPKReference = '46883944-8561-44d0-ac50-e1c3fd9aeb59';&lt;br /&gt;
SET @TasksConfig = '7f786b5c-c003-4ef1-97c2-c2269a04e89a';&lt;br /&gt;
SET @MicroServiceChainLink = '4c4281a1-43cd-4c6e-b1dc-573bd1a23c43';&lt;br /&gt;
SET @MicroServiceChainLinksExitCodes = 'd7653bbd-cd71-473d-b09e-fdd5b36a1d65';&lt;br /&gt;
&lt;br /&gt;
--Where to go once completed is the same for both&lt;br /&gt;
SET @YLink = '83484326-7be7-4f9f-b252-94553cd42370';&lt;br /&gt;
SET @defaultNextChainLink = @YLink;&lt;br /&gt;
SET @NextMicroServiceChainLink = @YLink;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO &lt;br /&gt;
    StandardTasksConfigs (pk, filterFileEnd, filterFileStart, filterSubDir, requiresOutputLock, standardOutputFile, standardErrorFile, execute, arguments)&lt;br /&gt;
VALUES &lt;br /&gt;
    (@TasksConfigPKReference, NULL, NULL, 'objects/', FALSE, NULL, NULL, 'archivematicaFido_v0.0', '--fileUUID &amp;quot;%fileUUID%&amp;quot; --SIPUUID &amp;quot;%SIPUUID%&amp;quot; --filePath &amp;quot;%relativeLocation%&amp;quot; --eventIdentifierUUID &amp;quot;%taskUUID%&amp;quot; --date &amp;quot;%date%&amp;quot; --fileGrpUse &amp;quot;%fileGrpUse%&amp;quot;');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* This creates the configuration for running the script&lt;br /&gt;
* filterFileEnd, filterFileStart, filterSubDir: What files to run the identification script on.  In this case, all the files in the objects/ subdirectory&lt;br /&gt;
* execute: The script to execute, as it was defined in [https://github.com/artefactual/archivematica/blob/642a3df29707e014f6c9ee5b7ea64785454c76cc/src/MCPClient/etc/archivematicaClientModules archivematicaClientModules]&lt;br /&gt;
* arguments: Anything that should be passed on the command line to the script.  It should include both the argument, and the value to pass to the argument.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO &lt;br /&gt;
    TasksConfigs (pk, taskType, taskTypePKReference, description)&lt;br /&gt;
VALUES&lt;br /&gt;
    (@TasksConfig, 'a6b1c323-7d36-428e-846a-e7e819423577', @TasksConfigPKReference, 'Identify file formats with FIDO');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* This maps between the task (inserted below), and its configuration&lt;br /&gt;
* taskType: We want this to run on every file, and a6b1c323-7d36-428e-846a-e7e819423577 is the pk for that&lt;br /&gt;
* taskTypePKReference: is semantically a foreign key to StandardTasksConfigs, where our config is stored&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO &lt;br /&gt;
    MicroServiceChainLinks (pk, microserviceGroup, currentTask, defaultNextChainLink)&lt;br /&gt;
VALUES &lt;br /&gt;
    (@MicroServiceChainLink, @microserviceGroup, @TasksConfig, @defaultNextChainLink);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* This creates the actual link to run&lt;br /&gt;
* microserviceGroup: &lt;br /&gt;
* currentTask: Points to the TasksConfigs we just inserted&lt;br /&gt;
* defaultNextChainLink: where to go if we can't figure out where else to go, usually on failure&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO &lt;br /&gt;
    MicroServiceChainLinksExitCodes (pk, microServiceChainLink, exitCode, nextMicroServiceChainLink)&lt;br /&gt;
VALUES &lt;br /&gt;
    (@MicroServiceChainLinksExitCodes, @MicroServiceChainLink, 0, @NextMicroServiceChainLink);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* This configures where to go once the MicroServiceChainLink is complete, based on exit code&lt;br /&gt;
* microServiceChainLink: the chain link we just defined&lt;br /&gt;
* exitCode: the exit code this is valid for.  In this case, 0=success.  These should obviously match what the script generates&lt;br /&gt;
* nextMicroServiceChainLink: where to go next.  The last link, to return to the processing workflow already exists, and must be defined as the next chain to process.  The link is 83484326-7be7-4f9f-b252-94553cd42370&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    MicroServiceChainLinks.pk, TasksConfigs.description &lt;br /&gt;
FROM &lt;br /&gt;
    MicroServiceChainLinks &lt;br /&gt;
    JOIN TasksConfigs ON TasksConfigs.pk = MicroServiceChainLinks.currentTask &lt;br /&gt;
WHERE &lt;br /&gt;
    MicroServiceChainLinks.pk='83484326-7be7-4f9f-b252-94553cd42370';&lt;br /&gt;
+--------------------------------------+---------------------------------------------------------------+&lt;br /&gt;
| pk                                   | description                                                   |&lt;br /&gt;
+--------------------------------------+---------------------------------------------------------------+&lt;br /&gt;
| 83484326-7be7-4f9f-b252-94553cd42370 | Resume after normalization file identification tool selected. |&lt;br /&gt;
+--------------------------------------+---------------------------------------------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Add workflow=&lt;br /&gt;
&lt;br /&gt;
==Set Selection==&lt;br /&gt;
The first step in the workflow is to set the selection as the tool to use during normalization. This is done by making an insert into the unit's variables table for the variable normalizationFileIdentificationToolIdentifierTypes. The value set is a piece of a SQL query used in [https://github.com/artefactual/archivematica/blob/master/src/MCPServer/lib/linkTaskManagerSplitOnFileIdAndruleset.py linkTaskManagerSplitOnFileIdAndruleset.py] to restrict the fileIDs used to the desired type.&lt;br /&gt;
&lt;br /&gt;
For FIDO:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO &lt;br /&gt;
    `MicroServiceChainLinks` (`pk`, `currentTask`, `defaultNextChainLink`, `defaultPlaySound`, `microserviceGroup`, `reloadFileList`, `defaultExitMessage`) &lt;br /&gt;
VALUES &lt;br /&gt;
    ('982229bd-73b8-432e-a1d9-2d9d15d7287d','1e516ea6-6814-4292-9ea9-552ebfaa0d23','4c4281a1-43cd-4c6e-b1dc-573bd1a23c43',NULL,'Normalize',1,'Failed');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO &lt;br /&gt;
    `TasksConfigs` (`pk`, `taskType`, `taskTypePKReference`, `description`) &lt;br /&gt;
VALUES &lt;br /&gt;
    ('1e516ea6-6814-4292-9ea9-552ebfaa0d23','6f0b612c-867f-4dfd-8e43-5b35b7f882d7','f130c16d-d419-4063-8c8b-2e4c3ad138bb','Set SIP to normalize with FIDO file identification.');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO &lt;br /&gt;
    `TasksConfigsSetUnitVariable` (`pk`, `variable`, `variableValue`, `microServiceChainLink`) &lt;br /&gt;
VALUES &lt;br /&gt;
    ('f130c16d-d419-4063-8c8b-2e4c3ad138bb', 'normalizationFileIdentificationToolIdentifierTypes', 'FileIDTypes.pk = \'afdbee13-eec5-4182-8c6c-f5638ee290f3\'', NULL);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO &lt;br /&gt;
    `MicroServiceChainLinksExitCodes` (`pk`, `microServiceChainLink`, `exitCode`, `nextMicroServiceChainLink`, `playSound`, `exitMessage`) &lt;br /&gt;
VALUES &lt;br /&gt;
    ('82c97f8d-087d-4636-9dd9-59bbc04e6520','982229bd-73b8-432e-a1d9-2d9d15d7287d',0,'4c4281a1-43cd-4c6e-b1dc-573bd1a23c43',NULL,'Completed successfully');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the chain that starts running the chain links we defined above:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO &lt;br /&gt;
    MicroServiceChains (pk, startingLink, description)&lt;br /&gt;
VALUES &lt;br /&gt;
    ('c76624a8-6f85-43cf-8ea7-0663502c712f', '982229bd-73b8-432e-a1d9-2d9d15d7287d', 'FIDO');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* MicroServiceChains.startingLink: the chain link we defined above&lt;br /&gt;
* MicroServiceChains.description: name of the tool&lt;br /&gt;
&lt;br /&gt;
==Chain Choice==&lt;br /&gt;
The choices for file identification tool choices are made at link f4dea20e-f3fe-4a37-b20f-0e70a7bc960e.&lt;br /&gt;
&lt;br /&gt;
Additional choices can be added by adding entries.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    chainAvailable, startingLink, description &lt;br /&gt;
FROM &lt;br /&gt;
    MicroServiceChainChoice &lt;br /&gt;
    JOIN MicroServiceChains ON chainAvailable = MicroServiceChains.pk &lt;br /&gt;
WHERE &lt;br /&gt;
    choiceAvailableAtLink = 'f4dea20e-f3fe-4a37-b20f-0e70a7bc960e';&lt;br /&gt;
+--------------------------------------+--------------------------------------+---------------------+&lt;br /&gt;
| chainAvailable                       | startingLink                         | description         |&lt;br /&gt;
+--------------------------------------+--------------------------------------+---------------------+&lt;br /&gt;
| 229e34d9-3768-4b78-97b7-6cd4a2f07868 | b549130c-943b-4791-b1f6-93b837990138 | extension (default) |&lt;br /&gt;
| c44e0251-1c69-482d-a679-669b70d09fb1 | 56b42318-3eb3-466c-8a0d-7ac272136a96 | FITS - DROID        |&lt;br /&gt;
| 1d8836cf-ac02-437c-9283-4ddb7b018810 | 37f2e794-6485-4524-a384-37b3209916ed | FITS - ffident      |&lt;br /&gt;
| d607f083-7c86-49a2-bc36-06a03db28a80 | 766b23ad-65ed-46a3-aa2e-b9bdaf3386d0 | FITS - JHOVE        |&lt;br /&gt;
| 586006d1-f3af-4b5f-9f1a-c893244fa7a9 | d7a0e33d-aa3c-435f-a6ef-8e39f2e7e3a0 | FITS - summary      |&lt;br /&gt;
| 50f47870-3932-4a88-879d-d021a24758ad | f87f13d2-8aae-45c9-bc8a-e5c32a37654e | FITS - file utility |&lt;br /&gt;
| c76624a8-6f85-43cf-8ea7-0663502c712f | 982229bd-73b8-432e-a1d9-2d9d15d7287d | FIDO                |&lt;br /&gt;
+--------------------------------------+--------------------------------------+---------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, we add the actual choice:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO &lt;br /&gt;
    MicroServiceChainChoice (pk, choiceAvailableAtLink, chainAvailable)&lt;br /&gt;
VALUES &lt;br /&gt;
    ('e95b8f27-ea52-4247-bdf0-615273bc5fca', 'f4dea20e-f3fe-4a37-b20f-0e70a7bc960e', 'c76624a8-6f85-43cf-8ea7-0663502c712f');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* MicroServiceChainChoice.choiceAvailableAtLink: MicroServiceChainLink where the choice is made available.  We know this is f4dea20e-f3fe-4a37-b20f-0e70a7bc960e&lt;br /&gt;
* MicroServiceChainChoice.chainAvailable: The chain we just added&lt;br /&gt;
&lt;br /&gt;
=Add FPR rules=&lt;br /&gt;
Populating the local FPR rules can be done by creating a temporary script, and using a set of sample files with extensions. Use the FileIDs for the extensions to populate values for already in preservation/access status, and related commands.&lt;br /&gt;
&lt;br /&gt;
Fido example: [https://github.com/artefactual/archivematica/commit/ea02f7d6ffc420d5675fcd3bf261c63870881a65]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Deprecated]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Access_tab&amp;diff=11725</id>
		<title>Access tab</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Access_tab&amp;diff=11725"/>
		<updated>2017-03-23T19:44:16Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move to feature requirements category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[:Category:Development documentation|Development documentation]] &amp;gt; Access tab&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
*Allow navigation from AIP to DIP(s) and DIP(s) to AIP&lt;br /&gt;
*Link AIP to uploaded DIP(s)&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Access.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature requirements]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=TRIM_exports&amp;diff=11724</id>
		<title>TRIM exports</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=TRIM_exports&amp;diff=11724"/>
		<updated>2017-03-23T19:43:36Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move to feature requirements category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[:Category:Development documentation|Development documentation]] &amp;gt; TRIM exports&lt;br /&gt;
&lt;br /&gt;
This page documents ingest of TRIM exports based on requirements for VanDocs ingest at City of Vancouver Archives.&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature requirements]]&lt;br /&gt;
&lt;br /&gt;
==TRIM export contents==&lt;br /&gt;
&lt;br /&gt;
A TRIM export consists of &lt;br /&gt;
*1 or more containers&lt;br /&gt;
*A manifest of the transfer (manifest.txt)&lt;br /&gt;
*XML schema documentation for all xml files in the transfer (container, location and document xml metadata)&lt;br /&gt;
*Location metadata (Location.xml)&lt;br /&gt;
*Container metadata (ContainerMetadata.xml)&lt;br /&gt;
*Document metadata (eg DOC_2012_000100_Metadata.xml)&lt;br /&gt;
*Documents (eg DOC_2012_000100.docx)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:VanDocs1g.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Processing a TRIM export==&lt;br /&gt;
&lt;br /&gt;
===Parsing contents to the SIP===&lt;br /&gt;
&lt;br /&gt;
*Each transfer is broken into one SIP per container &lt;br /&gt;
*manifest.txt is copied to metadata/submissionDocumentation/&lt;br /&gt;
*Location.xml is copied to metadata/&lt;br /&gt;
*All schema documentation is copied to metadata/&lt;br /&gt;
*The relevant ContainerMetadata.xml is copied to metadata/&lt;br /&gt;
*The relevant document metadata files are copied to metadata/&lt;br /&gt;
*All documents are copied to objects/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:VanDocs2g.png|680px|thumb|center|A SIP generated from a TRIM export]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Verifying manifest===&lt;br /&gt;
&lt;br /&gt;
The contents of the transfer must be verified against the manifest.txt file during the &amp;quot;Verify transfer compliance&amp;quot; micro-service.&lt;br /&gt;
Associated PREMIS event: manifest check. See below for details.&lt;br /&gt;
&lt;br /&gt;
==Manifest check==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=90%&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;background-color:#cccccc;&amp;quot;&lt;br /&gt;
!style=&amp;quot;width:20%&amp;quot;|'''Semantic unit'''&lt;br /&gt;
!style=&amp;quot;width:20%&amp;quot;|'''Semantic component'''&lt;br /&gt;
!style=&amp;quot;width:20%&amp;quot;|'''Sample value(s)'''&lt;br /&gt;
!style=&amp;quot;width:20%&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
|eventIdentifier&lt;br /&gt;
|eventIdentifierType&lt;br /&gt;
|UUID&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|eventIdentifier&lt;br /&gt;
|eventIdentifierValue&lt;br /&gt;
|21h50321-6d7b-3855-89ag-a8b0fhc1f256&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|eventType&lt;br /&gt;
|none&lt;br /&gt;
|manifest check&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|eventDateTime&lt;br /&gt;
|none&lt;br /&gt;
|2011-08-01T09:08:46-01:00&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|eventDetail&lt;br /&gt;
|none&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|eventOutcomeInformation&lt;br /&gt;
|eventOutcome&lt;br /&gt;
|{pass; fail}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|eventOutcomeDetail&lt;br /&gt;
|eventOutcomeDetailNote&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|linkingAgentIdentifier&lt;br /&gt;
|linkingAgentIdentifierType&lt;br /&gt;
|preservation system&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|linkingAgentIdentifier&lt;br /&gt;
|linkingAgentIdentifierValue&lt;br /&gt;
|Archivematica-1.0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Verifying checksums===&lt;br /&gt;
&lt;br /&gt;
Each document metadata file contains an md5 checksum for the document:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:checksumg.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These checksums must be verified during the &amp;quot;Verify transfer checksums&amp;quot; micro-service.&lt;br /&gt;
Associated PREMIS event: fixity check&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fixity check==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=90%&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;background-color:#cccccc;&amp;quot;&lt;br /&gt;
!style=&amp;quot;width:20%&amp;quot;|'''Semantic unit'''&lt;br /&gt;
!style=&amp;quot;width:20%&amp;quot;|'''Semantic component'''&lt;br /&gt;
!style=&amp;quot;width:20%&amp;quot;|'''Sample value(s)'''&lt;br /&gt;
!style=&amp;quot;width:20%&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
|eventIdentifier&lt;br /&gt;
|eventIdentifierType&lt;br /&gt;
|UUID&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|eventIdentifier&lt;br /&gt;
|eventIdentifierValue&lt;br /&gt;
|73f87321-6d7b-3855-89ag-a8b0fhc1f256&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|eventType&lt;br /&gt;
|none&lt;br /&gt;
|fixity check&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|eventDateTime&lt;br /&gt;
|none&lt;br /&gt;
|2010-08-01T09:08:46-01:00&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|eventDetail&lt;br /&gt;
|none&lt;br /&gt;
|program=&amp;quot;MD5Deep&amp;quot;; version=&amp;quot;3.6&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|eventOutcomeInformation&lt;br /&gt;
|eventOutcome&lt;br /&gt;
|{pass; fail}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|eventOutcomeDetail&lt;br /&gt;
|eventOutcomeDetailNote&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|linkingAgentIdentifier&lt;br /&gt;
|linkingAgentIdentifierType&lt;br /&gt;
|preservation system&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|linkingAgentIdentifier&lt;br /&gt;
|linkingAgentIdentifierValue&lt;br /&gt;
|Archivematica-1.0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==The AIP METS file==&lt;br /&gt;
&lt;br /&gt;
===dmdSecs===&lt;br /&gt;
&lt;br /&gt;
*Each container will have one dmdSec consisting of Dublin Core metadata derived from the TRIM export metadata (''ContainerMetadata.xml'')&lt;br /&gt;
*Each file will have one dmdSec consisting of Dublin Core metadata derived from the TRIM export metadata (eg ''DOC_2012_000100_Metadata.xml'')&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:dmdSecsg.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Container metadata mapping====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!'''TRIM element'''&lt;br /&gt;
!'''DC element'''&lt;br /&gt;
!'''RAD/AtoM element'''&lt;br /&gt;
!'''Comments'''&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;TitleFreeTextPart&amp;gt;&lt;br /&gt;
|&amp;lt;dcterms:title&amp;gt;&lt;br /&gt;
|'''Title proper'''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;Department&amp;gt;&lt;br /&gt;
|&amp;lt;dcterms:creator&amp;gt;&lt;br /&gt;
|'''Name'''&lt;br /&gt;
|AtoM adds a Name field linked to the Date(s) of creation field&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;DateModified&amp;gt;&lt;br /&gt;
|&amp;lt;dcterms:date&amp;gt;&lt;br /&gt;
|'''Date(s) of creation'''&lt;br /&gt;
|Date range based on earliest and latest DateModified in document metadata&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;OPR&amp;gt;&lt;br /&gt;
|&amp;lt;dcterms:provenance&amp;gt;&lt;br /&gt;
|'''Immediate source of acquisition'''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;RecordNumber&amp;gt;&lt;br /&gt;
|&amp;lt;dc:identifier&amp;gt;&lt;br /&gt;
|'''Identifier'''&lt;br /&gt;
|Only the numbers to the right of the slash in this field are used - eg 04-4000/0000070 --&amp;gt; 0000070&lt;br /&gt;
|-&lt;br /&gt;
|n/a&lt;br /&gt;
|&amp;lt;dcterms:extent&amp;gt;&lt;br /&gt;
|'''Physical description'''&lt;br /&gt;
|Count of documents in the SIP plus fixed text: &amp;quot;digital objects&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|n/a&lt;br /&gt;
|n/a&lt;br /&gt;
|'''Level of description'''&lt;br /&gt;
|Level of description taken from METS structMap div TYPE&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;FullClassificationNumber&amp;gt;&lt;br /&gt;
|&amp;lt;dcterms:isPartOf&amp;gt;&lt;br /&gt;
|n/a&lt;br /&gt;
|Field does not map to RAD but is used along with &amp;lt;OPR&amp;gt; to determine DIP upload destination&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Sample container description'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!'''TRIM'''&lt;br /&gt;
!'''AtoM'''&lt;br /&gt;
|-&lt;br /&gt;
|'''&amp;lt;TitleFreeTextPart&amp;gt;''' PCI Compliance&lt;br /&gt;
|'''Title proper''': PCI Compliance&lt;br /&gt;
|-&lt;br /&gt;
|'''&amp;lt;Department&amp;gt;''' IT Strategy, Business Relationships and Projects - IT&lt;br /&gt;
|'''Name''': IT Strategy, Business Relationships and Projects - IT&lt;br /&gt;
|-&lt;br /&gt;
|'''&amp;lt;DateModified&amp;gt;''' 2010-03-01T18:20:15-08:00 / 2012-05-01T19:26:23-08:00&lt;br /&gt;
|'''Date(s) of creation''': 2010-03-01 - 2012-05-01&lt;br /&gt;
|-&lt;br /&gt;
|'''&amp;lt;OPR&amp;gt;''' IT Business Strategies&lt;br /&gt;
|'''Immediate source of acquisition''': IT Business Strategies&lt;br /&gt;
|-&lt;br /&gt;
|'''&amp;lt;RecordNumber&amp;gt;''' 04-4000/0000070&lt;br /&gt;
|'''Identifier''': 0000070&lt;br /&gt;
|-&lt;br /&gt;
|n/a&lt;br /&gt;
|'''Physical description''': 184 digital objects&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|n/a&lt;br /&gt;
|'''Level of description''': File&lt;br /&gt;
|-&lt;br /&gt;
|'''&amp;lt;FullClassificationNumber&amp;gt;'''04-4000-20&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Document metadata mapping====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!'''TRIM element'''&lt;br /&gt;
!'''DC element'''&lt;br /&gt;
!'''RAD/AtoM element'''&lt;br /&gt;
!'''Comments'''&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;TitleFreeTextPart&amp;gt;&lt;br /&gt;
|&amp;lt;dc:title&amp;gt;&lt;br /&gt;
|'''Title proper'''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;DateModified&amp;gt;&lt;br /&gt;
|&amp;lt;dc:date&amp;gt;&lt;br /&gt;
|'''Date(s) of creation'''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;RecordNumber&amp;gt;&lt;br /&gt;
|&amp;lt;dc:identifier&amp;gt;&lt;br /&gt;
|'''Identifier'''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n/a&lt;br /&gt;
|n/a&lt;br /&gt;
|'''Level of description'''&lt;br /&gt;
|Level of description will be obtained from METS StructMap div TYPE&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Sample document description'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!'''TRIM'''&lt;br /&gt;
!'''AtoM'''&lt;br /&gt;
|-&lt;br /&gt;
|'''&amp;lt;TitleFreeTextPart&amp;gt;''' MCPP Project Report&lt;br /&gt;
|'''Title proper''': MCPP Project Report&lt;br /&gt;
|-&lt;br /&gt;
|'''&amp;lt;DateModified&amp;gt;''' 2010-03-01T18:20:15-08:00&lt;br /&gt;
|'''Date(s) of creation''': 2010-03-01&lt;br /&gt;
|-&lt;br /&gt;
|'''&amp;lt;RecordNumber&amp;gt;''' DOC/2010/000100&lt;br /&gt;
|'''Identifier''': DOC/2010/000100&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|n/a&lt;br /&gt;
|'''Level of description''': Item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===amdSecs===&lt;br /&gt;
*Each container will have an amdSec consisting of:&lt;br /&gt;
**A digiprovMD with an xlink reference to metadata/ContainerMetadata.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TRIMamdSec1g.png|680px|thumb|center|Sample amdSec for a container]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Each file will have an amdSec consisting of:&lt;br /&gt;
**A rightsMD populated with PREMIS rights (see '''Flagging closed AIPs''', below)&lt;br /&gt;
**A digiprovMD with an xlink reference to the the relevant document metadata xml file&lt;br /&gt;
**A techMD and digiprovMDs generated by Archivematica during processing&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TRIMamdSec2g.png|680px|thumb|center|Sample amdSec for a file]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===fileSec and structMaps===&lt;br /&gt;
*Each METS file will have two structMaps, the Archivematica default structMap and a logical structMap for hierarchically arranging the container into a file and its child items&lt;br /&gt;
*The container and file div TYPE elements in the logical structMap will map to the RAD Level of description field in AtoM&lt;br /&gt;
*The structMap contains the links between containers and files and their relevant dmdSecs&lt;br /&gt;
*The structMap also contains the link between the container and its amdSec&lt;br /&gt;
*The files are linked to their amdSecs in the fileSec&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:structMapg.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Flagging closed AIPs==&lt;br /&gt;
&lt;br /&gt;
*The container metadata file (ContainerMetadata.xml) has two fields whose values will be used to populate the PREMIS rights entity in the SIP (in the METS &amp;lt;rightsMD&amp;gt; element), DateClosed and RetentionSchedule. Examples are:&lt;br /&gt;
**&amp;lt;DateClosed&amp;gt;2012-08-17T16:13:31-08:00&amp;lt;/DateClosed&amp;gt;&lt;br /&gt;
**&amp;lt;RetentionSchedule&amp;gt;EV2.3.A&amp;lt;/RetentionSchedule&amp;gt;&lt;br /&gt;
*The DateClosed field will be used to populate the termOfRestriction startDate in the PREMIS rights entity&lt;br /&gt;
*The DateClosed and RetentionSchedule fields will be used to calculate the termOfRestriction endDate in the PREMIS rights entity. For the examples provided above, Archivematica would calculate 5 years from the end of 2012-08-17 and then to the end of the calendar year, for a result of 2017-12-31.&lt;br /&gt;
*The closure period would also be captured as a standardized free text entry in the rightsGrantedNote field of the PREMIS rights entity, for example: Closed until 2012-12-31.&lt;br /&gt;
*Other PREMIS fields would be auto-populated for every VanDocs ingest as shown in the screenshot below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:VanDocs_rights.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
==DIP upload==&lt;br /&gt;
&lt;br /&gt;
*Upon DIP upload to AtoM, the container will become a file-level description, with level of description populated by the structMap div label for the container (&amp;quot;file&amp;quot;). Each object in the DIP will become a child level with the level of description populated by the structMap div label for the object (&amp;quot;item&amp;quot;).&lt;br /&gt;
*Descriptive metadata in RAD will be populated by the appropriate dmdSec for each container and object (see container and document metadata mapping, above).&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Transfer_and_SIP_creation&amp;diff=11723</id>
		<title>Transfer and SIP creation</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Transfer_and_SIP_creation&amp;diff=11723"/>
		<updated>2017-03-23T19:42:53Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move to feature requirements category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[:Category:Development documentation|Development documentation]] &amp;gt; Transfer and SIP creation&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature requirements]]&lt;br /&gt;
&lt;br /&gt;
= Use Cases =&lt;br /&gt;
* Standard (i.e. unstructured)&lt;br /&gt;
* Bag (zipped and unzipped)&lt;br /&gt;
* Maildir&lt;br /&gt;
* TRIM export&lt;br /&gt;
* [[Dspace exports]]&lt;br /&gt;
&lt;br /&gt;
= Mockups =&lt;br /&gt;
&lt;br /&gt;
1.0 Mockup for Create SIP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:1.0_CreateSIP.png|1000px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
= Workflow (Standard Transfer) =&lt;br /&gt;
In these workflow diagrams, the white ovals are manual steps and the grey ovals are automated steps.&lt;br /&gt;
===Transfer and create SIPs===&lt;br /&gt;
&lt;br /&gt;
'''0.9 Transfer workflow'''&lt;br /&gt;
&lt;br /&gt;
[[File:transferWorkflow0.9.png|680px|thumb|center|]]&lt;br /&gt;
[[File:transferWorkflow0.9pt2.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
[[Media:transferWorkflow0.9.pdf|transferWorkflow0.9.pdf]]&lt;br /&gt;
&lt;br /&gt;
'''0.9 Create SIP workflow'''&lt;br /&gt;
&lt;br /&gt;
[[File:createSIPWorkflow0.9.png|680px|thumb|center|]]&lt;br /&gt;
[[File:createSIPWorkflow0.9pt2.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
[[Media:createSIPWorkflow0.9.pdf]]&lt;br /&gt;
&lt;br /&gt;
'''0.8 Transfer workflow'''&lt;br /&gt;
&lt;br /&gt;
[[File:transfer1.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
====Transfer indexing requirements 0.9 and beyond====&lt;br /&gt;
&lt;br /&gt;
* Full text content&lt;br /&gt;
* File embedded metadata&lt;br /&gt;
* Formats - by folder, by transfer&lt;br /&gt;
* Keyword &amp;amp; pattern matching for privacy/security sensitive information (e.g. social insurance numbers/social security numbers, credit card numbers, email addresses security keywords like 'private', 'confidential' - find or generate list)&lt;br /&gt;
* list of PDFs that have not been OCR'ed&lt;br /&gt;
* list of password protected / encrypted files&lt;br /&gt;
* duplicates with their file paths&lt;br /&gt;
&lt;br /&gt;
Reports for these indexing requirements will be available via the Examine Contents windows, accessible from the Create SIP browser window in the Ingest tab&lt;br /&gt;
&lt;br /&gt;
= Examine contents splash page = &lt;br /&gt;
&lt;br /&gt;
[[File:1.0_ExamineContents.png|1000px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
** information about the transfer or selected file group (number of files, size, name, uuid, accession #, and?)&lt;br /&gt;
** pie graph showing file type distribution overall and bargraph showing file type by folder and ordered by size)&lt;br /&gt;
***clickable links: file type opens into new tab with file browser interface of all of specified format), folders opens into new tab with file browser interface of entire folder in context of rest of transfer)&lt;br /&gt;
** search box to search index (opens in new tab)&lt;br /&gt;
** Report options (each opens in new tab):&lt;br /&gt;
*** See duplicates with locations&lt;br /&gt;
*** See Security keywords, CC numbers, SIN/SS#s, Email addresses (with distribution graph)&lt;br /&gt;
*** See password protected files with distribution (graph?)&lt;br /&gt;
&lt;br /&gt;
===Ingest SIPs===&lt;br /&gt;
[[File:ingest.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
= Workflow (DSpace export) =&lt;br /&gt;
In these workflow diagrams, the white ovals are manual steps and the grey ovals are automated steps.&lt;br /&gt;
&lt;br /&gt;
===Transfer and create SIPs===&lt;br /&gt;
[[File:Dspace1.png|680px|thumb|center|]]&lt;br /&gt;
[[File:DSpace2.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
===Ingest SIPs===&lt;br /&gt;
[[File:DSpace3.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
= Dashboard design =&lt;br /&gt;
===Dashboard showing list of transfers===&lt;br /&gt;
[[File:TransferDashboard1.png|680px|thumb|center|]]&lt;br /&gt;
===Click the metadata icon to add transfer metadata===&lt;br /&gt;
[[File:TransferDashboard2.png|680px|thumb|center|]]&lt;br /&gt;
===Add transfer metadata===&lt;br /&gt;
[[File:TransferDashboard3.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
===A completed transfer===&lt;br /&gt;
[[File:TransferDashboard4.png|680px|thumb|center|]]&lt;br /&gt;
===File visualization reporting page===&lt;br /&gt;
[[File:reports.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
= Create SIPs using file manager =&lt;br /&gt;
In this mockup, the user has completed a transfer, has created SIP folders in ingestSIP and is preparing to move objects from the completed transfer into the SIP folders.&lt;br /&gt;
&lt;br /&gt;
[[File:thunar.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
= Add Dublin Core metadata to a SIP during ingest =&lt;br /&gt;
*All fields are simple Dublin Core except for Relation: Is Part Of, which is designed to upload the SIP to a pre-existing archival description in the access system.&lt;br /&gt;
*Multi-value entries are separated by a backward slash: \.&lt;br /&gt;
&lt;br /&gt;
[[File:Ingest1a.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
= The dashboard showing a SIP that has completed the ingest process =&lt;br /&gt;
&lt;br /&gt;
[[File:Ingest2.png|680px|thumb|center|]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Transfer_backlog_requirements&amp;diff=11722</id>
		<title>Transfer backlog requirements</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Transfer_backlog_requirements&amp;diff=11722"/>
		<updated>2017-03-23T19:42:25Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move to feature requirements category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[:Category:Development documentation|Development documentation]] &amp;gt; Transfer backlog requirements&lt;br /&gt;
&lt;br /&gt;
Release 1.0&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature requirements]]&lt;br /&gt;
&lt;br /&gt;
== Transfer Backlog Management ==&lt;br /&gt;
* Related issues: Issue 951, Issue 1220, Issue 1141, Issue 1225, Issue 1257&lt;br /&gt;
&lt;br /&gt;
= Requirements for transfer backlog search =&lt;br /&gt;
&lt;br /&gt;
* Add ability to search transfer backlog and send one or more transfers to Ingest&lt;br /&gt;
* Add ability to download and/or view files/transfers (via right click)&lt;br /&gt;
* Search the following fields: Any field, transfer name, file name, accession number, PUID, Mimetype, Date - Ingest&lt;br /&gt;
&lt;br /&gt;
= Mockup of transfer backlog search =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:1.0_TransferBacklogSearch.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
[[File:1.0_TransBacklogSearchResults.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
= Transfer Workflow = &lt;br /&gt;
&lt;br /&gt;
* Administration - allow MCP access to media or storage where transfer is located&lt;br /&gt;
* Assign accession number to transfer&lt;br /&gt;
* Remove transfer backup from workflow - no long processing configuration option&lt;br /&gt;
* Add Send transfer to backlog microservice&lt;br /&gt;
* Add Search transfer backlog tab from Ingest in Dashboard&lt;br /&gt;
* Add ability to download and/or view transfers and files from Search tab&lt;br /&gt;
* Add ability to send transfers from backlog search to Ingest/Create SIP (checkboxes, send button)&lt;br /&gt;
* see workflow diagrams below &lt;br /&gt;
&lt;br /&gt;
'''0.9 Transfer workflow'''&lt;br /&gt;
&lt;br /&gt;
* grey steps are automated, white are manual&lt;br /&gt;
&lt;br /&gt;
[[File:transferWorkflow0.9.png|680px|thumb|center|]]&lt;br /&gt;
[[File:transferWorkflow0.9pt2.png|680px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
[[Media:transferWorkflow0.9.pdf|transferWorkflow0.9.pdf]]&lt;br /&gt;
&lt;br /&gt;
= Administration Tab in Dashboard = &lt;br /&gt;
&lt;br /&gt;
* Assign permission and access to the MCPServer to copy from transfer media (hard drives, optical media, USB, etc.) or network location. &lt;br /&gt;
* Assign transfer backlog locations (configuration is done outside of AM)&lt;br /&gt;
* Assign source directories&lt;br /&gt;
* Define transfer types&lt;br /&gt;
* Assign report locations (post-1.0)&lt;br /&gt;
* Set AIP storage location&lt;br /&gt;
* Set DIP upload location&lt;br /&gt;
&lt;br /&gt;
= Accession metadata =&lt;br /&gt;
&lt;br /&gt;
* PREMIS Event = Registration&lt;br /&gt;
         &amp;lt;event&amp;gt;&lt;br /&gt;
            &amp;lt;eventIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierType&amp;gt;UUID&amp;lt;/eventIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierValue&amp;gt;35cbe00d-d661-4174-b11a-e203f5608008&amp;lt;/eventIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/eventIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;eventType&amp;gt;registration&amp;lt;/eventType&amp;gt;&lt;br /&gt;
            &amp;lt;eventDateTime&amp;gt;2012-03-14&amp;lt;/eventDateTime&amp;gt;&lt;br /&gt;
            &amp;lt;eventDetail&amp;gt;&amp;lt;/eventDetail&amp;gt;&lt;br /&gt;
            &amp;lt;eventOutcomeInformation&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcome&amp;gt;&amp;lt;/eventOutcome&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcomeDetail&amp;gt;&lt;br /&gt;
                &amp;lt;eventOutcomeDetailNote&amp;gt;accession#2012-029&amp;lt;/eventOutcomeDetailNote&amp;gt;&lt;br /&gt;
              &amp;lt;/eventOutcomeDetail&amp;gt;&lt;br /&gt;
            &amp;lt;/eventOutcomeInformation&amp;gt;&lt;br /&gt;
            &amp;lt;linkingAgentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierType&amp;gt;archivist&amp;lt;/linkingAgentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierValue&amp;gt;Courtney Mumma&amp;lt;/linkingAgentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/linkingAgentIdentifier&amp;gt;&lt;br /&gt;
          &amp;lt;/event&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Manually input metadata in template on dashboard (See [[File_Browser_Requirements]]) : accession number&lt;br /&gt;
* Agent is the archivist logged in at the time doing the accession (post-1.0, for 1.0 this will still be repository)&lt;br /&gt;
* Event name is &amp;quot;registration&amp;quot; (to be added to PREMIS events master list should we decide to implement)&lt;br /&gt;
* UUID&lt;br /&gt;
&lt;br /&gt;
* Also see Issue 787 on the Archivematica issues list&lt;br /&gt;
&lt;br /&gt;
= Microservices Completed Before Move to Backlog =&lt;br /&gt;
&lt;br /&gt;
* All transfer microservices&lt;br /&gt;
* Indexing: See [[Transfer_and_SIP_creation#Transfer_indexing_requirements_0.9_and_beyond]]&lt;br /&gt;
&lt;br /&gt;
= Handling of Submission Documentation =&lt;br /&gt;
&lt;br /&gt;
* [http://sites.tufts.edu/dca/about-us/research-initiatives/taper-tufts-accessioning-program-for-electronic-records/| TAPER]?&lt;br /&gt;
* Normalized with objects in AIP (0.8)&lt;br /&gt;
* Upload submission documentation with transfer in transfer tab - Issue 1255&lt;br /&gt;
&lt;br /&gt;
= Search transfers from Archival Storage =&lt;br /&gt;
&lt;br /&gt;
New sponsored development planned for Archivematica 1.6 or later will allow users to manage the transfer backlog through the Archival Storage tab, as outlined in general workflows described in these diagrams:&lt;br /&gt;
&lt;br /&gt;
[[File:Transfer_management_workflows.png|700px]]&lt;br /&gt;
&lt;br /&gt;
As outlined above, users will be able to:&lt;br /&gt;
&lt;br /&gt;
*Search transfers from archival storage tab&lt;br /&gt;
*Download copies of transfers or selected files from archival storage tab&lt;br /&gt;
*Be able to perform transfer deletion requests from archival storage tab&lt;br /&gt;
&lt;br /&gt;
'''Transfer search user stories'''&lt;br /&gt;
&lt;br /&gt;
As an archivist, I need to find transfers by searching...&lt;br /&gt;
&lt;br /&gt;
* by the name of the transfer&lt;br /&gt;
* by the date the transfer was stored in backlog&lt;br /&gt;
* by names of files within the transfer&lt;br /&gt;
* by....?&lt;br /&gt;
&lt;br /&gt;
'''Mockups: Version 1'''&lt;br /&gt;
&lt;br /&gt;
Search transfers from Archival Storage:&lt;br /&gt;
&lt;br /&gt;
[[File:Archival_Storage_Transfer_Search.png|800px]]&lt;br /&gt;
&lt;br /&gt;
'''Notes:''' &lt;br /&gt;
&lt;br /&gt;
*Click on &amp;quot;Show transfers&amp;quot; to search AIPs as well as Transfers&lt;br /&gt;
*A new column in the table indicates whether a package is a Transfer or an AIP.&lt;br /&gt;
*To trigger transfer deletion, click on red &amp;quot;remove&amp;quot; icon (same functionality as AIP deletion)&lt;br /&gt;
&lt;br /&gt;
Search files from transfers in Archival Storage:&lt;br /&gt;
&lt;br /&gt;
[[File:Archival_Storage_Transfer_file_search.png|800px]]&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
&lt;br /&gt;
*Clicking on both &amp;quot;Show files&amp;quot; and &amp;quot;Show transfers&amp;quot; before searching will load preview of files from transfer backlog.&lt;br /&gt;
*The UUID of the package and an indication of whether the file is from a Transfer or an AIP is in the right column.&lt;br /&gt;
&lt;br /&gt;
'''Mockups: Version 2'''&lt;br /&gt;
&lt;br /&gt;
In this version, toggling between searching for AIPs/Transfers is done through a tab at the top. This makes the development significantly less complicated, as we would not need to combine the Elasticsearch indexes for transfer METS and AIP METS.&lt;br /&gt;
&lt;br /&gt;
Transfer search:&lt;br /&gt;
&lt;br /&gt;
[[File:Transfer_search_v2.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Files within transfer search:&lt;br /&gt;
&lt;br /&gt;
[[File:Transfer_search_files_v2.png|800px]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Sword_API&amp;diff=11721</id>
		<title>Sword API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Sword_API&amp;diff=11721"/>
		<updated>2017-03-23T19:41:47Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move to feature requirements category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Documentation]] &amp;gt; [[Requirements]] &amp;gt; Sword API&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature requirements]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
One of the 1.1 release features is a sponsored project to integrate Archivematica with Islandora.  This integration will be accomplished by creating a [http://swordapp.org SWORD] 2.0 API for the Archivematica [https://www.archivematica.org/wiki/Administrator_manual_1.0#Storage_service storage service].  Islandora development work will add functionality to Islandora to use this API to deposit digital objects into Archviematica.&lt;br /&gt;
&lt;br /&gt;
As described [[Overview|elsewhere]] on this wiki, ''&amp;quot;the primary function of Archivematica is to process digital transfers (accessioned digital objects), turn them into SIPs, apply format policies and create high-quality, repository-independent Archival Information Packages (AIP)&amp;quot;''.&lt;br /&gt;
&lt;br /&gt;
The Archivematica Sword API allows 3rd party applications to automate the process of creating Transfers.  &lt;br /&gt;
#Create Transfer - set the name and other metadata about a Transfer&lt;br /&gt;
#Populate Transfer - add/edit/update digital objects in a Transfer, and associated metadata&lt;br /&gt;
#Finalize Transfer - indicates that the Transfer is ready to start processing.&lt;br /&gt;
&lt;br /&gt;
After content has been deposited, if users have access to the deposit directory they can also manually manipulate the deposit directory aside from any manipulation using the API.&lt;br /&gt;
&lt;br /&gt;
Once a Transfer has been created, populated and finalized, Archivematica will begin processing that Transfer.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
The SWORD API is part of the Archivematica storage service REST API. The storage service also talks to the Archivematica dashboard, however, to notify it that a, transfer created from a SWORD deposit, has been approved for processing.&lt;br /&gt;
&lt;br /&gt;
To use the SWORD API you must install the Archivematica dashboard 1.0 branch and the Archivematica storage service dev/issue-5980-islandora branch.&lt;br /&gt;
&lt;br /&gt;
Dashboard configuration:&lt;br /&gt;
&lt;br /&gt;
# In dashboard REST API administration, add the IP of the storage service server to IP whitelist&lt;br /&gt;
# In dashboard user administration, take note of username and API key for a dashboard user (example: user &amp;quot;demo&amp;quot; and API key &amp;quot;4e5f32ab2aefd3543e1b19a2de554dd65f90108a&amp;quot;)&lt;br /&gt;
# In dashboard general admininstration, take note of the dashboard's UUID&lt;br /&gt;
&lt;br /&gt;
Storage service configuration:&lt;br /&gt;
&lt;br /&gt;
# In the storage service web interface's Pipelines tab, find the dashboard pipeline (using dashboard's UUID noted during dashboard configuration)&lt;br /&gt;
# Enter the dashboard's IP address into the &amp;quot;Remote name&amp;quot; field and the user and API key noted earlier into the &amp;quot;Api username&amp;quot; and &amp;quot;Api key&amp;quot; fields. Click the button to submit these changes.&lt;br /&gt;
&lt;br /&gt;
After configuration you'll need to find the space UUID of the SWORD server. To do so, in the web interface's Spaces tab, click &amp;quot;View Details and Locations&amp;quot; for the SWORD server. The UUID will be shown at the top of the screen. The UUID is used to figure out the initial API URL to access (for example: &amp;quot;http://localhost:8000/api/v1/space/c0bee7c8-3e9b-41e3-8600-ee9b2c475da2/sword/collection/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Example session ==&lt;br /&gt;
&lt;br /&gt;
Below is an example session using curl to manipulate the API. In the example a deposit is created, a file is added to it, and it is finalized.&lt;br /&gt;
&lt;br /&gt;
NOTE: The SWORD API is in the process of being moved to the storage service. These URLs may not work.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;# create new deposit, providing a METS file specifying digital object URLs to download in the background&lt;br /&gt;
curl -v -H &amp;quot;In-Progress: true&amp;quot; --data-binary @mets.xml --request POST http://localhost:8000/api/v1/location/c0bee7c8-3e9b-41e3-8600-ee9b2c475da2/sword/collection/&lt;br /&gt;
# response XML includes endpoints for adding additional files, etc.&lt;br /&gt;
&lt;br /&gt;
# add a single file to the deposit&lt;br /&gt;
curl -v -H &amp;quot;Content-Disposition: attachment; filename=cat.jpg&amp;quot; --request POST \&lt;br /&gt;
    --data-binary &amp;quot;@cat.jpg&amp;quot; \&lt;br /&gt;
    http://127.0.0.1:8000/api/v1/file/9c8b4ac0-0407-4360-a10d-af6c62a48b69/sword/media/&lt;br /&gt;
&lt;br /&gt;
# start another background download of resources specified in a METS&lt;br /&gt;
curl -v -H &amp;quot;In-Progress: true&amp;quot; -H &amp;quot;Packaging: METS&amp;quot; --data-binary @mets.xml --request POST http://127.0.0.1:8000/api/v1/file/9c8b4ac0-0407-4360-a10d-af6c62a48b69/sword/media/&lt;br /&gt;
&lt;br /&gt;
# finalize transfer and approve processing&lt;br /&gt;
curl -v -H &amp;quot;In-Progress: false&amp;quot; --request POST http://127.0.0.1:8000/api/v1/file/149cc29d-6472-4bcf-bee8-f8223bf60580/sword/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You might, at some point, want to list the transfers that have been started. The following curl command will do so.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -v http://localhost:8000/api/v1/location/c0bee7c8-3e9b-41e3-8600-ee9b2c475da2/sword/collection/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you're working on a transfer and want to list what files are included in it, the following curl command will list them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;# list files in transfer&lt;br /&gt;
curl -v http://127.0.0.1:8000/api/v1/file/9c8b4ac0-0407-4360-a10d-af6c62a48b69/sword/media/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you've started a deposit, but want to discard it, you can delete the deposit. The following curl command shows an example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -v -XDELETE http://127.0.0.1:8000/api/v1/file/149cc29d-6472-4bcf-bee8-f8223bf60580/sword/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Single step deposit ==&lt;br /&gt;
&lt;br /&gt;
If you wanted to deposit a transfer then immediately finalize it, after background downloading is complete, you could use something like the following curl command.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -v -H &amp;quot;In-Progress: false&amp;quot; --data-binary @mets.xml --request POST http://localhost:8000/api/v1/location/c0bee7c8-3e9b-41e3-8600-ee9b2c475da2/sword/collection/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
&lt;br /&gt;
=== Service document ===&lt;br /&gt;
&lt;br /&gt;
The SWORD service document provides information about the SWORD provider's capacities and lists SWORD collections. Archivematica currently includes one SWORD collection to which SWORD deposits can be made: transfers.&lt;br /&gt;
&lt;br /&gt;
The SWORD service document endpoint is located at /api/v1/sword/.&lt;br /&gt;
&lt;br /&gt;
Service document example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;service xmlns:dcterms=&amp;quot;http://purl.org/dc/terms/&amp;quot;&lt;br /&gt;
  xmlns:sword=&amp;quot;http://purl.org/net/sword/terms/&amp;quot;&lt;br /&gt;
  xmlns:atom=&amp;quot;http://www.w3.org/2005/Atom&amp;quot;&lt;br /&gt;
  xmlns=&amp;quot;http://www.w3.org/2007/app&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;sword:version&amp;gt;2.0&amp;lt;/sword:version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;workspace&amp;gt;&lt;br /&gt;
    &amp;lt;atom:title&amp;gt;Archivematica storage service&amp;lt;/atom:title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;collection href=&amp;quot;http://192.168.1.231:8000/api/v1/space/8f24ef5f-19d5-4b77-8a38-b30d034b11e7/sword/collection/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;atom:title&amp;gt;Collection&amp;lt;/atom:title&amp;gt;&lt;br /&gt;
      &amp;lt;accept&amp;gt;*/*&amp;lt;/accept&amp;gt;&lt;br /&gt;
      &amp;lt;accept alternate=&amp;quot;multipart-related&amp;quot;&amp;gt;*/*&amp;lt;/accept&amp;gt;&lt;br /&gt;
      &amp;lt;sword:mediation&amp;gt;false&amp;lt;/sword:mediation&amp;gt;&lt;br /&gt;
    &amp;lt;/collection&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/workspace&amp;gt;&lt;br /&gt;
&amp;lt;/service&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== List existing transfers ===&lt;br /&gt;
* HTTP Get to the Collection IRI  (defined by default as: /api/v1/space/[space UUID]/sword/collection/)&lt;br /&gt;
* Transfers are listed as an Atom feed&lt;br /&gt;
* Each Atom feed entry contains an &amp;quot;atom:link&amp;quot; element whose href attribute contains the URL needed to get details about the transfer&lt;br /&gt;
* optional filters via get parameters (not yet implemented)&lt;br /&gt;
&lt;br /&gt;
Example response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;atom:feed xmlns=&amp;quot;http://www.w3.org/2005/Atom&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;atom:id&amp;gt;http://192.168.1.231:8000/api/v1/space/8f24ef5f-19d5-4b77-8a38-b30d034b11e7/sword/collection/&amp;lt;/atom:id&amp;gt;&lt;br /&gt;
  &amp;lt;atom:title type=&amp;quot;text&amp;quot;&amp;gt;Deposits&amp;lt;/atom:title&amp;gt;&lt;br /&gt;
  &amp;lt;atom:link href=&amp;quot;http://192.168.1.231:8000/api/v1/space/8f24ef5f-19d5-4b77-8a38-b30d034b11e7/sword/collection/&amp;quot; rel=&amp;quot;self&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/atom:link&amp;gt;&lt;br /&gt;
    &amp;lt;atom:entry&amp;gt;&lt;br /&gt;
    &amp;lt;atom:id&amp;gt;http://192.168.1.231:8000/api/v1/location/88e70cd2-9258-4a84-8938-16e74be032e6/sword/&amp;lt;/atom:id&amp;gt;&lt;br /&gt;
    &amp;lt;atom:title type=&amp;quot;text&amp;quot;&amp;gt;Cinderella&amp;lt;/atom:title&amp;gt;&lt;br /&gt;
    &amp;lt;atom:link href=&amp;quot;http://192.168.1.231:8000/api/v1/location/88e70cd2-9258-4a84-8938-16e74be032e6/sword/&amp;quot; rel=&amp;quot;self&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/atom:link&amp;gt;&lt;br /&gt;
  &amp;lt;/atom:entry&amp;gt;&lt;br /&gt;
&amp;lt;/atom:feed&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create a new transfer ===&lt;br /&gt;
* used to start a new transfer in Archivematica&lt;br /&gt;
* HTTP POST of an Atom Entry Document to the Collection IRI (defined by default as: /api/v1/space/[space UUID]/sword/collection/)&lt;br /&gt;
&lt;br /&gt;
'''Possible HTTP Response Codes'''&lt;br /&gt;
* HTTP 200 OK - transfer already exists (not yet implemented)&lt;br /&gt;
* HTTP 201 Created - transfer has been accepted&lt;br /&gt;
* HTTP 412 Precondition Failed - required metadata missing or invalid&lt;br /&gt;
&lt;br /&gt;
Valid requests will receive a Sword Deposit Receipt in the body of the response.&lt;br /&gt;
&lt;br /&gt;
'''Required HTTP Headers'''&lt;br /&gt;
The HTTP POST must include certain specific http headers.  &lt;br /&gt;
&lt;br /&gt;
Required by http 1.1 specification:&lt;br /&gt;
* Host: Must be set to archivematica host name.&lt;br /&gt;
* Content-Length: Must be set to the length of the atom entry document.&lt;br /&gt;
* Content-Type: Must be set to &amp;quot;application/atom+xml;type=entry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Required by Archivematica.  &lt;br /&gt;
* Authorization:  Must include the api key and username assigned by Archivematica.&lt;br /&gt;
&lt;br /&gt;
Required by SWORD 2.0 protocol:&lt;br /&gt;
* In-Progress: Must be set to &amp;quot;true&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Optional in SWORD 2.0 protocol:&lt;br /&gt;
* On-Behalf-Of: not implemented by Archivematica&lt;br /&gt;
* Slug: not implemented by Archivematica&lt;br /&gt;
&lt;br /&gt;
'''Required in Body'''&lt;br /&gt;
The Body of the request must be a valid METS Document.  The required fields in an Atom Entry Document are:&lt;br /&gt;
* LABEL: used as the transfer name&lt;br /&gt;
* id: used as an accession id (not yet implemented)&lt;br /&gt;
* author: used as the source of acquisition (not yet implemented)&lt;br /&gt;
* summary: not implemented yet.  Could be used in the future as a description for the Transfer&lt;br /&gt;
* updated: should be set to the current timestamp.  &lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
Example HTTP POST request:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POST /api/v1/space/96606387-cc70-4b09-b422-a7220606488d/sword/collection/ HTTP/1.1&lt;br /&gt;
Host: localhost&lt;br /&gt;
Authorization: Archivematica-API api_key=&amp;quot;XXXXXXXXXXXXXXXXXXXX&amp;quot;, username=&amp;quot;timh&amp;quot;&lt;br /&gt;
Content-Length: 213&lt;br /&gt;
Content-Type: application/atom+xml;type=entry&lt;br /&gt;
In-Progress: true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;METS:mets EXT_VERSION=&amp;quot;1.1&amp;quot; OBJID=&amp;quot;islandora:72&amp;quot; LABEL=&amp;quot;Cinderella&amp;quot;&lt;br /&gt;
  xmlns:METS=&amp;quot;http://www.loc.gov/METS/&amp;quot;&lt;br /&gt;
  xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
  xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
  xsi:schemaLocation=&amp;quot;http://www.loc.gov/METS/ http://www.fedora.info/definitions/1/0/mets-fedora-ext1-1.xsd&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;METS:fileSec&amp;gt;&lt;br /&gt;
        &amp;lt;METS:fileGrp ID=&amp;quot;DATASTREAMS&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;METS:fileGrp ID=&amp;quot;OBJ&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;METS:file ID=&amp;quot;OBJ.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;METS:FLocat xlink:title=&amp;quot;Cinderella_(1865).pdf&amp;quot; LOCTYPE=&amp;quot;URL&amp;quot;&lt;br /&gt;
                      CHECKSUM=&amp;quot;fad0d2f982f317a15804d2e5c4b9efcc&amp;quot; CHECKSUMTYPE=&amp;quot;MD5&amp;quot; &lt;br /&gt;
                      xlink:href=&amp;quot;http://localhost:8080/fedora/get/islandora:72/OBJ/2013-08-12T14:46:43.454Z&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/METS:file&amp;gt;&lt;br /&gt;
            &amp;lt;/METS:fileGrp&amp;gt;&lt;br /&gt;
        &amp;lt;/METS:fileGrp&amp;gt;&lt;br /&gt;
    &amp;lt;/METS:fileSec&amp;gt;&lt;br /&gt;
&amp;lt;/METS:mets&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
201 Created&lt;br /&gt;
Location: http://localhost/api/v1/location/91d4f258-0050-4914-9d0c-6a74815358d2/sword/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;entry xmlns=&amp;quot;http://www.w3.org/2005/Atom&amp;quot;&lt;br /&gt;
        xmlns:sword=&amp;quot;http://purl.org/net/sword/&amp;quot;&lt;br /&gt;
        xmlns:dcterms=&amp;quot;http://purl.org/dc/terms/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;title&amp;gt;Cinderella&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;91d4f258-0050-4914-9d0c-6a74815358d2&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;updated&amp;gt;&amp;lt;/updated&amp;gt;&lt;br /&gt;
    &amp;lt;generator uri=&amp;quot;https://www.archivematica.org&amp;quot; version=&amp;quot;1.0&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;summary&amp;gt;A deposit was started.&amp;lt;/summary&amp;gt;&lt;br /&gt;
    &amp;lt;sword:treatment&amp;gt;A deposit directory was created and, optionally, asynchronous download of digital objects.&amp;lt;/sword:treatment&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;alternate&amp;quot; href=&amp;quot;http://www.swordserver.ac.uk/col1/mydeposit.html&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;edit-media&amp;quot; href=&amp;quot;http://localhost/api/v1/location/91d4f258-0050-4914-9d0c-6a74815358d2/sword/media/&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;edit&amp;quot; href=&amp;quot;http://localhost/api/v1/location/91d4f258-0050-4914-9d0c-6a74815358d2/sword/&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;http://purl.org/net/sword/terms/add&amp;quot; href=&amp;quot;http://192.168.1.76:8000/api/v1/location/91d4f258-0050-4914-9d0c-6a74815358d2/sword/&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;http://purl.org/net/sword/terms/statement&amp;quot; type=&amp;quot;application/atom+xml;type=feed&amp;quot;&lt;br /&gt;
      href=&amp;quot;http://localhost/api/v1/location/91d4f258-0050-4914-9d0c-6a74815358d2/sword/state/&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/entry&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add Files to a Transfer ===&lt;br /&gt;
&lt;br /&gt;
Post file data:&lt;br /&gt;
* It is possible to also POST the actual file to a deposit location's EM-IRI (/api/v1/location/[location UUID]/sword/media/)&lt;br /&gt;
* The file should be posted as the request body and the filename specified using the Content-Disposition header (as per RFC 6266): for example &amp;quot;Content-Disposition: Attachment; filename=dog.jpg&amp;quot;&lt;br /&gt;
* An MD5 checksum for an uploaded file can be provided via the Content-MD5 header (as per RFC 1544): for example &amp;quot;Content-MD5:  Q2hlY2sgSW50ZWdyaXR5IQ==&amp;quot;&lt;br /&gt;
* If only an Atom Entry Document is POST'ed, Archivematica will look for uri's in the file StructMap section of the METS file, and attempt to GET each file listed, to include in the Transfer. (not yet implemented)&lt;br /&gt;
&lt;br /&gt;
=== Finalize a Transfer ===&lt;br /&gt;
* POST with no body to the SE-IRI&lt;br /&gt;
* set In-Progress HTTP header to : false&lt;br /&gt;
* This will tell Archivematica that no further content will be added or removed from the Transfer.  &lt;br /&gt;
* Archivematica will finish fetching any files that were added previously, and once they have all been downloaded, the Transfer will start through the Archivematica pipeline.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POST http://localhost/api/v1/location/55ce8053-113a-4954-8aa3-fc9771da0bda/sword/ HTTP/1.1&lt;br /&gt;
Host: localhost&lt;br /&gt;
Authorization: Archivematica-API api_key=&amp;quot;XXXXXXXXXXXXXXXXXXXX&amp;quot;, username=&amp;quot;timh&amp;quot;&lt;br /&gt;
Content-Length: 0&lt;br /&gt;
Content-Type: application/atom+xml;type=entry&lt;br /&gt;
In-Progress: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The response will be HTTP 200/OK or 400/Error (400 if the Transfer was already finalized). If the transfer doesn't exist the response will be HTTP 404.&lt;br /&gt;
&lt;br /&gt;
=== Get Status of Transfer ===&lt;br /&gt;
To check Status:&lt;br /&gt;
&lt;br /&gt;
GET the State-IRI&lt;br /&gt;
in this example:&lt;br /&gt;
&lt;br /&gt;
GET http://localhost/api/v1/location/09224ddb-4c7d-404c-9218-2f2e1b5a599e/sword/state/ HTTP/1.1&lt;br /&gt;
&lt;br /&gt;
response will include:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;atom:feed xmlns:sword=&amp;quot;http://purl.org/net/sword/terms/&amp;quot; &lt;br /&gt;
            xmlns:atom=&amp;quot;http://www.w3.org/2005/Atom&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;atom:category scheme=&amp;quot;http://purl.org/net/sword/terms/state&amp;quot;&lt;br /&gt;
        term=&amp;quot;failed&amp;quot;&lt;br /&gt;
        label=&amp;quot;State&amp;quot;&amp;gt;&lt;br /&gt;
            Deposit initiation: Failed&lt;br /&gt;
    &amp;lt;/atom:category&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/atom:feed&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
the list of possible descriptions is not finalized.&lt;br /&gt;
&lt;br /&gt;
The state term value will either be &amp;quot;processing&amp;quot; (asynchronous deposit still working), &amp;quot;complete&amp;quot; (ready to be finalized), or &amp;quot;failed&amp;quot; (asynchronous deposit encountered an error).&lt;br /&gt;
&lt;br /&gt;
== Additional Details == &lt;br /&gt;
&lt;br /&gt;
=== Transfer Details ===&lt;br /&gt;
* redirect to Edit-IRI&lt;br /&gt;
* used to get basic info about a Transfer with HTTP GET&lt;br /&gt;
* can update basic info using HTTP PUT (not yet implemented)&lt;br /&gt;
* can allow deletion with HTTP DELETE&lt;br /&gt;
* follows the form: /api/v1/location/[deposit location UUID]/sword/&lt;br /&gt;
* example: http://192.168.1.231:8000/api/v1/location/09224ddb-4c7d-404c-9218-2f2e1b5a599e/sword/&lt;br /&gt;
&lt;br /&gt;
=== EM-IRI ===&lt;br /&gt;
* Edit-Media IRI &lt;br /&gt;
* used to add new objects to an existing transfer&lt;br /&gt;
* follows the form: [archivematica hostname]/api/v2/transfer/[uuid of transfer]/media&lt;br /&gt;
* example: /api/v1/location/[deposit location UUID]/sword/media/&lt;br /&gt;
&lt;br /&gt;
An HTTP POST to the em-iri for a transfer should include a single file as the body. If the HTTP &amp;quot;Packaging&amp;quot; header is set to &amp;quot;METS&amp;quot; then METS XML can be sent as the body, specifying a list of digital object URLs to download in the background.&lt;br /&gt;
&lt;br /&gt;
An HTTP GET should return a list of files in the transfer&lt;br /&gt;
&lt;br /&gt;
An HTTP DELETE to the em-iri will remove all digital objects from the Transfer.  This is a valid operation only while the Transfer is being assembled.  Once the Transfer has been finalized, attempting to DELETE will return an error.&lt;br /&gt;
&lt;br /&gt;
=== Edit-IRI ===&lt;br /&gt;
The client can replace the metadata of a resource by performing an HTTP PUT of a new Atom Entry on the Edit-IRI. (not yet implemented)&lt;br /&gt;
&lt;br /&gt;
This would be used to update metadata about a transfer, such as the transfer name.&lt;br /&gt;
&lt;br /&gt;
* example: http://localhost/api/v2/transfer/1225c695-cfb8-4ebb-aaaa-80da344efa6a/edit&lt;br /&gt;
&lt;br /&gt;
=== SE-IRI ===&lt;br /&gt;
* example: http://localhost/api/v2/transfer/add/1225c695-cfb8-4ebb-aaaa-80da344efa6a (not yet implemented)&lt;br /&gt;
&lt;br /&gt;
=== State-IRI ===&lt;br /&gt;
* used to retrieve status of transfer&lt;br /&gt;
* implemented as Atom document&lt;br /&gt;
* example: /api/v1/location/[deposit location UUID]/sword/state/&lt;br /&gt;
* should be able to subscribe like RSS feed&lt;br /&gt;
&lt;br /&gt;
=== Service document ===&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Object-level_PREMIS_rights_import&amp;diff=11720</id>
		<title>Object-level PREMIS rights import</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Object-level_PREMIS_rights_import&amp;diff=11720"/>
		<updated>2017-03-23T19:41:19Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move to feature requirements category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[Requirements]] &amp;gt; Object-level PREMIS rights import&lt;br /&gt;
&lt;br /&gt;
Page text is a work in progress.&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature requirements]]&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
&lt;br /&gt;
The Rockefeller Archives Centre is a heavy user of the PREMIS rights functionality in Archivematica and therefore sponsored the development of this foundational feature. This feature will allow users to apply PREMIS rights to individual objects by including a CSV file with the transfer, rather than having all of the objects in the transfer inherit rights applied to the SIP via the Add Rights form in the metadata module.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* Allow a user to include object-level PREMIS rights with an Archivematica transfer via a CSV file.&lt;br /&gt;
* Enable those rights to be passed to the appropriate ArchivesSpace resources.&lt;br /&gt;
&lt;br /&gt;
This work mirrors the method of passing object-level descriptive metadata to a transfer by including a CSV file &lt;br /&gt;
&lt;br /&gt;
To further support RAC's Archivematica workflow, this feature also works with Archivematica's [https://www.archivematica.org/docs/archivematica-1.6/user-manual/access/access/#upload-as ArchivesSpace integration].&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
Once the feature is merged into a QA branch of the Archivematica project for public release, this content will be moved to the official [https://www.archivematica.org/en/docs/ Archivematica documentation].&lt;br /&gt;
&lt;br /&gt;
1. '''Create PREMIS rights CSV file (rights.csv)'''&lt;br /&gt;
&lt;br /&gt;
User creates a CSV file containing PREMIS rights information for the desired digital objects. The user will be able to enter multiple acts for the same rights basis. Rows for the same object with the same rights basis will be treated as separate acts for the basis and merged. For example, the first two rows below will be merged, while the third row will be separate.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|file&lt;br /&gt;
|basis&lt;br /&gt;
|status&lt;br /&gt;
|determination_date&lt;br /&gt;
|jurisdiction&lt;br /&gt;
|start_date&lt;br /&gt;
|end_date&lt;br /&gt;
|terms&lt;br /&gt;
|citation&lt;br /&gt;
|note&lt;br /&gt;
|grant_act&lt;br /&gt;
|grant_restriction&lt;br /&gt;
|grant_start_date&lt;br /&gt;
|grant_end_date&lt;br /&gt;
|grant_note&lt;br /&gt;
|doc_id_type&lt;br /&gt;
|doc_id_value&lt;br /&gt;
|doc_id_role&lt;br /&gt;
|-&lt;br /&gt;
|image1.tif&lt;br /&gt;
|copyright&lt;br /&gt;
|copyrighted&lt;br /&gt;
|2011-01-01&lt;br /&gt;
|ca&lt;br /&gt;
|2011-01-01&lt;br /&gt;
|2013-12-31&lt;br /&gt;
|Terms of copyright.&lt;br /&gt;
|Citation of copyright.&lt;br /&gt;
|Note about copyright.&lt;br /&gt;
|disseminate&lt;br /&gt;
|disallow&lt;br /&gt;
|2011-01-01&lt;br /&gt;
|2013-12-31&lt;br /&gt;
|Grant note&lt;br /&gt;
|Copyright documentation identifier type.&lt;br /&gt;
|Copyright documentation identifier value.&lt;br /&gt;
|Copyright documentation identifier role.&lt;br /&gt;
|-&lt;br /&gt;
|document.pdf&lt;br /&gt;
|license&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2000-09-09&lt;br /&gt;
|2010-09-08&lt;br /&gt;
|Terms of license.&lt;br /&gt;
|&lt;br /&gt;
|Note about license.&lt;br /&gt;
|migrate&lt;br /&gt;
|allow&lt;br /&gt;
|2000-09-08&lt;br /&gt;
|&lt;br /&gt;
|Grant note&lt;br /&gt;
|License documentation identifier type.&lt;br /&gt;
|License documentation identifier value.&lt;br /&gt;
|License documentation identifier role.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
2. '''Add rights.csv to transfer directory'''&lt;br /&gt;
&lt;br /&gt;
The rights.csv file should be placed inside your transfer's metadata folder. Note that the sample folder structure below may not exactly reflect your directory structure, depending on your transfer requirements.&lt;br /&gt;
&lt;br /&gt;
: /my-transfer&lt;br /&gt;
:: image1.tif&lt;br /&gt;
:: document.pdf&lt;br /&gt;
:: /metadata&lt;br /&gt;
::: rights.csv&lt;br /&gt;
::: archivesspaceids.csv (optional)&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Metrics_requirements&amp;diff=11719</id>
		<title>Metrics requirements</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Metrics_requirements&amp;diff=11719"/>
		<updated>2017-03-23T19:40:50Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move to feature requirements category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation]] &amp;gt; [[Requirements]] &amp;gt; Metrics requirements&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature requirements]]&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
* The Archivematica team is currently gathering metrics requirements to support digital repository management. The question we would like to answer is: what kinds of metrics would be useful to Archivematica users (e.g. performance/usage statistics, AIP/DIP monitoring, file format statistics, etc.). &lt;br /&gt;
&lt;br /&gt;
* Our goal is to get a sense of the foundational elements necessary to fulfill future reporting requirements that we will need to build into Archivematica ... eventually. We are of course limited by available funding and time. We will prioritize the metrics and do our best to get as much as we can into upcoming releases given available funding and time.&lt;br /&gt;
&lt;br /&gt;
* Related issues: [[https://projects.artefactual.com/issues/1537 #1537]]&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
The following are some use cases generated by the Archivematica team and contributed by Archivematica users.&lt;br /&gt;
&lt;br /&gt;
* Output reports on the following:&lt;br /&gt;
&lt;br /&gt;
# number of file format X ingested per month&lt;br /&gt;
# total disk size of ingests added per year&lt;br /&gt;
# number of failed normalizations per format x&lt;br /&gt;
# name of person who processed an AIP&lt;br /&gt;
# inventory of shares &amp;amp; mount points (e.g. SIP Source, /var/archivematica, AIP Destination, DIP destination) including disk space (total, available, used &amp;amp; quota) and availability&lt;br /&gt;
# total count of file formats&lt;br /&gt;
# total disk usage per file format&lt;br /&gt;
# growth: monthly report showing growth by file size, file format. Could also tap into descriptive metadata to show &amp;quot;collection growth&amp;quot;&lt;br /&gt;
# AIP Monitoring: Bit errors detected, bit errors corrected&lt;br /&gt;
# AIP average, median &amp;amp; max directory depth and directory breadth&lt;br /&gt;
# File size distribution, file size distribution per format&lt;br /&gt;
# Preservation and access normalization monitoring: Display not just file format but also version/specification&lt;br /&gt;
&lt;br /&gt;
== Mockups ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Data Model ==&lt;br /&gt;
&lt;br /&gt;
-Logged-in user (should be captured as PREMIS agent)&lt;br /&gt;
-UUID of the Archivematica instance (should be captured as PREMIS agent)&lt;br /&gt;
-Possibly also environment data: what machines did Archivematica live on, what versions of all the tools were installed (already in PREMIS events), what version of Archivematica was used (already in software agent).&lt;br /&gt;
&lt;br /&gt;
For AIPs:&lt;br /&gt;
* AIP name - In METS structMap: &amp;lt;div TYPE=&amp;quot;directory&amp;quot; LABEL=&amp;quot;[AIPname]-[UUID]&amp;quot;&amp;gt;&lt;br /&gt;
* AIP UUID - In METS structMap: &amp;lt;div TYPE=&amp;quot;directory&amp;quot; LABEL=&amp;quot;[AIPname]-[UUID]&amp;quot;&amp;gt;&lt;br /&gt;
* AIP storage location - Not in METS file&lt;br /&gt;
* Date placed in storage - Not in METS file&lt;br /&gt;
* Date updated (when we have AIP versioning) - will be in METS header &amp;lt;metsHdr CREATEDATE=&amp;quot;2013-05-09T15:00:00&amp;quot; LASTMODDATE=”2014-02-09T21:00:00&amp;gt;&lt;br /&gt;
* AIP size - Not in METS file&lt;br /&gt;
* Related DIP - Not in METS file&lt;br /&gt;
* DIP storage location - Not in METS file&lt;br /&gt;
* DIP size - Not in METS file&lt;br /&gt;
* Date DIP uploaded - Not in METS file&lt;br /&gt;
&lt;br /&gt;
For transfer backups:&lt;br /&gt;
* Transfer name &amp;lt;div TYPE=&amp;quot;directory&amp;quot; LABEL=&amp;quot;[Transfername]-[UUID]&amp;quot;&amp;gt;&lt;br /&gt;
* Transfer UUID &amp;lt;div TYPE=&amp;quot;directory&amp;quot; LABEL=&amp;quot;[Transfername]-[UUID]&amp;quot;&amp;gt;&lt;br /&gt;
* Transfer size - Not in METS file&lt;br /&gt;
* Transfer storage location - Not in METS file&lt;br /&gt;
* Date placed in storage - Not in METS file&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Metadata_import&amp;diff=11718</id>
		<title>Metadata import</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Metadata_import&amp;diff=11718"/>
		<updated>2017-03-23T19:38:31Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move to feature requirements category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[:Category:Development documentation|Development documentation]] &amp;gt; Metadata import&lt;br /&gt;
&lt;br /&gt;
This page documents the workflow and METS content for lower-level metadata import - i.e. metadata to be attached to subdirectories and files within a SIP.&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature requirements]]&lt;br /&gt;
&lt;br /&gt;
==Workflow==&lt;br /&gt;
&lt;br /&gt;
#For simple objects, the user places files in the objects directory, with or without intervening subdirectories. The imported metadata are attached to each object.&lt;br /&gt;
#For compound objects, the user creates one or more subdirectories in the objects directory, each containing the files that form a compound object. The imported metadata are attached to each subdirectory.&lt;br /&gt;
#*'''The subdirectory names must not contain spaces or other forbidden characters.'''&lt;br /&gt;
#The user adds a csv file to the metadata folder for the transfer entitled ''metadata.csv''&lt;br /&gt;
#*The first row of the csv file consists of field names.&lt;br /&gt;
#*Dublin Core field names must contain the &amp;quot;dc&amp;quot; element in the name, eg &amp;quot;dc.title&amp;quot;&lt;br /&gt;
#*Each subsequent row contains the complete set of field values for a single directory or file&lt;br /&gt;
#*For multi-value fields (such as dc.subject), the entire column is repeated and each column contains a single value&lt;br /&gt;
#*If the metadata are for simple objects, the csv file must contain a &amp;quot;filename&amp;quot; column listing the filepath and filename of each objects: eg &amp;quot;objects/BrocktonOval.jp2&amp;quot;&lt;br /&gt;
#*If the metadata are for compound objects, the csv file must contain a &amp;quot;parts&amp;quot; column listing the names of the directories containing the items that form the compound object: eg &amp;quot;objects/Jan021964&amp;quot;&lt;br /&gt;
#*Note that filenames can be duplicates of filenames in other subdirectories if desired. For example, the name &amp;quot;page01.jp2&amp;quot; can occur in multiple subdirectories.&lt;br /&gt;
#At the generate METS micro-service, Archivematica parses the metadata in ''metadata.csv'' to the METS file, as follows:&lt;br /&gt;
#*All Dublin Core elements are used to generate a dmdSec for each directory or file with MDTYPE=&amp;quot;DC&amp;quot;&lt;br /&gt;
#*All non-Dublin Core elements are used to generate a dmdSec for each directory or file with MDTYPE=&amp;quot;OTHER&amp;quot; OTHERMDTYPE=&amp;quot;CUSTOM&amp;quot;&lt;br /&gt;
#*The dmdSecs are linked to their directories or files in the structMap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Simple objects==&lt;br /&gt;
&lt;br /&gt;
This section provides csv file and METS file examples for simple objects - i.e. individual files that are not pages in a compound object such as a book or a newspaper issue.&lt;br /&gt;
&lt;br /&gt;
===CSV file===&lt;br /&gt;
&lt;br /&gt;
'''Sample headings and values'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!'''filename'''&lt;br /&gt;
!'''dc.title'''&lt;br /&gt;
!'''dcterms.issued'''&lt;br /&gt;
!'''dc.publisher'''&lt;br /&gt;
!'''dc.contributor'''&lt;br /&gt;
!'''dc.subject'''&lt;br /&gt;
!'''dc.subject'''&lt;br /&gt;
!'''dc.date'''&lt;br /&gt;
!'''dc.description'''&lt;br /&gt;
!'''notes'''&lt;br /&gt;
!'''dcterms.isPartOf'''&lt;br /&gt;
!'''repository'''&lt;br /&gt;
!'''dc.rights'''&lt;br /&gt;
!'''project_website'''&lt;br /&gt;
!'''dc.format'''&lt;br /&gt;
|-&lt;br /&gt;
|objects/BrocktonOval.jp2&lt;br /&gt;
|Stanley Park in December&lt;br /&gt;
|1996-01-17&lt;br /&gt;
|Riley Studios, Vancouver BC&lt;br /&gt;
|Don Langfield, photographer&lt;br /&gt;
|Vancouver (B.C.)--Parks&lt;br /&gt;
|Landscapes&lt;br /&gt;
|1992/12/04&lt;br /&gt;
|Image shows Brockton Oval after light snowfall&lt;br /&gt;
|Originally part of series entitled &amp;quot;Winter in Vancouver&amp;quot;&lt;br /&gt;
|Riley Studios collection&lt;br /&gt;
|New Caledonia Public Library&lt;br /&gt;
|Copyright held by Riley Studios&lt;br /&gt;
|http://www.ncpl/donlangfieldphotographs.ca&lt;br /&gt;
|image/jp2&lt;br /&gt;
|-&lt;br /&gt;
|objects/QE Park sunset.jp2&lt;br /&gt;
|Sunset in Queen Elizabeth Park&lt;br /&gt;
|&lt;br /&gt;
|Riley Studios, Vancouver BC&lt;br /&gt;
|Don Langfield, photographer&lt;br /&gt;
|Vancouver (B.C.)--Parks&lt;br /&gt;
|&lt;br /&gt;
|1994/07/13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Riley Studios collection&lt;br /&gt;
|New Caledonia Public Library&lt;br /&gt;
|Copyright held by Riley Studios&lt;br /&gt;
|http://www.ncpl/donlangfieldphotographs.ca&lt;br /&gt;
|image/jp2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===METS file===&lt;br /&gt;
&lt;br /&gt;
[[File:mets_1g.png|980px|thumb|center|]]&lt;br /&gt;
[[File:mets_2g.png|980px|thumb|center|]]&lt;br /&gt;
[[File:mets_3g.png|980px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
==Compound objects==&lt;br /&gt;
&lt;br /&gt;
This section provides csv file and METS file examples for compound objects - i.e. multi-page digital objects such as newspapers and books.&lt;br /&gt;
&lt;br /&gt;
===CSV file===&lt;br /&gt;
&lt;br /&gt;
'''Sample headings and values'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!'''parts'''&lt;br /&gt;
!'''dc.title'''&lt;br /&gt;
!'''alternative_title'''&lt;br /&gt;
!'''dc.publisher'''&lt;br /&gt;
!'''dates_of_publication'''&lt;br /&gt;
!'''dc.subject'''&lt;br /&gt;
!'''dc.date'''&lt;br /&gt;
!'''dc.description'''&lt;br /&gt;
!'''frequency'''&lt;br /&gt;
!'''dc.language'''&lt;br /&gt;
!'''forms_part_of'''&lt;br /&gt;
!'''repository'''&lt;br /&gt;
!'''project_website'''&lt;br /&gt;
!'''digital_file_format'''&lt;br /&gt;
|-&lt;br /&gt;
|objects/Jan021964&lt;br /&gt;
|Coast News, January 02, 1964&lt;br /&gt;
|Sunshine Coast News&lt;br /&gt;
|Fred Cruice&lt;br /&gt;
|1945-1995&lt;br /&gt;
|Gibsons (B.C.)--Newspapers&lt;br /&gt;
|1964/01/02&lt;br /&gt;
|Serving the Growing Sunshine Coast&lt;br /&gt;
|Weekly&lt;br /&gt;
|English&lt;br /&gt;
|British Columbia Historical Newspapers collection&lt;br /&gt;
|Sunshine Coast Museum and Archives&lt;br /&gt;
|http://historicalnewspapers.library.ubc.ca&lt;br /&gt;
|image/jp2&lt;br /&gt;
|-&lt;br /&gt;
|objects/Jan091964&lt;br /&gt;
|Coast News, January 09, 1964&lt;br /&gt;
|Sunshine Coast News&lt;br /&gt;
|Fred Cruice&lt;br /&gt;
|1945-1995&lt;br /&gt;
|Gibsons (B.C.)--Newspapers&lt;br /&gt;
|1964/01/09&lt;br /&gt;
|Serving the Growing Sunshine Coast&lt;br /&gt;
|Weekly&lt;br /&gt;
|English&lt;br /&gt;
|British Columbia Historical Newspapers collection&lt;br /&gt;
|Sunshine Coast Museum and Archives&lt;br /&gt;
|http://historicalnewspapers.library.ubc.ca&lt;br /&gt;
|image/jp2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===METS file===&lt;br /&gt;
&lt;br /&gt;
[[File:mets_4g.png|980px|thumb|center|]]&lt;br /&gt;
[[File:mets_5g.png|980px|thumb|center|]]&lt;br /&gt;
[[File:mets_6g.png|980px|thumb|center|]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Requirements/MediaConch_integration&amp;diff=11717</id>
		<title>Requirements/MediaConch integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Requirements/MediaConch_integration&amp;diff=11717"/>
		<updated>2017-03-23T19:37:46Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move to feature requirements category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Page for requirements gathering for integration of [https://mediaarea.net/MediaConch/ Media Conch] in Archivematica.&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature requirements]]&lt;br /&gt;
&lt;br /&gt;
=Use cases=&lt;br /&gt;
&lt;br /&gt;
==MKV conformance checking==&lt;br /&gt;
&lt;br /&gt;
===Pre-normalization===&lt;br /&gt;
&lt;br /&gt;
'''User Story:''' As a digital preservationist, I need to know whether or not mkv files which I am preserving are valid before I process them, because if they are invalid it might impact further preservation decisions.&lt;br /&gt;
&lt;br /&gt;
'''Specification'''&lt;br /&gt;
&lt;br /&gt;
''Feature:'' Pre-ingest conformance check &lt;br /&gt;
&lt;br /&gt;
Archivists need to know whether or not mkv files which they are preserving are valid before they process them, because if they are invalid it might impact further preservation decisions.&lt;br /&gt;
&lt;br /&gt;
''Background:''  the file has been identified as an .mkv&lt;br /&gt;
&lt;br /&gt;
''Scenario outline:'' Jamie wants to confirm that their file is a valid .mkv &amp;lt;/p&amp;gt;&lt;br /&gt;
''When:'' file validation is run &amp;lt;/p&amp;gt;&lt;br /&gt;
''And:'' the file is &amp;lt;file_validity&amp;gt; .mkv &amp;lt;/p&amp;gt;&lt;br /&gt;
''Then:'' validation micro-service output is &amp;lt;microservice_output&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
''And:'' &amp;lt;am_action&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
''And:'' a PREMIS validation event is generated with eventOutcome = &amp;lt;eventOutcome&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Examples:''&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|''file_validity''&lt;br /&gt;
|''microservice_output''&lt;br /&gt;
|''am_action''&lt;br /&gt;
|''eventOutcome''&lt;br /&gt;
|-&lt;br /&gt;
|valid&lt;br /&gt;
|&amp;quot;Completed successfully&amp;quot;&lt;br /&gt;
|Archivematica continues processing&lt;br /&gt;
|pass&lt;br /&gt;
|-&lt;br /&gt;
|not valid&lt;br /&gt;
|&amp;quot;Failed&amp;quot;&lt;br /&gt;
|Archivematica continues processing&lt;br /&gt;
|fail&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Process:''' &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. In the Archivematica FPR, a new command will be written under Validation to run Mediaconch.&lt;br /&gt;
Possible command: &amp;lt;pre&amp;gt; mediaconch -mc -iv 4 -fx nameOfFile.mkv &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where iv defines the verbosity of the output and -fx prints the output in xml. Note that presently MediaConch has the same verbosity for anything under 5. More granularity of verbosity will be available later in the development project.&lt;br /&gt;
&lt;br /&gt;
Outcome of above:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;MediaConch xmlns=&amp;quot;https://mediaarea.net/mediaconch&amp;quot; version=&amp;quot;0.1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;media ref=&amp;quot;testFiles/MakeUp-029f3287-4f5d-4399-8330-8b31f2b749c8.mkv&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;implementationChecks&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;MediaConch EBML Implementation Checker&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;/implementationChecks&amp;gt;&lt;br /&gt;
    &amp;lt;implementationChecks&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;MediaConch FFV1 Implementation Checker&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;check icid=&amp;quot;FFV1-VALID-VERSION-VALUE&amp;quot; version=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;context field=&amp;quot;Valid Values&amp;quot; value=&amp;quot;1 3&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;test outcome=&amp;quot;pass&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value offset=&amp;quot;@offset&amp;quot; name=&amp;quot;FFV1 version&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/test&amp;gt;&lt;br /&gt;
      &amp;lt;/check&amp;gt;&lt;br /&gt;
      &amp;lt;check icid=&amp;quot;FFV1-VALID-CODERTYPE-VALUE&amp;quot; version=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;context field=&amp;quot;Valid Values&amp;quot; value=&amp;quot;0 1 2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;test outcome=&amp;quot;pass&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value offset=&amp;quot;@offset&amp;quot; name=&amp;quot;FFV1 coder type&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/test&amp;gt;&lt;br /&gt;
      &amp;lt;/check&amp;gt;&lt;br /&gt;
      &amp;lt;check icid=&amp;quot;FFV1-VALID-COLORSPACETYPE-VALUE&amp;quot; version=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;context field=&amp;quot;Valid Values&amp;quot; value=&amp;quot;0 1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;test outcome=&amp;quot;pass&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value offset=&amp;quot;@offset&amp;quot; name=&amp;quot;FFV1 colorspace type&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/test&amp;gt;&lt;br /&gt;
      &amp;lt;/check&amp;gt;&lt;br /&gt;
    &amp;lt;/implementationChecks&amp;gt;&lt;br /&gt;
  &amp;lt;/media&amp;gt;&lt;br /&gt;
&amp;lt;/MediaConch&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. In the Archivematica FPR, a new validation rule is written to use the above command to validate any original file in mkv format.&lt;br /&gt;
&lt;br /&gt;
3. The command runs in the Validation micro-service. If the outcome of any of the checks is fail, the job fails and indicates failure by colour. In the case of either success or failure, the process should proceed to the next micro-service (Examine contents). The user has the opportunity to reject the Transfer in the Create SIP from Transfer micro-service, a decision they can make based on the outcome of Validation.&lt;br /&gt;
&lt;br /&gt;
4. Archivematica writes a PREMIS event for validation to the AIP METS file.&lt;br /&gt;
&lt;br /&gt;
'''Diagram'''&lt;br /&gt;
&lt;br /&gt;
[[File:Pre_norm_checker.png]]&lt;br /&gt;
&lt;br /&gt;
'''Mockups'''&lt;br /&gt;
&lt;br /&gt;
PREMIS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;mets:digiprovMD ID=&amp;quot;digiprovMD_15&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mets:mdWrap MDTYPE=&amp;quot;PREMIS:EVENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;mets:xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;premis:event xmlns:premis=&amp;quot;info:lc/xmlns/premis-v2&amp;quot; xsi:schemaLocation=&amp;quot;info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd&amp;quot; version=&amp;quot;2.2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;premis:eventIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;premis:eventIdentifierType&amp;gt;UUID&amp;lt;/premis:eventIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;premis:eventIdentifierValue&amp;gt;ceb56635-f114-46d7-af3d-5766c8f6c75f&amp;lt;/premis:eventIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/premis:eventIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;premis:eventType&amp;gt;validation&amp;lt;/premis:eventType&amp;gt;&lt;br /&gt;
            &amp;lt;premis:eventDateTime&amp;gt;2016-05-25T20:55:38&amp;lt;/premis:eventDateTime&amp;gt;&lt;br /&gt;
            &amp;lt;premis:eventDetail&amp;gt;program=&amp;quot;MediaConch&amp;quot;; version=&amp;quot;16.03&amp;quot;&amp;lt;/premis:eventDetail&amp;gt;&lt;br /&gt;
               &amp;lt;premis:eventOutcomeInformation&amp;gt;&lt;br /&gt;
              &amp;lt;premis:eventOutcome&amp;gt;pass&amp;lt;/premis:eventOutcome&amp;gt;&lt;br /&gt;
              &amp;lt;premis:eventOutcomeDetail&amp;gt;&lt;br /&gt;
                &amp;lt;premis:eventOutcomeDetailNote&amp;gt;version=&amp;quot;1&amp;quot; outcome=&amp;quot;pass&amp;quot;; coder type=&amp;quot;1&amp;quot; outcome=&amp;quot;pass&amp;quot;; colorspace=&amp;quot;1&amp;quot; outcome=&amp;quot;pass&amp;quot;&amp;lt;/premis:eventOutcomeDetailNote&amp;gt;&lt;br /&gt;
              &amp;lt;/premis:eventOutcomeDetail&amp;gt;&lt;br /&gt;
            &amp;lt;/premis:eventOutcomeInformation&amp;gt;&lt;br /&gt;
            &amp;lt;premis:linkingAgentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;premis:linkingAgentIdentifierType&amp;gt;Archivematica user pk&amp;lt;/premis:linkingAgentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;premis:linkingAgentIdentifierValue&amp;gt;1&amp;lt;/premis:linkingAgentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/premis:linkingAgentIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;premis:linkingAgentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;premis:linkingAgentIdentifierType&amp;gt;preservation system&amp;lt;/premis:linkingAgentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;premis:linkingAgentIdentifierValue&amp;gt;Archivematica-1.4.1&amp;lt;/premis:linkingAgentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/premis:linkingAgentIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;premis:linkingAgentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;premis:linkingAgentIdentifierType&amp;gt;repository code&amp;lt;/premis:linkingAgentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;premis:linkingAgentIdentifierValue&amp;gt;ORG&amp;lt;/premis:linkingAgentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/premis:linkingAgentIdentifier&amp;gt;&lt;br /&gt;
          &amp;lt;/premis:event&amp;gt;&lt;br /&gt;
        &amp;lt;/mets:xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mets:mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/mets:digiprovMD&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Post-normalization===&lt;br /&gt;
&lt;br /&gt;
'''User Story:''' As a digital preservationist, I need to verify that the preservation copies that Archivematica has created through normalization are in conformance with the FFV1 specification so that I know I am placing preservation copies in storage which are reliable.&lt;br /&gt;
&lt;br /&gt;
'''Specification'''&lt;br /&gt;
&lt;br /&gt;
''Feature:''Post-normalization conformance check&lt;br /&gt;
&lt;br /&gt;
Archivists need to verify that the preservation and access copies that Archivematica has created through normalization are in conformance with the .mkv specification so that they know they are placing derivatives in storage/repositories which are reliable.&lt;br /&gt;
&lt;br /&gt;
''Background:''  file has been normalized to .mkv&lt;br /&gt;
&lt;br /&gt;
''Scenario outline:'' Jamie wants to confirm that normalization to .mkv is successful &amp;lt;/p&amp;gt;&lt;br /&gt;
''When:'' file validation is run &amp;lt;/p&amp;gt;&lt;br /&gt;
''And:'' the file is &amp;lt;file_validity&amp;gt; .mkv &amp;lt;/p&amp;gt;&lt;br /&gt;
''Then:'' validation microservice output is &amp;lt;microservice_output&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
''And:'' Archivematica outputs a &amp;lt;validation_result&amp;gt; validation in the normalization report &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Examples:''&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|''file_validity''&lt;br /&gt;
|''microservice_output''&lt;br /&gt;
|''validation_result''&lt;br /&gt;
|-&lt;br /&gt;
|valid&lt;br /&gt;
|&amp;quot;Completed successfully&amp;quot;&lt;br /&gt;
|successful&lt;br /&gt;
|-&lt;br /&gt;
|not valid&lt;br /&gt;
|&amp;quot;Failed&amp;quot;&lt;br /&gt;
|failed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Scenario outline:'' Jamie wants to approve normalization of a .mkv for preservation &amp;lt;/p&amp;gt;&lt;br /&gt;
''Given:'' normalized file is &amp;lt;file_validity&amp;gt; .mkv &amp;lt;/p&amp;gt;&lt;br /&gt;
''When:'' Jamie approved normalization &amp;lt;/p&amp;gt;&lt;br /&gt;
''Then:'' A PREMIS validation event is generated with eventOutcome = &amp;lt;eventOutcome&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
''And:'' Archivematica continues processing &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Examples:''&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|''file_validity''&lt;br /&gt;
|''eventOutcome''&lt;br /&gt;
|-&lt;br /&gt;
|valid&lt;br /&gt;
|pass&lt;br /&gt;
|-&lt;br /&gt;
|not valid&lt;br /&gt;
|fail&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Process:''' &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. In the Archivematica FPR, a new command will be written under Verfication to run MediaConch.&lt;br /&gt;
Possible command: &amp;lt;pre&amp;gt; mediaconch -mc -iv 4 -fx nameOfFile.mkv &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where iv defines the verbosity of the output and -fx prints the output in xml. Note that presently MediaConch has the same verbosity for anything under 5. More granularity of verbosity will be available later in the development project.&lt;br /&gt;
&lt;br /&gt;
Outcome of above:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;MediaConch xmlns=&amp;quot;https://mediaarea.net/mediaconch&amp;quot; version=&amp;quot;0.1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;media ref=&amp;quot;testFiles/MakeUp-029f3287-4f5d-4399-8330-8b31f2b749c8.mkv&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;implementationChecks&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;MediaConch EBML Implementation Checker&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;/implementationChecks&amp;gt;&lt;br /&gt;
    &amp;lt;implementationChecks&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;MediaConch FFV1 Implementation Checker&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;check icid=&amp;quot;FFV1-VALID-VERSION-VALUE&amp;quot; version=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;context field=&amp;quot;Valid Values&amp;quot; value=&amp;quot;1 3&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;test outcome=&amp;quot;pass&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value offset=&amp;quot;@offset&amp;quot; name=&amp;quot;FFV1 version&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/test&amp;gt;&lt;br /&gt;
      &amp;lt;/check&amp;gt;&lt;br /&gt;
      &amp;lt;check icid=&amp;quot;FFV1-VALID-CODERTYPE-VALUE&amp;quot; version=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;context field=&amp;quot;Valid Values&amp;quot; value=&amp;quot;0 1 2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;test outcome=&amp;quot;pass&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value offset=&amp;quot;@offset&amp;quot; name=&amp;quot;FFV1 coder type&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/test&amp;gt;&lt;br /&gt;
      &amp;lt;/check&amp;gt;&lt;br /&gt;
      &amp;lt;check icid=&amp;quot;FFV1-VALID-COLORSPACETYPE-VALUE&amp;quot; version=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;context field=&amp;quot;Valid Values&amp;quot; value=&amp;quot;0 1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;test outcome=&amp;quot;pass&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value offset=&amp;quot;@offset&amp;quot; name=&amp;quot;FFV1 colorspace type&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/test&amp;gt;&lt;br /&gt;
      &amp;lt;/check&amp;gt;&lt;br /&gt;
    &amp;lt;/implementationChecks&amp;gt;&lt;br /&gt;
  &amp;lt;/media&amp;gt;&lt;br /&gt;
&amp;lt;/MediaConch&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. In the Archivematica FPR, a rule is written for validation to run the above command when an mkv file has been created for preservation or access.&lt;br /&gt;
&lt;br /&gt;
3. A new job in the Normalization micro-service runs the command (must be before Job: Move to approve normalization directory). If the outcome of any of the checks is fail, the job fails and indicates failure by colour. The normalization micro-service should proceed to the Approval step. Failures could also be indicated in the Approve normalization report.&lt;br /&gt;
&lt;br /&gt;
4. Archivematica writes a PREMIS event in the METS to record the outcomes of validation.&lt;br /&gt;
&lt;br /&gt;
'''Diagram'''&lt;br /&gt;
&lt;br /&gt;
[[File:Post_norm_checker.png]]&lt;br /&gt;
&lt;br /&gt;
'''Mockups'''&lt;br /&gt;
&lt;br /&gt;
Normalization report:&lt;br /&gt;
&lt;br /&gt;
[[File:conformance_norm_report.png|900 px]]&lt;br /&gt;
&lt;br /&gt;
Columns for checking validity of both preservation and access derivatives have been added to the current Archivematica normalization report.&lt;br /&gt;
&lt;br /&gt;
PREMIS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;mets:digiprovMD ID=&amp;quot;digiprovMD_428512&amp;quot; CREATED=&amp;quot;2016-04-05T18:55:56&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mets:mdWrap MDTYPE=&amp;quot;PREMIS:EVENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;mets:xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;premis:event xmlns:premis=&amp;quot;info:lc/xmlns/premis-v2&amp;quot; xsi:schemaLocation=&amp;quot;info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd&amp;quot; version=&amp;quot;2.2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;premis:eventIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;premis:eventIdentifierType&amp;gt;UUID&amp;lt;/premis:eventIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;premis:eventIdentifierValue&amp;gt;e2a85831-8dcd-43be-ba3d-9b7cae0f42b5&amp;lt;/premis:eventIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/premis:eventIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;premis:eventType&amp;gt;verification&amp;lt;/premis:eventType&amp;gt;&lt;br /&gt;
            &amp;lt;premis:eventDateTime&amp;gt;2016-05-19T18:03:03&amp;lt;/premis:eventDateTime&amp;gt;&lt;br /&gt;
            &amp;lt;premis:eventDetail&amp;gt;program=&amp;quot;MediaConch&amp;quot;; version=&amp;quot;16.03&amp;quot;&amp;lt;/premis:eventDetail&amp;gt;&lt;br /&gt;
            &amp;lt;premis:eventOutcomeInformation&amp;gt;&lt;br /&gt;
              &amp;lt;premis:eventOutcome&amp;gt;pass&amp;lt;/premis:eventOutcome&amp;gt;&lt;br /&gt;
              &amp;lt;premis:eventOutcomeDetail&amp;gt;&lt;br /&gt;
                &amp;lt;premis:eventOutcomeDetailNote&amp;gt;version=&amp;quot;1&amp;quot; outcome=&amp;quot;pass&amp;quot;; coder type=&amp;quot;1&amp;quot; outcome=&amp;quot;pass&amp;quot;; colorspace=&amp;quot;1&amp;quot; outcome=&amp;quot;pass&amp;quot;&amp;lt;/premis:eventOutcomeDetailNote&amp;gt;&lt;br /&gt;
              &amp;lt;/premis:eventOutcomeDetail&amp;gt;&lt;br /&gt;
            &amp;lt;/premis:eventOutcomeInformation&amp;gt;&lt;br /&gt;
            &amp;lt;premis:linkingAgentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;premis:linkingAgentIdentifierType&amp;gt;Archivematica user pk&amp;lt;/premis:linkingAgentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;premis:linkingAgentIdentifierValue&amp;gt;1&amp;lt;/premis:linkingAgentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/premis:linkingAgentIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;premis:linkingAgentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;premis:linkingAgentIdentifierType&amp;gt;preservation system&amp;lt;/premis:linkingAgentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;premis:linkingAgentIdentifierValue&amp;gt;Archivematica-1.7&amp;lt;/premis:linkingAgentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/premis:linkingAgentIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;premis:linkingAgentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;premis:linkingAgentIdentifierType&amp;gt;repository code&amp;lt;/premis:linkingAgentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;premis:linkingAgentIdentifierValue&amp;gt;Example Repository&amp;lt;/premis:linkingAgentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/premis:linkingAgentIdentifier&amp;gt;&lt;br /&gt;
          &amp;lt;/premis:event&amp;gt;&lt;br /&gt;
        &amp;lt;/mets:xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mets:mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/mets:digiprovMD&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Policy checking==&lt;br /&gt;
&lt;br /&gt;
'''User stories'''&lt;br /&gt;
&lt;br /&gt;
* As a digital preservationist, I want to check vendor-digitized videos against a policy to ensure that the agreed-upon specifications were followed during digitization.&lt;br /&gt;
* As a digital preservationist, I want to ensure that Archivematica is normalizing for access according to my policy so that the access files are optimized for my institution's access system.&lt;br /&gt;
* As a digital preservationist, I want to ensure that Archivematica is normalizing for preservation according to my policy so that preservation files meet my institution's specifications.&lt;br /&gt;
&lt;br /&gt;
'''Specification'''&lt;br /&gt;
&lt;br /&gt;
''Feature:'' Ingest policy check &amp;lt;/p&amp;gt;&lt;br /&gt;
Archivists want to check that the files that are defined for access or preservation conform to a pre-defined policy/policies. The access and preservation derivatives may have been created by Archivematica through normalization or may have been predefined by the user prior to transfer.&lt;br /&gt;
&lt;br /&gt;
''Scenario Outline:'' Jamie has preservation derivatives and they need to know whether they conform to their preservation policy&amp;lt;/p&amp;gt;&lt;br /&gt;
''Given:'' a policy has been provided for preservation&amp;lt;/p&amp;gt;&lt;br /&gt;
''And:'' &amp;lt;does_file_conform&amp;gt; to the policy&amp;lt;/p&amp;gt;&lt;br /&gt;
''When:'' file verification is run&amp;lt;/p&amp;gt;&lt;br /&gt;
''Then:'' verification microservice output is &amp;lt;microservice_output&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
''And:'' a PREMIS verification event is generated with eventOutcome = &amp;lt;eventOutcome&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
''And:'' Archivematica outputs a &amp;lt;verification_result&amp;gt; verification in the normalization report&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Examples:''&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|''does_file_conform''&lt;br /&gt;
|''microservice_output''&lt;br /&gt;
|''eventOutcome''&lt;br /&gt;
|''validation_result''&lt;br /&gt;
|-&lt;br /&gt;
|conforms&lt;br /&gt;
|pass&lt;br /&gt;
|pass&lt;br /&gt;
|successful&lt;br /&gt;
|-&lt;br /&gt;
|does not conform&lt;br /&gt;
|fail&lt;br /&gt;
|fail&lt;br /&gt;
|failed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Manual_normalization_requirements_and_testing_procedures&amp;diff=11716</id>
		<title>Manual normalization requirements and testing procedures</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Manual_normalization_requirements_and_testing_procedures&amp;diff=11716"/>
		<updated>2017-03-23T19:37:17Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move to feature requirements category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[:Category:Development documentation|Development documentation]] &amp;gt; Manual normalization requirements and testing procedures&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature requirements]]&lt;br /&gt;
&lt;br /&gt;
The following procedures describe functionality available in the 0.10-beta release of Archivematica.&lt;br /&gt;
&lt;br /&gt;
===Procedures for manual normalization===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two manual normalization workflow options. First, the user can do some normalization before bringing any objects into Archivematica. Second, the user can process objects through to Ingest and then choose to do manual normalization on some of the objects. Below are the workflow steps to test each of these options.&lt;br /&gt;
&lt;br /&gt;
These requirements and workflows were developed as a result of the following related issues: [https://projects.artefactual.com/issues/4656 #4656], [https://projects.artefactual.com/issues/4511 #4511]. [https://projects.artefactual.com/issues/4510 #4510]&lt;br /&gt;
&lt;br /&gt;
==Option 1: Manual normalization prior to transfer into Archivematica==&lt;br /&gt;
&lt;br /&gt;
The manual normalization feature allows the user to prepare transfers that already contain manually normalized files. The user adds a /manualNormalization folder and its subdirectories to the transfer prior to processing. Archivematica recognizes that this folder already exists and will not add one during processing. This workflow requires that there must be a one-to-one relationship between the transfer and the SIP.&lt;br /&gt;
&lt;br /&gt;
To test&lt;br /&gt;
&lt;br /&gt;
1. Clone the newest sampledata to your local dev environment&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You should find the sample to test in the following location:&lt;br /&gt;
/archivematica-sampledata-2013-xx-xx-xx-xx/TestTransfers/manNormAtBeginning &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Should you wish to create your own tests, you must create transfers with a structure that mimics the one in this sample. That is:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/topDirectory&lt;br /&gt;
&lt;br /&gt;
:	/manualNormalization&lt;br /&gt;
&lt;br /&gt;
::		/access&lt;br /&gt;
&lt;br /&gt;
:::		        /example.bmp&lt;br /&gt;
&lt;br /&gt;
::		/preservation&lt;br /&gt;
&lt;br /&gt;
:::			/example.prk&lt;br /&gt;
::	/file.tif&lt;br /&gt;
::	/file2.doc&lt;br /&gt;
::	/file3.docx&lt;br /&gt;
&lt;br /&gt;
'''Where''' &lt;br /&gt;
*the /topDirectory is named whatever you want (you can still change this when you upload the transfer to the dashboard)&lt;br /&gt;
*/manualNormalization contains two directories, /access and /preservation which include in them the files you've already normalized for access and/or preservation prior to transfer&lt;br /&gt;
*other objects in the /topDirectory are to be treated as regular transfers&lt;br /&gt;
&lt;br /&gt;
2. Upload the transfer to the dashboard from your source directories in the Transfer Tab.&lt;br /&gt;
&lt;br /&gt;
For instructions detailing how to set up source directories, see the Administrator's manual here: [[Administrator_manual_0.9#Transfer_source_directories]]&lt;br /&gt;
&lt;br /&gt;
3. Continue processing as you would a regular SIP. For instructions, see the online User manual here: [[User_manual_0.9]] through to the Ingest tab.&lt;br /&gt;
&lt;br /&gt;
4. In the Ingest tab, at normalization step, choose whether to normalize for access, preservation, or both. If you choose to review normalization results prior to accepting, you will find your /manualNormalization folder and its contents in the objects directory of your transfer, with it's /access and/or /preservation folders and their content intact. If you're happy with the results here, approve normalization.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Continue processing according to instructions in the User manual. Stop when you reach the Store AIP micro-service.&lt;br /&gt;
&lt;br /&gt;
5. At Store AIP, you have the option to review your AIP. If you download the AIP from the review tab by simply clicking on the file with the 7z extension, you can download, unzip and view your AIP in your file browser.  Your AIP will consist of a top level folder with the name you assigned plus a UUID. In that folder, you'll find a /data folder which contains your objects for preservation, logs, thumbnails and the METS xml. That data folder will contain your originals and normalized files, and the METS will include PREMIS events with &amp;quot;manual normalization&amp;quot; noted in the eventDetail of the appropriate normalization events. A discussion of the overall AIP structure can be found here: [[AIP_structure]] (Note that this was the 0.9-beta description and will change a bit for the next release: see related task at [https://projects.artefactual.com/issues/4597 #4597])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, you might note that the manualNormalization folder and subfolders used during the manual normalization workflow have been deleted once normalization was approved rather than being packaged into the AIP. &lt;br /&gt;
&lt;br /&gt;
6. If you are satisfied with everything here, continue to store your AIP and/or upload your DIP as per the User manual instructions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*This process describes the basic test; however, we recommend putting the system through it's paces. Test with/without extra files in the transfer outside of the manualNormalization folder; test with only an access folder or preservation folder in the /manualNormalization folder; get creative!&lt;br /&gt;
&lt;br /&gt;
==Option 2: Manual normalization during Ingest==&lt;br /&gt;
&lt;br /&gt;
The manual normalization feature allows users to choose to do manual normalization at the normalization micro-service in the Ingest tab of the dashboard. The user does not have to manually normalize all of the objects for preservation and/or access; any files not manually normalized will be normalized according the regular Archivematica workflow.&lt;br /&gt;
&lt;br /&gt;
To test&lt;br /&gt;
&lt;br /&gt;
1. Start with any regular transfer in the Transfer tab of the dashboard. Follow the instructions in the user manual until you get to the normalization micro-service in the Ingest tab.&lt;br /&gt;
&lt;br /&gt;
2. Select &amp;quot;Normalize manually&amp;quot; from the dropdown menu.&lt;br /&gt;
&lt;br /&gt;
3. In your file browser, open /archivematica/src/MCPServer/sharedDirectoryStructure/watchedDirectories/approveNormalization/preservation/yourTransfer123abc/objects/&lt;br /&gt;
&lt;br /&gt;
4. Choose which files you'd like to normalize for preservation and/or access&lt;br /&gt;
&lt;br /&gt;
5. Do your normalization. Or, for testing purposees, you can simply copy and change the extension(s) of some of the objects in the transfer.&lt;br /&gt;
&lt;br /&gt;
Once you've done all the normalization for preservation and access, place your preservation copies in the /manualNormalization/preservation folder and your access copies in the /manualNormalization/access folder. Note that any objects you haven't normalized manually will not be normalized. However, if you do not include anything in the /access folder, no DIP will be generated.&lt;br /&gt;
&lt;br /&gt;
6. Return to the dashboard and approve normalization.&lt;br /&gt;
&lt;br /&gt;
7. Continue processing according to instructions in the User manual. Stop when you reach the Store AIP micro-service.&lt;br /&gt;
&lt;br /&gt;
8. At the Store AIP micro-service, you have the option to review your AIP. If you download the AIP from the review tab by simply clicking on the file with the 7z extension, you can download, unzip and view your AIP in your file browser.  Your AIP will consist of a top level folder with the name you assigned plus a UUID. In that folder, you'll find a /data folder which contains your objects for preservation, logs, thumbnails and the METS xml. That data folder will contain your originals and normalized files, and the METS will include PREMIS events with &amp;quot;manual normalization&amp;quot; noted in the eventDetail of the appropriate normalization events. A discussion of the overall AIP structure can be found here: https://www.archivematica.org/wiki/AIP_structure (Note that this was the 0.9-beta description and will change a bit for the next release: see related task at [https://projects.artefactual.com/issues/4597 #4597])&lt;br /&gt;
&lt;br /&gt;
Additionally, you might note that the manualNormalization folder and subfolders used during the manual normalization workflow have been deleted once normalization was approved rather than being packaged into the AIP. &lt;br /&gt;
&lt;br /&gt;
If you are satisfied with everything here, continue to store your AIP and/or upload your DIP as per the User manual instructions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*This process describes the basic test; however, we recommend putting the system through it's paces. Test with/without access files in the manualNormalization folder; test with no objects outside of the /manualNormalization folder; get creative!&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=LOCKSS_Integration&amp;diff=11715</id>
		<title>LOCKSS Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=LOCKSS_Integration&amp;diff=11715"/>
		<updated>2017-03-23T19:36:55Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move to feature requirements category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[:Category:Development documentation|Development documentation]] &amp;gt; LOCKSS Integration&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature requirements]]&lt;br /&gt;
&lt;br /&gt;
==Status==&lt;br /&gt;
&lt;br /&gt;
'''Sponsored''': SFU Library&amp;lt;br&amp;gt;&lt;br /&gt;
'''Development Status''': Complete&amp;lt;br&amp;gt;&lt;br /&gt;
'''Public Release''': September 2014&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
LOCKSS (Lots of Copies Keeps Stuff Safe) http://www.lockss.org/ is treated by Archivematica as a storage sub-system.  The Archivematica Storage Service can be configured to store AIPs in a LOCKSS network.  The procedure for storing AIPs follows the SWORD v2 protocol: http://swordapp.org/sword-v2/ .&lt;br /&gt;
&lt;br /&gt;
The Archivematica Storage Service contains an implementation of a SWORD client, which communicates with a SWORD server.  The implementation of the SWORD Server is provided by LOCKSS-O-Matic https://github.com/mjordan/lockss-o-matic.  LOCKSS-O-Matic is responsible for communicating with the Private LOCKSS Network (PLN)&lt;br /&gt;
&lt;br /&gt;
===Basic Workflow===&lt;br /&gt;
&lt;br /&gt;
* Digital Objects are processed and packaged into AIPs in an Archivematica pipeline&lt;br /&gt;
* Archivematica pipeline sends the final AIP to the Storage Service using the 'Store AIP' micro-service&lt;br /&gt;
* Storage Service keeps a local copy of the AIP&lt;br /&gt;
* Storage Service POSTs the list of files (e.g., a .7z file or parts of one created with split) that make up the AIP to LOCKSS-O-Matic. This list is in the form of an Atom document.&lt;br /&gt;
* LOCKSS-O-Matic parses the list of files in the Atom document and registers them in its database.&lt;br /&gt;
* LOCKSS-O-Matic edits the configuration files of all the LOCKSS boxes in the Private LOCKSS Network&lt;br /&gt;
* LOCKSS boxes harvest the AIP files from the Storage Service&lt;br /&gt;
* Storage Service polls LOCKSS-O-Matic (GETs the State document) to determine when the AIP has been stored in LOCKSS&lt;br /&gt;
* If/When the Storage Service wants to remove its local copy of the AIP, it first POSTs a metadata update to LOCKSS-O-Matic&lt;br /&gt;
* LOCKSS-O-Matic then updates the configuration files in LOCKSS boxes so they will stop harvesting the AIP&lt;br /&gt;
&lt;br /&gt;
==Technical Details==&lt;br /&gt;
&lt;br /&gt;
This document outlines a minimalist SWORD API where LOCKSS-O-Matic is the server, and the Archivematica Storage Service is the client. @todos and questions appear in &amp;lt;!-- comments --&amp;gt; throughout.&lt;br /&gt;
&lt;br /&gt;
In the examples below, Archivematica is at http://archivematica.example.org and LOCKSS-O-Matic is at http://lockssomatic.example.org. The content file being managed by the SWORD deposit is an Archivematica AIP with the UUID dd3e3247-8466-4f2a-bb32-22a210cfce60. LOCKSS-O-Matic is managing a small Private LOCKSS Network containing two boxes, http://lockss1.example.org and http://lockss2.example.org.&lt;br /&gt;
&lt;br /&gt;
===Service Document===&lt;br /&gt;
Archivematica issues a GET (with an HTTP header of ‘On-Behalf-Of’ with the value of the Archivematica instance’s content provider ID in the target LOM instance) to the SD-IRI (http://lockssomatic.example.org/api/sword/2.0/sd-iri). LOCKSS-O-Matic responds with a Service Document like:&lt;br /&gt;
&lt;br /&gt;
''On-Behalf-Of: 12''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;service xmlns:dcterms=&amp;quot;http://purl.org/dc/terms/&amp;quot;&lt;br /&gt;
    xmlns:sword=&amp;quot;http://purl.org/net/sword/terms/&amp;quot;&lt;br /&gt;
    xmlns:atom=&amp;quot;http://www.w3.org/2005/Atom&amp;quot;&lt;br /&gt;
    xmlns:lom=&amp;quot;http://lockssomatic.info/SWORD2&amp;quot;&lt;br /&gt;
    xmlns=&amp;quot;http://www.w3.org/2007/app&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;sword:version&amp;gt;2.0&amp;lt;/sword:version&amp;gt;&lt;br /&gt;
    &amp;lt;!-- maxUploadSize is configurable in LOCKSS-O-Matic. →&lt;br /&gt;
    &amp;lt;!-- measured in kB, where kB = 1000*Byte --&amp;gt;&lt;br /&gt;
    &amp;lt;sword:maxUploadSize&amp;gt;102400&amp;lt;/sword:maxUploadSize&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;!-- uploadChecksumType chosen from a list - suggested: md5, sha1, sha256 --&amp;gt;&lt;br /&gt;
    &amp;lt;lom:uploadChecksumType&amp;gt;md5&amp;lt;/lom:uploadChecksumType&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;workspace&amp;gt;&lt;br /&gt;
        &amp;lt;atom:title&amp;gt;LOCKSS-O-Matic at Simon Fraser University&amp;lt;/atom:title&amp;gt;     &lt;br /&gt;
        &amp;lt;!-- Each LOCKSS-O-Matic content provider will have its own SWORD collection; &lt;br /&gt;
            in this case, http://archivematica.example.org  is collection 12. --&amp;gt;&lt;br /&gt;
        &amp;lt;collection href=&amp;quot;http://lockssomatic.example.org/api/sword/2.0/col-iri/12&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;atom:title&amp;gt;SFU Archivematica content provider&amp;lt;/atom:title&amp;gt;&lt;br /&gt;
            &amp;lt;accept&amp;gt;application/atom_xml;type=entry&amp;lt;/accept&amp;gt;&lt;br /&gt;
            &amp;lt;sword:mediation&amp;gt;true&amp;lt;/sword:mediation&amp;gt;&lt;br /&gt;
         &amp;lt;/collection&amp;gt;&lt;br /&gt;
    &amp;lt;/workspace&amp;gt;&lt;br /&gt;
&amp;lt;/service&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Creating a Resource with an Atom Entry===&lt;br /&gt;
Archivematica issues a POST to the Col-IRI, ensuring that the &amp;lt;id&amp;gt; element in the Atom entry contains the UUID of the AIP, and that the URLs to the files to be preserved are listed in lom:content elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;entry xmlns=&amp;quot;http://www.w3.org/2005/Atom&amp;quot;    &lt;br /&gt;
        xmlns:dcterms=&amp;quot;http://purl.org/dc/terms/&amp;quot;&lt;br /&gt;
        xmlns:lom=&amp;quot;http://lockssomatic.info/SWORD2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Some AIP&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;updated&amp;gt;2013-10-07T17:17:08Z&amp;lt;/updated&amp;gt;&lt;br /&gt;
    &amp;lt;author&amp;gt;&amp;lt;name&amp;gt;Name of PREMIS agent owning AIP&amp;lt;/name&amp;gt;&amp;lt;/author&amp;gt;&lt;br /&gt;
    &amp;lt;summary type=&amp;quot;text&amp;quot;&amp;gt;The AIP’s dc:description if it has one. If not, use a generic summary.&amp;lt;/summary&amp;gt;&lt;br /&gt;
    &amp;lt;!-- size is measured in kB, where kB = 1000*Byte --&amp;gt;&lt;br /&gt;
    &amp;lt;lom:content size=&amp;quot;102400&amp;quot; checksumType=&amp;quot;md5&amp;quot; checksumValue=&amp;quot;bd4a9b642562547754086de2dab26b7d&amp;quot;&amp;gt;&lt;br /&gt;
        http://archivematica.example.org/archival-storage/download/aip/dd3e3247-8466-4f2a-bb32-22a210cfce60.001&lt;br /&gt;
    &amp;lt;/lom:content&amp;gt;&lt;br /&gt;
    &amp;lt;lom:content size=&amp;quot;46899&amp;quot; checksumType=&amp;quot;md5&amp;quot; checksumValue=&amp;quot;226190d94b21d1b0c7b1a42d855e419d&amp;quot;&amp;gt;&lt;br /&gt;
        http://archivematica.example.org/archival-storage/download/aip/dd3e3247-8466-4f2a-bb32-22a210cfce60.002&lt;br /&gt;
    &amp;lt;/lom:content&amp;gt;&lt;br /&gt;
&amp;lt;/entry&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LOCKSS-O-Matic responds with a 201 Created and the Location header with the entry’s Edit-IRI, and the deposit receipt.&lt;br /&gt;
&lt;br /&gt;
===Deposit Receipt===&lt;br /&gt;
Contains the Cont-IRI, the EM-IRI, and the State-IRI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;entry xmlns=&amp;quot;http://www.w3.org/2005/Atom&amp;quot; xmlns:sword=&amp;quot;http://purl.org/net/sword/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;sword:treatment&amp;gt;Stored in LOCKSS via LOCKSS-o-matic&amp;lt;/sword:treatment&amp;gt;&lt;br /&gt;
    &amp;lt;content type=&amp;quot;application/x-7z-compressed&amp;quot; src=&amp;quot;http://lockssomatic.example.org/api/sword/2.0/cont-iri/12/dd3e3247-8466-4f2a-bb32-22a210cfce60&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- EM-IRI. The EM-IRI and Cont-IRI can (and in LOCKSS-O-Matic, will) have the same value.--&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;edit-media&amp;quot; href=&amp;quot;http://lockssomatic.example.org/api/sword/2.0/cont-iri/12/dd3e3247-8466-4f2a-bb32-22a210cfce60&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- SE-IRI (can be same as Edit-IRI) --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Archivematica will POST to this iri when deleting local content --&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;http://purl.org/net/sword/terms/add&amp;quot; href=&amp;quot;http://lockssomatic.example.org/api/sword/2.0/cont-iri/12/dd3e3247-8466-4f2a-bb32-22a210cfce60/edit&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Edit-IRI --&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;edit&amp;quot; href=&amp;quot;http://lockssomatic.example.org/api/sword/2.0/cont-iri/12/dd3e3247-8466-4f2a-bb32-22a210cfce60/edit&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;!-- In LOCKSS-O-Matic, the State-IRI will be the EM-IRI/Cont-IRI with the string ‘/state’ appended. --&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;http://purl.org/net/sword/terms/statement&amp;quot; type=&amp;quot;application/atom+xml;type=feed&amp;quot; &lt;br /&gt;
      href=&amp;quot;http://lockssomatic.example.org/api/sword/2.0/cont-IRI/12/dd3e3247-8466-4f2a-bb32-22a210cfce60/state&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/entry&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===SWORD Statement===&lt;br /&gt;
State-IRI is defined in the deposit receipt. GET requests to the State-IRI for a resource will return an Atom feed as described below.&lt;br /&gt;
&lt;br /&gt;
These state terms apply to the Allowed state term and message values, using the namespace http://lockssomatic.info/SWORD2,  are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Term&lt;br /&gt;
! Message (one of)&lt;br /&gt;
|-&lt;br /&gt;
| failed&lt;br /&gt;
| Content cannot be harvested by LOCKSS.&lt;br /&gt;
|-&lt;br /&gt;
| disagreement&lt;br /&gt;
| LOCKSS network is not in agreement on content checksums.&lt;br /&gt;
|- &lt;br /&gt;
| agreement&lt;br /&gt;
| LOCKSS network agrees internally on content checksums.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If LOCKSS-O-Matic reports ‘agreement’, Archivematica may delete the AIP from local storage.&lt;br /&gt;
&lt;br /&gt;
Sample SWORD statement serialized as an Atom feed:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;atom:feed xmlns:sword=&amp;quot;http://purl.org/net/sword/terms/&amp;quot; xmlns:atom=&amp;quot;http://www.w3.org/2005/Atom&amp;quot; xmlns:lom=&amp;quot;http://lockssomatic.info/SWORD2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;atom:entry&amp;gt;&lt;br /&gt;
    &amp;lt;atom:category scheme=&amp;quot;http://purl.org/net/sword/terms/&amp;quot; term=&amp;quot;http://purl.org/net/sword/terms/originalDeposit&amp;quot; label=&amp;quot;Orignal Deposit&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- This content node is for a chunk (i.e. a LOM content entry). --&amp;gt;&lt;br /&gt;
    &amp;lt;lom:content id=&amp;quot;http://archivematica.example.org/archival-storage/download/aip/dd3e3247-8466-4f2a-bb32-22a210cfce60.001&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;lom:serverlist&amp;gt;&lt;br /&gt;
        &amp;lt;lom:server id=&amp;quot;1&amp;quot; state=&amp;quot;agreement&amp;quot; src=&amp;quot;http://lockss1.example.org:8083/ServeContent?url=http://archivematicastorage.example.com/lockssomatic/dd3e3247-8466-4f2a-bb32-22a210cfce60.001&amp;quot; checksumType=&amp;quot;md5&amp;quot; checksumValue=&amp;quot;bd4a9b642562547754086de2dab26b7d&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;lom:server id=&amp;quot;2&amp;quot; state=&amp;quot;failed&amp;quot; src=&amp;quot;http://lockss2.example.org:8083/ServeContent?url=http://archivematicastorage.example.com/lockssomatic/dd3e3247-8466-4f2a-bb32-22a210cfce60.001&amp;quot; checksumType=&amp;quot;md5&amp;quot; checksumValue=&amp;quot;bd4a9b642562547754086de2dab26b7d&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/lom:serverlist&amp;gt;&lt;br /&gt;
    &amp;lt;/lom:content&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;lom:content id=&amp;quot;http://archivematica.example.org/archival-storage/download/aip/dd3e3247-8466-4f2a-bb32-22a210cfce60.002&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;lom:serverlist&amp;gt;&lt;br /&gt;
        &amp;lt;lom:server id=&amp;quot;1&amp;quot; state=&amp;quot;agreement&amp;quot; src=&amp;quot;http://lockss1.example.org:8083/ServeContent?url=http://archivematicastorage.example.com/lockssomatic/dd3e3247-8466-4f2a-bb32-22a210cfce602.002&amp;quot; checksumType=&amp;quot;md5&amp;quot; checksumValue=&amp;quot;226190d94b21d1b0c7b1a42d855e419d&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;lom:server id=&amp;quot;2&amp;quot; state=&amp;quot;disagreement&amp;quot; src=&amp;quot;http://lockss2.example.org:8083/ServeContent?url=http://archivematicastorage.example.com/lockssomatic/dd3e3247-8466-4f2a-bb32-22a210cfce602.002&amp;quot; checksumType=&amp;quot;md5&amp;quot; checksumValue=&amp;quot;226190d94b21d1b0c7b1a42d855e419d&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;/lom:serverlist&amp;gt;&lt;br /&gt;
    &amp;lt;/lom:content&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/atom:entry&amp;gt;&lt;br /&gt;
&amp;lt;/atom:feed&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Updating Metadata===&lt;br /&gt;
Archivematica informs LOCKSS-O-Matic that it wants to delete the local copy of a file by PUTing to the SE-IRI an Atom document containing lom:content elements with a recrawl=&amp;quot;false&amp;quot; attribute for each file. LOCKSS-O-Matic responds with a 202 Accepted and updates the LOCKSS configuration files to indicate that the AU the file is in should not be reharvested. After the configuration files have been updated, LOCKSS-O-Matic will respond with a 200 OK to the same request.&lt;br /&gt;
&lt;br /&gt;
PUT SE-IRI&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;entry xmlns=&amp;quot;http://www.w3.org/2005/Atom&amp;quot; xmlns:dcterms=&amp;quot;http://purl.org/dc/terms/&amp;quot; xmlns:lom=&amp;quot;http://lockssomatic.info/SWORD2&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;urn:uuid:dd3e3247-8466-4f2a-bb32-22a210cfce60&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lom:content recrawl=&amp;quot;false&amp;quot;&amp;gt;http://archivematica.example.org/archival-storage/download/aip/dd3e3247-8466-4f2a-bb32-&lt;br /&gt;
+22a210cfce60.001&amp;lt;/lom:content&amp;gt;&lt;br /&gt;
    &amp;lt;lom:content recrawl=&amp;quot;false&amp;quot;&amp;gt;http://archivematica.example.org/archival-storage/download/aip/dd3e3247-8466-4f2a-bb32-22a210cfce60.002&amp;lt;/lom:content&amp;gt;&lt;br /&gt;
&amp;lt;/entry&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
LOM can return:&lt;br /&gt;
*- HTTP 202 (Accepted) meaning LOM is updating the LOCKSS config files saying not to harvest this, but it is not done yet.&lt;br /&gt;
*- HTTP 200 (OK) meaning all config updates are complete&lt;br /&gt;
*- HTTP 204 (No Content) if there is no matching AIP&lt;br /&gt;
*- HTTP 409 (Conflict) There are files in the LOCKSS Archival Unit (AU) that do not have ‘recrawl=false’.&lt;br /&gt;
&lt;br /&gt;
“Once the server has processed the request it MUST return an HTTP status code 200 (OK) or 204 (No Content), or an appropriate error code. “&lt;br /&gt;
&lt;br /&gt;
===Comments/questions===&lt;br /&gt;
&lt;br /&gt;
;'''Can an AIP be deleted from LOCKSS-O-Matic? How? &lt;br /&gt;
:Not really, since LOCKSS doesn’t let you delete content, not directly anyway (it can be done on the boxes’ command lines). In LOM we could have a flag that specifies that content should not be harvested into the LOCKSS network. In the Archivematica dashboard, an AIP deletion request can be made.  This deletion request goes to the Storage Service, which would tell LOM to stop harvesting the AIP, and then delete the local copy.  The copies in the PLN would not be deleted, and would have to be manually deleted by a LOCKSS administrator.&lt;br /&gt;
&lt;br /&gt;
;'''Can an AIP be retrieved from LOCKSS via the Archivematica Dashboard?&lt;br /&gt;
:Yes - with the following caveat.  All AIP's stored in the Storage Service are searchable via the Archival Storage tab in the dashboard.  The Storage Service keeps a local copy of AIP's that are stored in LOCKSS, so when a user clicks on an AIP in the Archival Storage tab, that local copy will be delivered.  If the local copy has been deleted (which will eventually happen, exactly when is based on Storage Service configuration settings) then the dashboard user will get a 'local copy not available, contact your storage administrator' message.  From the Storage Service, it is possible for a storage administrator to click a button to download a copy of the AIP directly from one of the LOCKSS boxes, to the storage service.  Once that is done, the AIP will then be retrievable from a dashboard.&lt;br /&gt;
 &lt;br /&gt;
;'''Is there any sort of authentication/authorization on the API?&lt;br /&gt;
: This should support HTTP Basic Auth (which is a “SHOULD” in SWORD). At a minimum IP whitelisting.&lt;br /&gt;
LOCKSS itself relies on both whitelisting and HTTP Basic&lt;br /&gt;
&lt;br /&gt;
;'''Voting&lt;br /&gt;
:Each LOCKSS box initiates a ‘poll’ at random intervals bounded by two box-specific configuration settings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;property name=&amp;quot;contentpoll.min&amp;quot; value=&amp;quot;30m&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;property name=&amp;quot;contentpoll.max&amp;quot; value=&amp;quot;2d&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;'''How long does it take for 100% agreement on an Archival Unit (AU)?&lt;br /&gt;
:Because each box recrawls AUs (looking for changes/additions) on its own schedule, AUs that are constantly changing likely won't achieve 100% agreement until they stop changing. If all the copies of the AU are the same when it settles down, polling will reach 100% agreement once all boxes have called and completed a poll. If the copies aren't identical (usually because of random crawl errors) it may take a couple cycles of polling to resolve the differences.&lt;br /&gt;
&lt;br /&gt;
== Sample pointer files ==&lt;br /&gt;
&lt;br /&gt;
The pointer file will be updated to track the current state of files in LOCKSS (more details at #6212).  Here are some sample pointer files representing different states of the package stored in LOCKSS.&lt;br /&gt;
&lt;br /&gt;
=== Base pointer file ===&lt;br /&gt;
&lt;br /&gt;
The pointer file as it arrives in the storage service, unmodified for LOCKSS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;mets xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot; xmlns=&amp;quot;http://www.loc.gov/METS/&amp;quot; xsi:schemaLocation=&amp;quot;http://www.loc.gov/METS/ http://www.loc.gov/standards/mets/version18/mets.xsd&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;metsHdr CREATEDATE=&amp;quot;2014-01-14T14:35:15&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;amdSec ID=&amp;quot;amdSec_1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;techMD ID=&amp;quot;techMD_1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:OBJECT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;object version=&amp;quot;2.2&amp;quot; xmlns=&amp;quot;info:lc/xmlns/premis-v2&amp;quot; xsi:type=&amp;quot;file&amp;quot; xsi:schemaLocation=&amp;quot;info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;objectIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;objectIdentifierType&amp;gt;UUID&amp;lt;/objectIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;objectIdentifierValue&amp;gt;e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6&amp;lt;/objectIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/objectIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;objectCharacteristics&amp;gt;&lt;br /&gt;
              &amp;lt;compositionLevel&amp;gt;0&amp;lt;/compositionLevel&amp;gt;&lt;br /&gt;
              &amp;lt;fixity&amp;gt;&lt;br /&gt;
                &amp;lt;messageDigestAlgorithm&amp;gt;sha256&amp;lt;/messageDigestAlgorithm&amp;gt;&lt;br /&gt;
                &amp;lt;messageDigest&amp;gt;7d4ede07b9288960d82c2ee146f6b4368d7dd065a99fae3523e3aa0d932bdb66&amp;lt;/messageDigest&amp;gt;&lt;br /&gt;
              &amp;lt;/fixity&amp;gt;&lt;br /&gt;
              &amp;lt;size&amp;gt;190989&amp;lt;/size&amp;gt;&lt;br /&gt;
              &amp;lt;format&amp;gt;&lt;br /&gt;
                &amp;lt;formatDesignation&amp;gt;&lt;br /&gt;
                  &amp;lt;formatName&amp;gt;7Zip format&amp;lt;/formatName&amp;gt;&lt;br /&gt;
                  &amp;lt;formatVersion/&amp;gt;&lt;br /&gt;
                &amp;lt;/formatDesignation&amp;gt;&lt;br /&gt;
                &amp;lt;formatRegistry&amp;gt;&lt;br /&gt;
                  &amp;lt;formatRegistryName&amp;gt;PRONOM&amp;lt;/formatRegistryName&amp;gt;&lt;br /&gt;
                  &amp;lt;formatRegistryKey&amp;gt;fmt/484&amp;lt;/formatRegistryKey&amp;gt;&lt;br /&gt;
                &amp;lt;/formatRegistry&amp;gt;&lt;br /&gt;
              &amp;lt;/format&amp;gt;&lt;br /&gt;
              &amp;lt;creatingApplication&amp;gt;&lt;br /&gt;
                &amp;lt;creatingApplicationName&amp;gt;7-Zip&amp;lt;/creatingApplicationName&amp;gt;&lt;br /&gt;
                &amp;lt;creatingApplicationVersion&amp;gt;9.20&amp;lt;/creatingApplicationVersion&amp;gt;&lt;br /&gt;
                &amp;lt;dateCreatedByApplication&amp;gt;2014-01-14T14:35:15&amp;lt;/dateCreatedByApplication&amp;gt;&lt;br /&gt;
              &amp;lt;/creatingApplication&amp;gt;&lt;br /&gt;
            &amp;lt;/objectCharacteristics&amp;gt;&lt;br /&gt;
          &amp;lt;/object&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/techMD&amp;gt;&lt;br /&gt;
    &amp;lt;digiprovMD ID=&amp;quot;digiprovMD_1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:EVENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;event xmlns=&amp;quot;info:lc/xmlns/premis-v2&amp;quot; xsi:schemaLocation=&amp;quot;info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd&amp;quot; version=&amp;quot;2.2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;eventIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierType&amp;gt;UUID&amp;lt;/eventIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierValue&amp;gt;7b16bct8-389x-4c0e-815c-98df287b234k&amp;lt;/eventIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/eventIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;eventType&amp;gt;compression&amp;lt;/eventType&amp;gt;&lt;br /&gt;
            &amp;lt;eventDateTime&amp;gt;2014-01-14T22:31:22&amp;lt;/eventDateTime&amp;gt;&lt;br /&gt;
            &amp;lt;eventDetail&amp;gt;&amp;lt;!-- information about tool--&amp;gt;&amp;lt;/eventDetail&amp;gt;&lt;br /&gt;
            &amp;lt;eventOutcomeInformation&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcome&amp;gt;&amp;lt;/eventOutcome&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcomeDetail&amp;gt;&lt;br /&gt;
                &amp;lt;eventOutcomeDetailNote&amp;gt;&amp;lt;!--tool output --&amp;gt;&amp;lt;/eventOutcomeDetailNote&amp;gt;&lt;br /&gt;
              &amp;lt;/eventOutcomeDetail&amp;gt;&lt;br /&gt;
            &amp;lt;/eventOutcomeInformation&amp;gt;&lt;br /&gt;
            &amp;lt;linkingAgentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierType&amp;gt;preservation system&amp;lt;/linkingAgentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierValue&amp;gt;Archivematica-1.0&amp;lt;/linkingAgentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/linkingAgentIdentifier&amp;gt;&lt;br /&gt;
          &amp;lt;/event&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/digiprovMD&amp;gt;&lt;br /&gt;
    &amp;lt;digiprovMD ID=&amp;quot;digiprovMD_2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:AGENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;agent&amp;gt;&lt;br /&gt;
            &amp;lt;agentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;agentIdentifierType&amp;gt;preservation system&amp;lt;/agentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;agentIdentifierValue&amp;gt;Archivematica-1.0&amp;lt;/agentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/agentIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;agentName&amp;gt;Archivematica&amp;lt;/agentName&amp;gt;&lt;br /&gt;
            &amp;lt;agentType&amp;gt;software&amp;lt;/agentType&amp;gt;&lt;br /&gt;
          &amp;lt;/agent&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/digiprovMD&amp;gt;&lt;br /&gt;
  &amp;lt;/amdSec&amp;gt;&lt;br /&gt;
  &amp;lt;fileSec&amp;gt;&lt;br /&gt;
    &amp;lt;fileGrp USE=&amp;quot;Archival Information Package&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;file ID=&amp;quot;FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;FLocat OTHERLOCTYPE=&amp;quot;SYSTEM&amp;quot; LOCTYPE=&amp;quot;OTHER&amp;quot; xlink:href=&amp;quot;/filepath/FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6/FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6.7z&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;transformFile TRANSFORMALGORITHM=&amp;quot;bzip2&amp;quot; TRANSFORMORDER=&amp;quot;1&amp;quot; TRANSFORMTYPE=&amp;quot;decompression&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/file&amp;gt;&lt;br /&gt;
    &amp;lt;/fileGrp&amp;gt;&lt;br /&gt;
  &amp;lt;/fileSec&amp;gt;&lt;br /&gt;
  &amp;lt;structMap TYPE=&amp;quot;physical&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div TYPE=&amp;quot;Archival Information Package&amp;quot; ADMID=&amp;quot;amdSec_1&amp;quot;&amp;gt;  &lt;br /&gt;
      &amp;lt;fptr FILEID=&amp;quot;FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/structMap&amp;gt;&lt;br /&gt;
&amp;lt;/mets&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Package unsplit, local copy kept ===&lt;br /&gt;
&lt;br /&gt;
The package was smaller than the max file size and therefore unsplit.  The package is fully stored, and the local copy was retained.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;mets xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot; xmlns=&amp;quot;http://www.loc.gov/METS/&amp;quot; xsi:schemaLocation=&amp;quot;http://www.loc.gov/METS/ http://www.loc.gov/standards/mets/version18/mets.xsd&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;metsHdr CREATEDATE=&amp;quot;2014-01-14T14:35:15&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;amdSec ID=&amp;quot;amdSec_1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;techMD ID=&amp;quot;techMD_1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:OBJECT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;object version=&amp;quot;2.2&amp;quot; xmlns=&amp;quot;info:lc/xmlns/premis-v2&amp;quot; xsi:type=&amp;quot;file&amp;quot; xsi:schemaLocation=&amp;quot;info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;objectIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;objectIdentifierType&amp;gt;UUID&amp;lt;/objectIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;objectIdentifierValue&amp;gt;e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6&amp;lt;/objectIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/objectIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;objectCharacteristics&amp;gt;&lt;br /&gt;
              &amp;lt;compositionLevel&amp;gt;1&amp;lt;/compositionLevel&amp;gt;&lt;br /&gt;
              &amp;lt;fixity&amp;gt;&lt;br /&gt;
                &amp;lt;messageDigestAlgorithm&amp;gt;sha256&amp;lt;/messageDigestAlgorithm&amp;gt;&lt;br /&gt;
                &amp;lt;messageDigest&amp;gt;7d4ede07b9288960d82c2ee146f6b4368d7dd065a99fae3523e3aa0d932bdb66&amp;lt;/messageDigest&amp;gt;&lt;br /&gt;
              &amp;lt;/fixity&amp;gt;&lt;br /&gt;
              &amp;lt;size&amp;gt;190989&amp;lt;/size&amp;gt;&lt;br /&gt;
              &amp;lt;format&amp;gt;&lt;br /&gt;
                &amp;lt;formatDesignation&amp;gt;&lt;br /&gt;
                  &amp;lt;formatName&amp;gt;7Zip format&amp;lt;/formatName&amp;gt;&lt;br /&gt;
                  &amp;lt;formatVersion/&amp;gt;&lt;br /&gt;
                &amp;lt;/formatDesignation&amp;gt;&lt;br /&gt;
                &amp;lt;formatRegistry&amp;gt;&lt;br /&gt;
                  &amp;lt;formatRegistryName&amp;gt;PRONOM&amp;lt;/formatRegistryName&amp;gt;&lt;br /&gt;
                  &amp;lt;formatRegistryKey&amp;gt;fmt/484&amp;lt;/formatRegistryKey&amp;gt;&lt;br /&gt;
                &amp;lt;/formatRegistry&amp;gt;&lt;br /&gt;
              &amp;lt;/format&amp;gt;&lt;br /&gt;
              &amp;lt;creatingApplication&amp;gt;&lt;br /&gt;
                &amp;lt;creatingApplicationName&amp;gt;7-Zip&amp;lt;/creatingApplicationName&amp;gt;&lt;br /&gt;
                &amp;lt;creatingApplicationVersion&amp;gt;9.20&amp;lt;/creatingApplicationVersion&amp;gt;&lt;br /&gt;
                &amp;lt;dateCreatedByApplication&amp;gt;2014-01-14T14:35:15&amp;lt;/dateCreatedByApplication&amp;gt;&lt;br /&gt;
              &amp;lt;/creatingApplication&amp;gt;&lt;br /&gt;
            &amp;lt;/objectCharacteristics&amp;gt;&lt;br /&gt;
          &amp;lt;/object&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/techMD&amp;gt;&lt;br /&gt;
    &amp;lt;digiprovMD ID=&amp;quot;digiprovMD_1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:EVENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;event xmlns=&amp;quot;info:lc/xmlns/premis-v2&amp;quot; xsi:schemaLocation=&amp;quot;info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd&amp;quot; version=&amp;quot;2.2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;eventIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierType&amp;gt;UUID&amp;lt;/eventIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierValue&amp;gt;7b16bct8-389x-4c0e-815c-98df287b234k&amp;lt;/eventIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/eventIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;eventType&amp;gt;compression&amp;lt;/eventType&amp;gt;&lt;br /&gt;
            &amp;lt;eventDateTime&amp;gt;2014-01-14T22:31:22&amp;lt;/eventDateTime&amp;gt;&lt;br /&gt;
            &amp;lt;eventDetail&amp;gt;&amp;lt;!-- information about tool--&amp;gt;&amp;lt;/eventDetail&amp;gt;&lt;br /&gt;
            &amp;lt;eventOutcomeInformation&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcome&amp;gt;&amp;lt;/eventOutcome&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcomeDetail&amp;gt;&lt;br /&gt;
                &amp;lt;eventOutcomeDetailNote&amp;gt;&amp;lt;!--tool output --&amp;gt;&amp;lt;/eventOutcomeDetailNote&amp;gt;&lt;br /&gt;
              &amp;lt;/eventOutcomeDetail&amp;gt;&lt;br /&gt;
            &amp;lt;/eventOutcomeInformation&amp;gt;&lt;br /&gt;
            &amp;lt;linkingAgentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierType&amp;gt;preservation system&amp;lt;/linkingAgentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierValue&amp;gt;Archivematica-1.0&amp;lt;/linkingAgentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/linkingAgentIdentifier&amp;gt;&lt;br /&gt;
          &amp;lt;/event&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/digiprovMD&amp;gt;&lt;br /&gt;
    &amp;lt;digiprovMD ID=&amp;quot;digiprovMD_2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:AGENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;agent&amp;gt;&lt;br /&gt;
            &amp;lt;agentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;agentIdentifierType&amp;gt;preservation system&amp;lt;/agentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;agentIdentifierValue&amp;gt;Archivematica-1.0&amp;lt;/agentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/agentIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;agentName&amp;gt;Archivematica&amp;lt;/agentName&amp;gt;&lt;br /&gt;
            &amp;lt;agentType&amp;gt;software&amp;lt;/agentType&amp;gt;&lt;br /&gt;
          &amp;lt;/agent&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/digiprovMD&amp;gt;&lt;br /&gt;
  &amp;lt;/amdSec&amp;gt;&lt;br /&gt;
  &amp;lt;fileSec&amp;gt;&lt;br /&gt;
    &amp;lt;fileGrp USE=&amp;quot;Archival Information Package&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;file ID=&amp;quot;FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;FLocat OTHERLOCTYPE=&amp;quot;SYSTEM&amp;quot; LOCTYPE=&amp;quot;OTHER&amp;quot; xlink:href=&amp;quot;/filepath/FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6/FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6.7z&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;FLocat LOCTYPE=&amp;quot;URL&amp;quot; xlink:href=&amp;quot;http://lockss1.example.org:8083/ServeContent?url=http://archivematicastorage.example.com/lockssomatic/FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6.7z&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;transformFile TRANSFORMALGORITHM=&amp;quot;bzip2&amp;quot; TRANSFORMORDER=&amp;quot;1&amp;quot; TRANSFORMTYPE=&amp;quot;decompression&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/file&amp;gt;&lt;br /&gt;
    &amp;lt;/fileGrp&amp;gt;&lt;br /&gt;
  &amp;lt;/fileSec&amp;gt;&lt;br /&gt;
  &amp;lt;structMap TYPE=&amp;quot;physical&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div TYPE=&amp;quot;Archival Information Package&amp;quot; ADMID=&amp;quot;amdSec_1&amp;quot;&amp;gt;  &lt;br /&gt;
      &amp;lt;fptr FILEID=&amp;quot;FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/structMap&amp;gt;&lt;br /&gt;
&amp;lt;/mets&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Package unsplit, local copy deleted ===&lt;br /&gt;
&lt;br /&gt;
The package was smaller than the max file size and therefore unsplit.  The package is fully stored, and the local copy was deleted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;mets xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot; xmlns=&amp;quot;http://www.loc.gov/METS/&amp;quot; xsi:schemaLocation=&amp;quot;http://www.loc.gov/METS/ http://www.loc.gov/standards/mets/version18/mets.xsd&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;metsHdr CREATEDATE=&amp;quot;2014-01-14T14:35:15&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;amdSec ID=&amp;quot;amdSec_1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;techMD ID=&amp;quot;techMD_1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:OBJECT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;object version=&amp;quot;2.2&amp;quot; xmlns=&amp;quot;info:lc/xmlns/premis-v2&amp;quot; xsi:type=&amp;quot;file&amp;quot; xsi:schemaLocation=&amp;quot;info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;objectIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;objectIdentifierType&amp;gt;UUID&amp;lt;/objectIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;objectIdentifierValue&amp;gt;e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6&amp;lt;/objectIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/objectIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;objectCharacteristics&amp;gt;&lt;br /&gt;
              &amp;lt;compositionLevel&amp;gt;1&amp;lt;/compositionLevel&amp;gt;&lt;br /&gt;
              &amp;lt;fixity&amp;gt;&lt;br /&gt;
                &amp;lt;messageDigestAlgorithm&amp;gt;sha256&amp;lt;/messageDigestAlgorithm&amp;gt;&lt;br /&gt;
                &amp;lt;messageDigest&amp;gt;7d4ede07b9288960d82c2ee146f6b4368d7dd065a99fae3523e3aa0d932bdb66&amp;lt;/messageDigest&amp;gt;&lt;br /&gt;
              &amp;lt;/fixity&amp;gt;&lt;br /&gt;
              &amp;lt;size&amp;gt;190989&amp;lt;/size&amp;gt;&lt;br /&gt;
              &amp;lt;format&amp;gt;&lt;br /&gt;
                &amp;lt;formatDesignation&amp;gt;&lt;br /&gt;
                  &amp;lt;formatName&amp;gt;7Zip format&amp;lt;/formatName&amp;gt;&lt;br /&gt;
                  &amp;lt;formatVersion/&amp;gt;&lt;br /&gt;
                &amp;lt;/formatDesignation&amp;gt;&lt;br /&gt;
                &amp;lt;formatRegistry&amp;gt;&lt;br /&gt;
                  &amp;lt;formatRegistryName&amp;gt;PRONOM&amp;lt;/formatRegistryName&amp;gt;&lt;br /&gt;
                  &amp;lt;formatRegistryKey&amp;gt;fmt/484&amp;lt;/formatRegistryKey&amp;gt;&lt;br /&gt;
                &amp;lt;/formatRegistry&amp;gt;&lt;br /&gt;
              &amp;lt;/format&amp;gt;&lt;br /&gt;
              &amp;lt;creatingApplication&amp;gt;&lt;br /&gt;
                &amp;lt;creatingApplicationName&amp;gt;7-Zip&amp;lt;/creatingApplicationName&amp;gt;&lt;br /&gt;
                &amp;lt;creatingApplicationVersion&amp;gt;9.20&amp;lt;/creatingApplicationVersion&amp;gt;&lt;br /&gt;
                &amp;lt;dateCreatedByApplication&amp;gt;2014-01-14T14:35:15&amp;lt;/dateCreatedByApplication&amp;gt;&lt;br /&gt;
              &amp;lt;/creatingApplication&amp;gt;&lt;br /&gt;
            &amp;lt;/objectCharacteristics&amp;gt;&lt;br /&gt;
          &amp;lt;/object&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/techMD&amp;gt;&lt;br /&gt;
    &amp;lt;digiprovMD ID=&amp;quot;digiprovMD_1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:EVENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;event xmlns=&amp;quot;info:lc/xmlns/premis-v2&amp;quot; xsi:schemaLocation=&amp;quot;info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd&amp;quot; version=&amp;quot;2.2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;eventIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierType&amp;gt;UUID&amp;lt;/eventIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierValue&amp;gt;7b16bct8-389x-4c0e-815c-98df287b234k&amp;lt;/eventIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/eventIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;eventType&amp;gt;compression&amp;lt;/eventType&amp;gt;&lt;br /&gt;
            &amp;lt;eventDateTime&amp;gt;2014-01-14T22:31:22&amp;lt;/eventDateTime&amp;gt;&lt;br /&gt;
            &amp;lt;eventDetail&amp;gt;&amp;lt;!-- information about tool--&amp;gt;&amp;lt;/eventDetail&amp;gt;&lt;br /&gt;
            &amp;lt;eventOutcomeInformation&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcome&amp;gt;&amp;lt;/eventOutcome&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcomeDetail&amp;gt;&lt;br /&gt;
                &amp;lt;eventOutcomeDetailNote&amp;gt;&amp;lt;!--tool output --&amp;gt;&amp;lt;/eventOutcomeDetailNote&amp;gt;&lt;br /&gt;
              &amp;lt;/eventOutcomeDetail&amp;gt;&lt;br /&gt;
            &amp;lt;/eventOutcomeInformation&amp;gt;&lt;br /&gt;
            &amp;lt;linkingAgentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierType&amp;gt;preservation system&amp;lt;/linkingAgentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierValue&amp;gt;Archivematica-1.0&amp;lt;/linkingAgentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/linkingAgentIdentifier&amp;gt;&lt;br /&gt;
          &amp;lt;/event&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/digiprovMD&amp;gt;&lt;br /&gt;
    &amp;lt;digiprovMD ID=&amp;quot;digiprovMD_2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:EVENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;event xmlns=&amp;quot;info:lc/xmlns/premis-v2&amp;quot; xsi:schemaLocation=&amp;quot;info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd&amp;quot; version=&amp;quot;2.2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;eventIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierType&amp;gt;UUID&amp;lt;/eventIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierValue&amp;gt;5e16bccb-384a-4c0e-815c-01df286b235b&amp;lt;/eventIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/eventIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;eventType&amp;gt;deletion&amp;lt;/eventType&amp;gt;&lt;br /&gt;
            &amp;lt;eventDateTime&amp;gt;2014-01-14T22:33:48&amp;lt;/eventDateTime&amp;gt;&lt;br /&gt;
            &amp;lt;eventDetail&amp;gt;&amp;lt;/eventDetail&amp;gt;&lt;br /&gt;
            &amp;lt;eventOutcomeInformation&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcome&amp;gt;&amp;lt;/eventOutcome&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcomeDetail&amp;gt;&lt;br /&gt;
                &amp;lt;eventOutcomeDetailNote&amp;gt;AIP deleted from local storage&amp;lt;/eventOutcomeDetailNote&amp;gt;&lt;br /&gt;
              &amp;lt;/eventOutcomeDetail&amp;gt;&lt;br /&gt;
            &amp;lt;/eventOutcomeInformation&amp;gt;&lt;br /&gt;
            &amp;lt;linkingAgentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierType&amp;gt;storage service&amp;lt;/linkingAgentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierValue&amp;gt;Archivematica Storage Service-1.0&amp;lt;/linkingAgentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/linkingAgentIdentifier&amp;gt;&lt;br /&gt;
          &amp;lt;/event&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/digiprovMD&amp;gt;&lt;br /&gt;
    &amp;lt;digiprovMD ID=&amp;quot;digiprovMD_3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:AGENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;agent&amp;gt;&lt;br /&gt;
            &amp;lt;agentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;agentIdentifierType&amp;gt;preservation system&amp;lt;/agentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;agentIdentifierValue&amp;gt;Archivematica-1.0&amp;lt;/agentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/agentIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;agentName&amp;gt;Archivematica&amp;lt;/agentName&amp;gt;&lt;br /&gt;
            &amp;lt;agentType&amp;gt;software&amp;lt;/agentType&amp;gt;&lt;br /&gt;
          &amp;lt;/agent&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/digiprovMD&amp;gt;&lt;br /&gt;
    &amp;lt;digiprovMD ID=&amp;quot;digiprovMD_4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:AGENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;agent&amp;gt;&lt;br /&gt;
            &amp;lt;agentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;agentIdentifierType&amp;gt;storage service&amp;lt;/agentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;agentIdentifierValue&amp;gt;Archivematica Storage Service-1.0&amp;lt;/agentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/agentIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;agentName&amp;gt;Archivematica Storage Service&amp;lt;/agentName&amp;gt;&lt;br /&gt;
            &amp;lt;agentType&amp;gt;software&amp;lt;/agentType&amp;gt;&lt;br /&gt;
          &amp;lt;/agent&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/digiprovMD&amp;gt;&lt;br /&gt;
  &amp;lt;/amdSec&amp;gt;&lt;br /&gt;
  &amp;lt;fileSec&amp;gt;&lt;br /&gt;
    &amp;lt;fileGrp USE=&amp;quot;Archival Information Package&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;file ID=&amp;quot;FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;FLocat LOCTYPE=&amp;quot;URL&amp;quot; xlink:href=&amp;quot;http://lockss1.example.org:8083/ServeContent?url=http://archivematicastorage.example.com/lockssomatic/FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6.7z&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;transformFile TRANSFORMALGORITHM=&amp;quot;bzip2&amp;quot; TRANSFORMORDER=&amp;quot;1&amp;quot; TRANSFORMTYPE=&amp;quot;decompression&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/file&amp;gt;&lt;br /&gt;
    &amp;lt;/fileGrp&amp;gt;&lt;br /&gt;
  &amp;lt;/fileSec&amp;gt;&lt;br /&gt;
  &amp;lt;structMap TYPE=&amp;quot;physical&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div TYPE=&amp;quot;Archival Information Package&amp;quot; ADMID=&amp;quot;amdSec_1&amp;quot;&amp;gt;  &lt;br /&gt;
      &amp;lt;fptr FILEID=&amp;quot;FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/structMap&amp;gt;&lt;br /&gt;
&amp;lt;/mets&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Package split, local copy kept ===&lt;br /&gt;
&lt;br /&gt;
The package was larger than the max file size and therefore split into several smaller chunks.  The package is fully stored, and the local copy was retained.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;mets xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot; xmlns=&amp;quot;http://www.loc.gov/METS/&amp;quot; xsi:schemaLocation=&amp;quot;http://www.loc.gov/METS/ http://www.loc.gov/standards/mets/version18/mets.xsd&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;metsHdr CREATEDATE=&amp;quot;2014-01-14T14:35:15&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;amdSec ID=&amp;quot;amdSec_1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;techMD ID=&amp;quot;techMD_1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:OBJECT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;object version=&amp;quot;2.2&amp;quot; xmlns=&amp;quot;info:lc/xmlns/premis-v2&amp;quot; xsi:type=&amp;quot;file&amp;quot; xsi:schemaLocation=&amp;quot;info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;objectIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;objectIdentifierType&amp;gt;UUID&amp;lt;/objectIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;objectIdentifierValue&amp;gt;e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6&amp;lt;/objectIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/objectIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;objectCharacteristics&amp;gt;&lt;br /&gt;
              &amp;lt;compositionLevel&amp;gt;1&amp;lt;/compositionLevel&amp;gt;&lt;br /&gt;
              &amp;lt;fixity&amp;gt;&lt;br /&gt;
                &amp;lt;messageDigestAlgorithm&amp;gt;sha256&amp;lt;/messageDigestAlgorithm&amp;gt;&lt;br /&gt;
                &amp;lt;messageDigest&amp;gt;7d4ede07b9288960d82c2ee146f6b4368d7dd065a99fae3523e3aa0d932bdb66&amp;lt;/messageDigest&amp;gt;&lt;br /&gt;
              &amp;lt;/fixity&amp;gt;&lt;br /&gt;
              &amp;lt;size&amp;gt;190989&amp;lt;/size&amp;gt;&lt;br /&gt;
              &amp;lt;format&amp;gt;&lt;br /&gt;
                &amp;lt;formatDesignation&amp;gt;&lt;br /&gt;
                  &amp;lt;formatName&amp;gt;7Zip format&amp;lt;/formatName&amp;gt;&lt;br /&gt;
                  &amp;lt;formatVersion/&amp;gt;&lt;br /&gt;
                &amp;lt;/formatDesignation&amp;gt;&lt;br /&gt;
                &amp;lt;formatRegistry&amp;gt;&lt;br /&gt;
                  &amp;lt;formatRegistryName&amp;gt;PRONOM&amp;lt;/formatRegistryName&amp;gt;&lt;br /&gt;
                  &amp;lt;formatRegistryKey&amp;gt;fmt/484&amp;lt;/formatRegistryKey&amp;gt;&lt;br /&gt;
                &amp;lt;/formatRegistry&amp;gt;&lt;br /&gt;
              &amp;lt;/format&amp;gt;&lt;br /&gt;
              &amp;lt;creatingApplication&amp;gt;&lt;br /&gt;
                &amp;lt;creatingApplicationName&amp;gt;7-Zip&amp;lt;/creatingApplicationName&amp;gt;&lt;br /&gt;
                &amp;lt;creatingApplicationVersion&amp;gt;9.20&amp;lt;/creatingApplicationVersion&amp;gt;&lt;br /&gt;
                &amp;lt;dateCreatedByApplication&amp;gt;2014-01-14T14:35:15&amp;lt;/dateCreatedByApplication&amp;gt;&lt;br /&gt;
              &amp;lt;/creatingApplication&amp;gt;&lt;br /&gt;
            &amp;lt;/objectCharacteristics&amp;gt;&lt;br /&gt;
          &amp;lt;/object&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/techMD&amp;gt;&lt;br /&gt;
    &amp;lt;digiprovMD ID=&amp;quot;digiprovMD_1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:EVENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;event xmlns=&amp;quot;info:lc/xmlns/premis-v2&amp;quot; xsi:schemaLocation=&amp;quot;info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd&amp;quot; version=&amp;quot;2.2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;eventIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierType&amp;gt;UUID&amp;lt;/eventIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierValue&amp;gt;7b16bct8-389x-4c0e-815c-98df287b234k&amp;lt;/eventIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/eventIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;eventType&amp;gt;compression&amp;lt;/eventType&amp;gt;&lt;br /&gt;
            &amp;lt;eventDateTime&amp;gt;2014-01-14T22:31:22&amp;lt;/eventDateTime&amp;gt;&lt;br /&gt;
            &amp;lt;eventDetail&amp;gt;&amp;lt;!-- information about tool--&amp;gt;&amp;lt;/eventDetail&amp;gt;&lt;br /&gt;
            &amp;lt;eventOutcomeInformation&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcome&amp;gt;&amp;lt;/eventOutcome&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcomeDetail&amp;gt;&lt;br /&gt;
                &amp;lt;eventOutcomeDetailNote&amp;gt;&amp;lt;!--tool output --&amp;gt;&amp;lt;/eventOutcomeDetailNote&amp;gt;&lt;br /&gt;
              &amp;lt;/eventOutcomeDetail&amp;gt;&lt;br /&gt;
            &amp;lt;/eventOutcomeInformation&amp;gt;&lt;br /&gt;
            &amp;lt;linkingAgentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierType&amp;gt;preservation system&amp;lt;/linkingAgentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierValue&amp;gt;Archivematica-1.0&amp;lt;/linkingAgentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/linkingAgentIdentifier&amp;gt;&lt;br /&gt;
          &amp;lt;/event&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/digiprovMD&amp;gt;&lt;br /&gt;
    &amp;lt;digiprovMD ID=&amp;quot;digiprovMD_2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:EVENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;event xmlns=&amp;quot;info:lc/xmlns/premis-v2&amp;quot; xsi:schemaLocation=&amp;quot;info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd&amp;quot; version=&amp;quot;2.2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;eventIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierType&amp;gt;UUID&amp;lt;/eventIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierValue&amp;gt;5e16bccb-384a-4c0e-815c-01df286b235b&amp;lt;/eventIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/eventIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;eventType&amp;gt;division&amp;lt;/eventType&amp;gt;&lt;br /&gt;
            &amp;lt;eventDateTime&amp;gt;2014-01-14T22:33:48&amp;lt;/eventDateTime&amp;gt;&lt;br /&gt;
            &amp;lt;eventDetail&amp;gt;&amp;lt;!-- information about tool--&amp;gt;&amp;lt;/eventDetail&amp;gt;&lt;br /&gt;
            &amp;lt;eventOutcomeInformation&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcome&amp;gt;&amp;lt;/eventOutcome&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcomeDetail&amp;gt;&lt;br /&gt;
                &amp;lt;eventOutcomeDetailNote&amp;gt;3 LOCKSS chunks created&amp;lt;/eventOutcomeDetailNote&amp;gt;&lt;br /&gt;
              &amp;lt;/eventOutcomeDetail&amp;gt;&lt;br /&gt;
            &amp;lt;/eventOutcomeInformation&amp;gt;&lt;br /&gt;
            &amp;lt;linkingAgentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierType&amp;gt;storage service&amp;lt;/linkingAgentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierValue&amp;gt;Archivematica Storage Service-1.0&amp;lt;/linkingAgentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/linkingAgentIdentifier&amp;gt;&lt;br /&gt;
          &amp;lt;/event&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/digiprovMD&amp;gt;&lt;br /&gt;
    &amp;lt;digiprovMD ID=&amp;quot;digiprovMD_3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:AGENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;agent&amp;gt;&lt;br /&gt;
            &amp;lt;agentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;agentIdentifierType&amp;gt;preservation system&amp;lt;/agentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;agentIdentifierValue&amp;gt;Archivematica-1.0&amp;lt;/agentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/agentIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;agentName&amp;gt;Archivematica&amp;lt;/agentName&amp;gt;&lt;br /&gt;
            &amp;lt;agentType&amp;gt;software&amp;lt;/agentType&amp;gt;&lt;br /&gt;
          &amp;lt;/agent&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/digiprovMD&amp;gt;&lt;br /&gt;
    &amp;lt;digiprovMD ID=&amp;quot;digiprovMD_4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:AGENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;agent&amp;gt;&lt;br /&gt;
            &amp;lt;agentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;agentIdentifierType&amp;gt;storage service&amp;lt;/agentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;agentIdentifierValue&amp;gt;Archivematica Storage Service-1.0&amp;lt;/agentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/agentIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;agentName&amp;gt;Archivematica Storage Service&amp;lt;/agentName&amp;gt;&lt;br /&gt;
            &amp;lt;agentType&amp;gt;software&amp;lt;/agentType&amp;gt;&lt;br /&gt;
          &amp;lt;/agent&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/digiprovMD&amp;gt;&lt;br /&gt;
  &amp;lt;/amdSec&amp;gt;&lt;br /&gt;
  &amp;lt;fileSec&amp;gt;&lt;br /&gt;
    &amp;lt;fileGrp USE=&amp;quot;Archival Information Package&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;file ID=&amp;quot;FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;FLocat OTHERLOCTYPE=&amp;quot;SYSTEM&amp;quot; LOCTYPE=&amp;quot;OTHER&amp;quot; xlink:href=&amp;quot;/filepath/FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6/FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6.7z&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;transformFile TRANSFORMALGORITHM=&amp;quot;bzip2&amp;quot; TRANSFORMORDER=&amp;quot;1&amp;quot; TRANSFORMTYPE=&amp;quot;decompression&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/file&amp;gt;&lt;br /&gt;
    &amp;lt;/fileGrp&amp;gt;&lt;br /&gt;
    &amp;lt;fileGrp USE=&amp;quot;LOCKSS chunk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;file ID=&amp;quot;FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6_001&amp;quot; SIZE=&amp;quot;19383838&amp;quot; CHECKSUM=&amp;quot;8g4ede07b9288960d82c2ee146f6b4368dqad065a99fae3523e3aa0d932bda87&amp;quot; CHECKSUMTYPE=&amp;quot;SHA-256&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;FLocat OTHERLOCTYPE=&amp;quot;SYSTEM&amp;quot; LOCTYPE=&amp;quot;OTHER&amp;quot; xlink:href=&amp;quot;/filepath/FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6/FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6_001&amp;quot;/&amp;gt;        &lt;br /&gt;
        &amp;lt;FLocat LOCTYPE=&amp;quot;URL&amp;quot; xlink:href=&amp;quot;http://lockss1.example.org:8083/ServeContent?url=http://archivematicastorage.example.com/lockssomatic/dd3e3247-8466-4f2a-bb32-22a210cfce60.001&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;FLocat LOCTYPE=&amp;quot;URL&amp;quot; xlink:href=&amp;quot;http://lockss2.example.org:8085/ServeContent?url=http://archivematicastorage.example.com/lockssomatic/dd3e3247-8466-4f2a-bb32-22a210cfce60.001&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;FLocat LOCTYPE=&amp;quot;URL&amp;quot; xlink:href=&amp;quot;http://lockss3.example.org:8080/ServeContent?url=http://archivematicastorage.example.com/lockssomatic/dd3e3247-8466-4f2a-bb32-22a210cfce60.001&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/file&amp;gt;&lt;br /&gt;
     &amp;lt;file ID=&amp;quot;FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6_002&amp;quot; SIZE=&amp;quot;19273844&amp;quot; CHECKSUM=&amp;quot;9h4ede07b9288960d82c2ee146f6b4368hmad065a99fae3523e3aa0d932bda56&amp;quot; CHECKSUMTYPE=&amp;quot;SHA-256&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;FLocat OTHERLOCTYPE=&amp;quot;SYSTEM&amp;quot; LOCTYPE=&amp;quot;OTHER&amp;quot; xlink:href=&amp;quot;/filepath/FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6/FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6_002&amp;quot;/&amp;gt;        &lt;br /&gt;
        &amp;lt;FLocat LOCTYPE=&amp;quot;URL&amp;quot; xlink:href=&amp;quot;http://lockss1.example.org:8083/ServeContent?url=http://archivematicastorage.example.com/lockssomatic/dd3e3247-8466-4f2a-bb32-22a210cfce60.002&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;FLocat LOCTYPE=&amp;quot;URL&amp;quot; xlink:href=&amp;quot;http://lockss2.example.org:8085/ServeContent?url=http://archivematicastorage.example.com/lockssomatic/dd3e3247-8466-4f2a-bb32-22a210cfce60.002&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;FLocat LOCTYPE=&amp;quot;URL&amp;quot; xlink:href=&amp;quot;http://lockss3.example.org:8080/ServeContent?url=http://archivematicastorage.example.com/lockssomatic/dd3e3247-8466-4f2a-bb32-22a210cfce60.002&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/file&amp;gt;&lt;br /&gt;
    &amp;lt;/fileGrp&amp;gt;&lt;br /&gt;
  &amp;lt;/fileSec&amp;gt;&lt;br /&gt;
  &amp;lt;structMap TYPE=&amp;quot;logical&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div TYPE=&amp;quot;Archival Information Package&amp;quot; ADMID=&amp;quot;amdSec_1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div TYPE=&amp;quot;Local copy&amp;quot;&amp;gt;   &lt;br /&gt;
        &amp;lt;fptr FILEID=&amp;quot;FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div TYPE=&amp;quot;LOCKSS chunk&amp;quot; ORDER=&amp;quot;1&amp;quot;&amp;gt;   &lt;br /&gt;
        &amp;lt;fptr FILEID=&amp;quot;FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6_001&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div TYPE=&amp;quot;LOCKSS chunk&amp;quot; ORDER=&amp;quot;2&amp;quot;&amp;gt;   &lt;br /&gt;
        &amp;lt;fptr FILEID=&amp;quot;FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6_002&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/structMap&amp;gt;&lt;br /&gt;
&amp;lt;/mets&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Package split, local copy deleted ===&lt;br /&gt;
&lt;br /&gt;
The package was larger than the max file size and therefore split into several smaller chunks.  The package is fully stored, and the local copy was deleted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;mets xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot; xmlns=&amp;quot;http://www.loc.gov/METS/&amp;quot; xsi:schemaLocation=&amp;quot;http://www.loc.gov/METS/ http://www.loc.gov/standards/mets/version18/mets.xsd&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;metsHdr CREATEDATE=&amp;quot;2014-01-14T14:35:15&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;amdSec ID=&amp;quot;amdSec_1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;techMD ID=&amp;quot;techMD_1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:OBJECT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;object version=&amp;quot;2.2&amp;quot; xmlns=&amp;quot;info:lc/xmlns/premis-v2&amp;quot; xsi:type=&amp;quot;file&amp;quot; xsi:schemaLocation=&amp;quot;info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;objectIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;objectIdentifierType&amp;gt;UUID&amp;lt;/objectIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;objectIdentifierValue&amp;gt;e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6&amp;lt;/objectIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/objectIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;objectCharacteristics&amp;gt;&lt;br /&gt;
              &amp;lt;compositionLevel&amp;gt;1&amp;lt;/compositionLevel&amp;gt;&lt;br /&gt;
              &amp;lt;fixity&amp;gt;&lt;br /&gt;
                &amp;lt;messageDigestAlgorithm&amp;gt;sha256&amp;lt;/messageDigestAlgorithm&amp;gt;&lt;br /&gt;
                &amp;lt;messageDigest&amp;gt;7d4ede07b9288960d82c2ee146f6b4368d7dd065a99fae3523e3aa0d932bdb66&amp;lt;/messageDigest&amp;gt;&lt;br /&gt;
              &amp;lt;/fixity&amp;gt;&lt;br /&gt;
              &amp;lt;size&amp;gt;190989&amp;lt;/size&amp;gt;&lt;br /&gt;
              &amp;lt;format&amp;gt;&lt;br /&gt;
                &amp;lt;formatDesignation&amp;gt;&lt;br /&gt;
                  &amp;lt;formatName&amp;gt;7Zip format&amp;lt;/formatName&amp;gt;&lt;br /&gt;
                  &amp;lt;formatVersion/&amp;gt;&lt;br /&gt;
                &amp;lt;/formatDesignation&amp;gt;&lt;br /&gt;
                &amp;lt;formatRegistry&amp;gt;&lt;br /&gt;
                  &amp;lt;formatRegistryName&amp;gt;PRONOM&amp;lt;/formatRegistryName&amp;gt;&lt;br /&gt;
                  &amp;lt;formatRegistryKey&amp;gt;fmt/484&amp;lt;/formatRegistryKey&amp;gt;&lt;br /&gt;
                &amp;lt;/formatRegistry&amp;gt;&lt;br /&gt;
              &amp;lt;/format&amp;gt;&lt;br /&gt;
              &amp;lt;creatingApplication&amp;gt;&lt;br /&gt;
                &amp;lt;creatingApplicationName&amp;gt;7-Zip&amp;lt;/creatingApplicationName&amp;gt;&lt;br /&gt;
                &amp;lt;creatingApplicationVersion&amp;gt;9.20&amp;lt;/creatingApplicationVersion&amp;gt;&lt;br /&gt;
                &amp;lt;dateCreatedByApplication&amp;gt;2014-01-14T14:35:15&amp;lt;/dateCreatedByApplication&amp;gt;&lt;br /&gt;
              &amp;lt;/creatingApplication&amp;gt;&lt;br /&gt;
            &amp;lt;/objectCharacteristics&amp;gt;&lt;br /&gt;
          &amp;lt;/object&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/techMD&amp;gt;&lt;br /&gt;
    &amp;lt;digiprovMD ID=&amp;quot;digiprovMD_1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:EVENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;event xmlns=&amp;quot;info:lc/xmlns/premis-v2&amp;quot; xsi:schemaLocation=&amp;quot;info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd&amp;quot; version=&amp;quot;2.2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;eventIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierType&amp;gt;UUID&amp;lt;/eventIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierValue&amp;gt;7b16bct8-389x-4c0e-815c-98df287b234k&amp;lt;/eventIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/eventIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;eventType&amp;gt;compression&amp;lt;/eventType&amp;gt;&lt;br /&gt;
            &amp;lt;eventDateTime&amp;gt;2014-01-14T22:31:22&amp;lt;/eventDateTime&amp;gt;&lt;br /&gt;
            &amp;lt;eventDetail&amp;gt;&amp;lt;!-- information about tool--&amp;gt;&amp;lt;/eventDetail&amp;gt;&lt;br /&gt;
            &amp;lt;eventOutcomeInformation&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcome&amp;gt;&amp;lt;/eventOutcome&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcomeDetail&amp;gt;&lt;br /&gt;
                &amp;lt;eventOutcomeDetailNote&amp;gt;&amp;lt;!--tool output --&amp;gt;&amp;lt;/eventOutcomeDetailNote&amp;gt;&lt;br /&gt;
              &amp;lt;/eventOutcomeDetail&amp;gt;&lt;br /&gt;
            &amp;lt;/eventOutcomeInformation&amp;gt;&lt;br /&gt;
            &amp;lt;linkingAgentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierType&amp;gt;preservation system&amp;lt;/linkingAgentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierValue&amp;gt;Archivematica-1.0&amp;lt;/linkingAgentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/linkingAgentIdentifier&amp;gt;&lt;br /&gt;
          &amp;lt;/event&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/digiprovMD&amp;gt;&lt;br /&gt;
    &amp;lt;digiprovMD ID=&amp;quot;digiprovMD_2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:EVENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;event xmlns=&amp;quot;info:lc/xmlns/premis-v2&amp;quot; xsi:schemaLocation=&amp;quot;info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd&amp;quot; version=&amp;quot;2.2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;eventIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierType&amp;gt;UUID&amp;lt;/eventIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierValue&amp;gt;5e16bccb-384a-4c0e-815c-01df286b235b&amp;lt;/eventIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/eventIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;eventType&amp;gt;division&amp;lt;/eventType&amp;gt;&lt;br /&gt;
            &amp;lt;eventDateTime&amp;gt;2014-01-14T22:33:48&amp;lt;/eventDateTime&amp;gt;&lt;br /&gt;
            &amp;lt;eventDetail&amp;gt;&amp;lt;!-- information about tool--&amp;gt;&amp;lt;/eventDetail&amp;gt;&lt;br /&gt;
            &amp;lt;eventOutcomeInformation&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcome&amp;gt;3 LOCKSS chunks created&amp;lt;/eventOutcome&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcomeDetail&amp;gt;&lt;br /&gt;
                &amp;lt;eventOutcomeDetailNote&amp;gt;&amp;lt;!--tool output --&amp;gt;&amp;lt;/eventOutcomeDetailNote&amp;gt;&lt;br /&gt;
              &amp;lt;/eventOutcomeDetail&amp;gt;&lt;br /&gt;
            &amp;lt;/eventOutcomeInformation&amp;gt;&lt;br /&gt;
            &amp;lt;linkingAgentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierType&amp;gt;storage service&amp;lt;/linkingAgentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierValue&amp;gt;Archivematica Storage Service-1.0&amp;lt;/linkingAgentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/linkingAgentIdentifier&amp;gt;&lt;br /&gt;
          &amp;lt;/event&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/digiprovMD&amp;gt;&lt;br /&gt;
    &amp;lt;digiprovMD ID=&amp;quot;digiprovMD_3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:EVENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;event xmlns=&amp;quot;info:lc/xmlns/premis-v2&amp;quot; xsi:schemaLocation=&amp;quot;info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd&amp;quot; version=&amp;quot;2.2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;eventIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierType&amp;gt;UUID&amp;lt;/eventIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;eventIdentifierValue&amp;gt;5e16bccb-384a-4c0e-815c-01df286b235b&amp;lt;/eventIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/eventIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;eventType&amp;gt;deletion&amp;lt;/eventType&amp;gt;&lt;br /&gt;
            &amp;lt;eventDateTime&amp;gt;2014-01-14T22:33:48&amp;lt;/eventDateTime&amp;gt;&lt;br /&gt;
            &amp;lt;eventDetail&amp;gt;&amp;lt;/eventDetail&amp;gt;&lt;br /&gt;
            &amp;lt;eventOutcomeInformation&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcome&amp;gt;&amp;lt;/eventOutcome&amp;gt;&lt;br /&gt;
              &amp;lt;eventOutcomeDetail&amp;gt;&lt;br /&gt;
                &amp;lt;eventOutcomeDetailNote&amp;gt;AIP deleted from local storage&amp;lt;/eventOutcomeDetailNote&amp;gt;&lt;br /&gt;
              &amp;lt;/eventOutcomeDetail&amp;gt;&lt;br /&gt;
            &amp;lt;/eventOutcomeInformation&amp;gt;&lt;br /&gt;
            &amp;lt;linkingAgentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierType&amp;gt;storage service&amp;lt;/linkingAgentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;linkingAgentIdentifierValue&amp;gt;Archivematica Storage Service-1.0&amp;lt;/linkingAgentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/linkingAgentIdentifier&amp;gt;&lt;br /&gt;
          &amp;lt;/event&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/digiprovMD&amp;gt;&lt;br /&gt;
    &amp;lt;digiprovMD ID=&amp;quot;digiprovMD_4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:AGENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;agent&amp;gt;&lt;br /&gt;
            &amp;lt;agentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;agentIdentifierType&amp;gt;preservation system&amp;lt;/agentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;agentIdentifierValue&amp;gt;Archivematica-1.0&amp;lt;/agentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/agentIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;agentName&amp;gt;Archivematica&amp;lt;/agentName&amp;gt;&lt;br /&gt;
            &amp;lt;agentType&amp;gt;software&amp;lt;/agentType&amp;gt;&lt;br /&gt;
          &amp;lt;/agent&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/digiprovMD&amp;gt;&lt;br /&gt;
    &amp;lt;digiprovMD ID=&amp;quot;digiprovMD_5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mdWrap MDTYPE=&amp;quot;PREMIS:AGENT&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xmlData&amp;gt;&lt;br /&gt;
          &amp;lt;agent&amp;gt;&lt;br /&gt;
            &amp;lt;agentIdentifier&amp;gt;&lt;br /&gt;
              &amp;lt;agentIdentifierType&amp;gt;storage service&amp;lt;/agentIdentifierType&amp;gt;&lt;br /&gt;
              &amp;lt;agentIdentifierValue&amp;gt;Archivematica Storage Service-1.0&amp;lt;/agentIdentifierValue&amp;gt;&lt;br /&gt;
            &amp;lt;/agentIdentifier&amp;gt;&lt;br /&gt;
            &amp;lt;agentName&amp;gt;Archivematica Storage Service&amp;lt;/agentName&amp;gt;&lt;br /&gt;
            &amp;lt;agentType&amp;gt;software&amp;lt;/agentType&amp;gt;&lt;br /&gt;
          &amp;lt;/agent&amp;gt;&lt;br /&gt;
        &amp;lt;/xmlData&amp;gt;&lt;br /&gt;
      &amp;lt;/mdWrap&amp;gt;&lt;br /&gt;
    &amp;lt;/digiprovMD&amp;gt;&lt;br /&gt;
  &amp;lt;/amdSec&amp;gt;&lt;br /&gt;
  &amp;lt;fileSec&amp;gt;&lt;br /&gt;
    &amp;lt;fileGrp USE=&amp;quot;LOCKSS chunk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;file ID=&amp;quot;FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6_001&amp;quot; SIZE=&amp;quot;19383838&amp;quot; CHECKSUM=&amp;quot;8g4ede07b9288960d82c2ee146f6b4368dqad065a99fae3523e3aa0d932bda87&amp;quot; CHECKSUMTYPE=&amp;quot;SHA-256&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;FLocat LOCTYPE=&amp;quot;URL&amp;quot; xlink:href=&amp;quot;http://lockss1.example.org:8083/ServeContent?url=http://archivematicastorage.example.com/lockssomatic/dd3e3247-8466-4f2a-bb32-22a210cfce60.001&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;FLocat LOCTYPE=&amp;quot;URL&amp;quot; xlink:href=&amp;quot;http://lockss2.example.org:8085/ServeContent?url=http://archivematicastorage.example.com/lockssomatic/dd3e3247-8466-4f2a-bb32-22a210cfce60.001&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;FLocat LOCTYPE=&amp;quot;URL&amp;quot; xlink:href=&amp;quot;http://lockss3.example.org:8080/ServeContent?url=http://archivematicastorage.example.com/lockssomatic/dd3e3247-8466-4f2a-bb32-22a210cfce60.001&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/file&amp;gt;&lt;br /&gt;
     &amp;lt;file ID=&amp;quot;FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6_002&amp;quot; SIZE=&amp;quot;19273844&amp;quot; CHECKSUM=&amp;quot;9h4ede07b9288960d82c2ee146f6b4368hmad065a99fae3523e3aa0d932bda56&amp;quot; CHECKSUMTYPE=&amp;quot;SHA-256&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;FLocat LOCTYPE=&amp;quot;URL&amp;quot; xlink:href=&amp;quot;http://lockss1.example.org:8083/ServeContent?url=http://archivematicastorage.example.com/lockssomatic/dd3e3247-8466-4f2a-bb32-22a210cfce60.002&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;FLocat LOCTYPE=&amp;quot;URL&amp;quot; xlink:href=&amp;quot;http://lockss2.example.org:8085/ServeContent?url=http://archivematicastorage.example.com/lockssomatic/dd3e3247-8466-4f2a-bb32-22a210cfce60.002&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;FLocat LOCTYPE=&amp;quot;URL&amp;quot; xlink:href=&amp;quot;http://lockss3.example.org:8080/ServeContent?url=http://archivematicastorage.example.com/lockssomatic/dd3e3247-8466-4f2a-bb32-22a210cfce60.002&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/file&amp;gt;&lt;br /&gt;
    &amp;lt;/fileGrp&amp;gt;&lt;br /&gt;
  &amp;lt;/fileSec&amp;gt;&lt;br /&gt;
  &amp;lt;structMap TYPE=&amp;quot;logical&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div TYPE=&amp;quot;Archival Information Package&amp;quot; ADMID=&amp;quot;amdSec_1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div TYPE=&amp;quot;LOCKSS chunk&amp;quot; ORDER=&amp;quot;1&amp;quot;&amp;gt;   &lt;br /&gt;
        &amp;lt;fptr FILEID=&amp;quot;FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6_001&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div TYPE=&amp;quot;LOCKSS chunk&amp;quot; ORDER=&amp;quot;2&amp;quot;&amp;gt;   &lt;br /&gt;
        &amp;lt;fptr FILEID=&amp;quot;FLocatTest-e0ff9a0e-a7f5-4bee-b9c2-7e2321dde7a6_002&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/structMap&amp;gt;&lt;br /&gt;
&amp;lt;/mets&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Format_policy_registry_requirements&amp;diff=11714</id>
		<title>Format policy registry requirements</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Format_policy_registry_requirements&amp;diff=11714"/>
		<updated>2017-03-23T19:36:27Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Also list as feature requirement page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation]] &amp;gt; [[Requirements]] &amp;gt; Format policy registry requirements&lt;br /&gt;
&lt;br /&gt;
The Format Policy Registry (FPR) contains user-configurable scripts for file identification, characterization, extraction, normalization and other preservation actions that differ depending on file format.  It also contains a list of formats recognized by Archivematica, and the relationship between those formats and the scripts.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
* The Archivematica project team is working on a better way to manage format policies for preservation events such as normalization, transcription, extraction, characterization and format identification. &lt;br /&gt;
* A format policy consists of the business rules and tool commands for preservation events based on format.&lt;br /&gt;
* The Format Policy Registry lists all of Archivematica's default format policy rules. &lt;br /&gt;
* Currently, users can download updates from the FPR server and replace default rules with your own local policies. &lt;br /&gt;
* Future funding is sought for further FPR enhancements to include statistical information about the default and custom format policies adopted and implemented by Archivematica users and the ability to upload local policies to the FPR server.&lt;br /&gt;
* One of the primary goals of the FPR is to eventually aggregate empirical information about institutional format policies to better identify community best practices. The FPR could provide a practical, community-based approach to OAIS preservation and access planning, allowing the Archivematica community of users to monitor and evaluate format policies as they are adopted, adapted and supplemented by real-world practitioners. The FPR APIs would be designed to share this information with the Archivematica user base as well with other interested communities and projects.&lt;br /&gt;
* The FPR server is hosted at fpr.archivematica.org. Sponsorship is actively being sought to develop a front-facing website at this server location. Currently, the local copy of the FPR server in the Archivematica dashboard's preservation planning tab is the only interface for the user. Artefactual manages the server from the back end. With further sponsorship, the server site would be a place to compare institutional format policies and their success rates over time.&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
* The Archivematica project team created the FPR after having recognized the need for a better way to manage preservation plans, i.e. business rules and tool commands for format-based preservation events. Since these are either implemented or altered by the institution running an Archivematica instance, these rules are referred to as policies. Format policies will change as community standards, practices and tools evolve. A format policy indicates the actions, tools and settings to apply to a file of a particular file format (e.g. conversion to preservation format, conversion to access format). &lt;br /&gt;
&lt;br /&gt;
* Prior to the FPR, the Archivematica project has managed this information on the [[Media_type_preservation_plans|archivematica.org/preservation]] wiki page. These format policies were all researched as a result of related development partnerships with samples provided by funding partners. Since the FPR was first released in late 2013, all new format policies were developed in partnership with funding institutions and any new rules were included in the public FPR server, hosted by Artefactual Systems, Inc. &lt;br /&gt;
&lt;br /&gt;
* The Format Policy Registry (FPR) manages this information in a structured format (SQL/JSON).&lt;br /&gt;
** With additional sponsored development, APIs with other serializations could be added (e.g. XML, RDF)&lt;br /&gt;
&lt;br /&gt;
* The FPR includes updates from PRONOM, which are manually applied by Artefactual Systems. With funding, we could enhance and/or automate this PRONOM interface and add interfaces with other registries like UDFR and linked data registries. A web of interfaces is the best way to monitor and evaluate community-wide best practices.&lt;br /&gt;
&lt;br /&gt;
* The FPR stores structured information about:&lt;br /&gt;
**Format identification (FIDO based on PRONOM IDs or file extension, with more tools to be added in the future) &lt;br /&gt;
**Normalization format policies for preservation and access. These policies identify preferred preservation and access formats by media type. The default choice of access formats is based on the ubiquity of viewers for the file format. Archivematica's default preservation formats are all open standards; additionally, the choice of preservation format is based on community best practices, availability of open-source normalization tools, and an analysis of the significant characteristics for each media type. &lt;br /&gt;
**Characterization (default is FITS for most formats and MediaInfo for some audiovisual formats)&lt;br /&gt;
**Transcription (default for OCR using Tesseract)&lt;br /&gt;
**Extraction - tools and commands for extracting packages and forensic disk images&lt;br /&gt;
&lt;br /&gt;
* Archivematica default format policies can all be changed or enhanced by individual Archivematica implementers. &lt;br /&gt;
&lt;br /&gt;
=FPR development=&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
* Alternate preservation event tool than Archivematica default &lt;br /&gt;
* Alternate default preservation event outcome format than Archivematica default &lt;br /&gt;
* Alternate specification event result &lt;br /&gt;
* Disable default in Archivematica &lt;br /&gt;
* Add new format policy &lt;br /&gt;
* Add new tool&lt;br /&gt;
* Add new format&lt;br /&gt;
* Run format policy tools and commands on local digital acquisitions&lt;br /&gt;
* Proposed: Add format policies to other open source system workflows&lt;br /&gt;
* Proposed: Allow other open source system users to submit proposed format policies&lt;br /&gt;
&lt;br /&gt;
==1.2==&lt;br /&gt;
&lt;br /&gt;
*Updated PRONOM data for FIDO&lt;br /&gt;
*Made one Tools section rather than having tools in each event space, except for Identification tools&lt;br /&gt;
*Added Transcription, Extraction, Characterization and Verification event sections&lt;br /&gt;
*Ability to update from server in local dashboard's Preservation Planning tab&lt;br /&gt;
&lt;br /&gt;
==1.0==&lt;br /&gt;
&lt;br /&gt;
* Ability to add/edit tools, rules, commands and formats&lt;br /&gt;
&lt;br /&gt;
==0.10-beta==&lt;br /&gt;
&lt;br /&gt;
*Ability to view, add/edit local format policies&lt;br /&gt;
** FPR local is for superusers (preservation planning tab)&lt;br /&gt;
* Dashboard FPR captures usage statistics &lt;br /&gt;
* Central server at fpr.archivematica.org &lt;br /&gt;
* Ability to download most current Archivematica default format policies from fpr.archivematica.org on first installation&lt;br /&gt;
&lt;br /&gt;
==Wishlist==&lt;br /&gt;
&lt;br /&gt;
* Front-facing server website&lt;br /&gt;
**authenticated, web-based access for Artefactual and super-user updates and maintenance&lt;br /&gt;
* Ability to submit local changes to the central FPR server&lt;br /&gt;
** fpr.archivematica.org will mirror local implementation, except user won't be able to apply changes, only submit them for review and website could include the institution that submitted the policy or indicate whether it is a default Archivematica policy&lt;br /&gt;
** users would be able to apply changes locally and submit them for review to fpr&lt;br /&gt;
** nice to have: ability to add links to documentation about reasoning behind local institutional policy selection&lt;br /&gt;
** accepted changes would result in a new FPR server entry&lt;br /&gt;
* Ability to download select new Archivematica default FPR policies as well as those from other institutions from the central FPR server to local Archivematica installations&lt;br /&gt;
** ideally a single click download to allow for local implementation from the server or from a list viewable after selecting Update from the Preservation Planning tab of the local Dashboard&lt;br /&gt;
* Ability to disable a format policy in the dashboard&lt;br /&gt;
* Update Archivematica without losing local FPR configuration and added policies&lt;br /&gt;
* Integrate with PRONOM to automate PUID updates&lt;br /&gt;
* Integrate with other registries&lt;br /&gt;
* Provide a read-only RESTful Web API for accessing policies in JSON format. This is only partially implemented in 1.2, intended only to be used internally (between dashboard and FPR server) and only provides access to the full set of policies.  Future development would ideally include the ability to access a subset of policies via the FPR REST API&lt;br /&gt;
&lt;br /&gt;
=Legacy FPR foundation docs=&lt;br /&gt;
&lt;br /&gt;
[[File:FPR overview Oct 2012.png|border|900px|FPR overview Oct 2012]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* developer [[Format_policy_registry|notes]]&lt;br /&gt;
&lt;br /&gt;
== Mockups ==&lt;br /&gt;
&lt;br /&gt;
'''Preservation Planning tab in Dashboard - Local FPR'''&lt;br /&gt;
&lt;br /&gt;
[[File:1.0_PreservationPlanningFPR.png|Preservation Planning tab in dashboard]]&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
* Archivematica format ID column is populated by the &amp;quot;description&amp;quot; from the File ID table in the Archivematica database; It links to the file ID table in the Archivematica database, which is composed of the tool and tool version that identified the format.&lt;br /&gt;
* Command description is the &amp;quot;description&amp;quot; from the Command table in the Archivematica database&lt;br /&gt;
* Purpose is the same as &amp;quot;classification&amp;quot; in the Archivematica database, but is clearer to the user&lt;br /&gt;
* Add new -links to create new (blank) form for Archivematica format ID -or- to the create new (blank) form for the Command&lt;br /&gt;
* Copy - links to create new form based on this one (populated with current data) for either the Archivematica format ID -or- Command&lt;br /&gt;
* Edit -links to edit page for the Archivematica format ID -or- to the edit page for the Command&lt;br /&gt;
* Make default - makes the selected Archivematica format ID format policy or the selected Command format policy default for normalization. See Feature #4503&lt;br /&gt;
* Show performance and show command are modeled on the old preservation planning tab in the dashboard, available in the dev version of Archivematica at /preservationplanning/old/&lt;br /&gt;
'''Add new Archivematica format ID'''&lt;br /&gt;
&lt;br /&gt;
[[File:1.0_FormatPolicyFormatID.png]]&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&lt;br /&gt;
'''Add new Command'''&lt;br /&gt;
&lt;br /&gt;
[[File:1.0_FormatPolicyCommand.png]]&lt;br /&gt;
&lt;br /&gt;
* Added https://projects.artefactual.com/issues/4568 (#4568) to add a Output file format field to this form from the outputFileFormat field in the MCP Commands table &lt;br /&gt;
-------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
'''Copy Archivematica format ID'''&lt;br /&gt;
&lt;br /&gt;
[[File:1.0_FormatPolicyFormatIDCOPY.png]]&lt;br /&gt;
------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
'''Copy Command'''&lt;br /&gt;
&lt;br /&gt;
[[File:1.0_FormatPolicyCommandCOPY.png]]&lt;br /&gt;
&lt;br /&gt;
== Data Model ==&lt;br /&gt;
Design from summer 2013 of the data structures in version 2 of the API.&lt;br /&gt;
&lt;br /&gt;
[[File:Fpr design-2013-07-25.png|900px]]&lt;br /&gt;
&lt;br /&gt;
Updated design as of March 2017&lt;br /&gt;
&lt;br /&gt;
[[File:Fpr-design-2017-03.png|900px]]&lt;br /&gt;
&lt;br /&gt;
== Workflow == &lt;br /&gt;
&lt;br /&gt;
== GUI ==&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
== Proposed Changes ==&lt;br /&gt;
&lt;br /&gt;
=== Replace VersionedModel with set of associated rules ===&lt;br /&gt;
&lt;br /&gt;
January 2014&lt;br /&gt;
&lt;br /&gt;
'''Summary:''' Replace the VersionedModel structure of a linear history of revisions with a collection/set of rules all associated with some 'meta-rule'.&lt;br /&gt;
&lt;br /&gt;
'''Bug:'''#6192&lt;br /&gt;
&lt;br /&gt;
'''Problem:'''&lt;br /&gt;
Currently, we track a linear history of rule modifications.  A newly modified rule is always added to the end of the chain, even if it modified an earlier rule.  All rules in the chain must be kept. Example: A &amp;lt;- B (enabled).  A is modified, resulting in C with history of: A &amp;lt;- B &amp;lt;- C (enabled)  B cannot be disabled, even if it never used (eg had a typo)&lt;br /&gt;
&lt;br /&gt;
We need to track variations on a rule that is fundamentally the same, but not necessarily a linear version history. With a linear history, the true relationship between a rule and where it originated from is unclear, and a version history of any sort for the rules is probably unnecessary - all we care about is the currently active rule (and any newly downloaded rules that are candidates for replacing it).  The linear history also complicates things when modifications are coming from several sources (eg. Artefactual, various institutions, local modifications)&lt;br /&gt;
&lt;br /&gt;
'''Proposed fix:'''&lt;br /&gt;
Each rule stores an Agent (the institution/person that created it) and a 'meta-rule' ID, and no longer stores what rule it replaced.   All rules that are variations on each other have the same 'meta-rule' ID and are 'rule versions'.  Potentially the meta-rule ID is a foreign key to an actual meta-rule table, but that may not be necessary.&lt;br /&gt;
&lt;br /&gt;
In a set of rule versions, only one may be enabled at a time.  Rule versions can come from several sources - originally installed and FPR updates from Artefactual, downloads from a particular institution that is reputable, a local FPR server - and are conceptually linked by having a common meta-rule ID.  Agent IDs will be used to distinguish the sources, and created time used to track the most recent variation.&lt;br /&gt;
&lt;br /&gt;
'''Pros:'''&lt;br /&gt;
* Easier to download updates to FPR rules, especially from more than one source&lt;br /&gt;
* Can provide the ability to delete truly unwanted rules&lt;br /&gt;
* ???&lt;br /&gt;
&lt;br /&gt;
'''Cons:'''&lt;br /&gt;
* What information to display to the user? What to display if all the rule versions for a meta-rule are disabled?&lt;br /&gt;
* Probably backwards incompatible, or non-trivial to make it&lt;br /&gt;
* ???&lt;br /&gt;
&lt;br /&gt;
==Early prototype==&lt;br /&gt;
&lt;br /&gt;
*An early FPR prototype (called &amp;quot;Formatica&amp;quot;) was developed by Heather Bowden, then Carolina Digital Curation Doctoral Fellow at the School of Information and Library Science in the University of North Carolina at Chapel Hill. &lt;br /&gt;
&lt;br /&gt;
[[File:Formatica.png|border|450px|Early FPR prototype originally called Formatica]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development documentation]] &lt;br /&gt;
[[Category:Feature requirements]]&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Format_identification_requirements&amp;diff=11713</id>
		<title>Format identification requirements</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Format_identification_requirements&amp;diff=11713"/>
		<updated>2017-03-23T19:35:32Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move to feature requirements category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation]] &amp;gt; [[Requirements]] &amp;gt; Format identification requirements&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature requirements]]&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* FITS runs for characterization and md extraction in transfer tab&lt;br /&gt;
** Output indexed and stored in transfer backlog&lt;br /&gt;
&lt;br /&gt;
* '''Select format identification tool''' job in Normalization micro-service, after SIP creation&lt;br /&gt;
** user selects from dropdown menu of identification tool options: &lt;br /&gt;
***Identify file by extension - this is already the default in Archivematica 0.9&lt;br /&gt;
***[http://unixhelp.ed.ac.uk/CGI/man-cgi?file file utility] - file utility identification metadata from FITS output&lt;br /&gt;
***[http://web.archive.org/web/20061106114156/http://schmidt.devlib.org/ffident/index.html ffident] - ffident identification metadata from FITS output&lt;br /&gt;
***[http://droid.sourceforge.net/ DROID] - DROID identification metadata from FITS output&lt;br /&gt;
***[http://sourceforge.net/projects/jhove/ JHOVE] - JHOVE identification metadata from FITS output&lt;br /&gt;
***[http://www.openplanetsfoundation.org/software/fido FIDO] - run FIDO&lt;br /&gt;
***Tika - run modified Tika&lt;br /&gt;
***[http://mediainfo.sourceforge.net/en mediainfo] - run mediainfo&lt;br /&gt;
* Duplicate results need cleared from DB - one command for each ID&lt;br /&gt;
* Multiple IDs - do all normalization tasks that apply&lt;br /&gt;
** Indicate duplicates in Norm report and viewer &lt;br /&gt;
** Add delete functionality to Review normalization report and viewer in Dashboard browser, user chooses one or the other &lt;br /&gt;
* If there is no rule, normalization should be based on extension&lt;br /&gt;
* Distinguish identification tool versions in DB&lt;br /&gt;
* Output for each tool must be restructured to comply with format policy&lt;br /&gt;
&lt;br /&gt;
* Format policies should have globally unique IDs&lt;br /&gt;
&lt;br /&gt;
* Format policies result in rules that are stored in the [[Format_policy_registry_requirements|Format Policy Registry (FPR)]]&lt;br /&gt;
* Do not split major/minor mimetypes&lt;br /&gt;
&lt;br /&gt;
=== FITS output for format identification ===&lt;br /&gt;
&lt;br /&gt;
* in file utility output: &amp;lt;format&amp;gt; &amp;lt;mimetype&amp;gt;&lt;br /&gt;
* in ffident output: &amp;lt;mimetype&amp;gt;&lt;br /&gt;
* in DROID output: &amp;lt;PUID&amp;gt; &amp;lt;MimeType&amp;gt;&lt;br /&gt;
* in JHOVE output: &amp;lt;format&amp;gt; &amp;lt;mimeType&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
== Workflows ==&lt;br /&gt;
&lt;br /&gt;
* Insert File identification micro-service after Clean up names micro-service and before Normalize micro-service&lt;br /&gt;
* User selects from dropdown menu which FITS tool to trust for format identification (see tools listed above)&lt;br /&gt;
* Archivematica bases Normalization path / application of format policy on the tool selected&lt;br /&gt;
* Post 1.0 work: add tools outside of FITS that will run when selected by the user at the File identification micro-service.&lt;br /&gt;
&lt;br /&gt;
== Whiteboard ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:FileID.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mockups ==&lt;br /&gt;
&lt;br /&gt;
Note that the Normalize micro-service is included here for illustrative purposes only. In action, the user would not see the Normalize micro-service until a format identification mechanism was selected from the dropdown menu.&lt;br /&gt;
&lt;br /&gt;
[[File:FileIdentificationMS.png]]&lt;br /&gt;
&lt;br /&gt;
=Format policy models and table=&lt;br /&gt;
The [[Transcoder]] page has a lot of information on it.&lt;br /&gt;
&amp;lt;br/&amp;gt;This diagram is from there. &lt;br /&gt;
&lt;br /&gt;
[[File:Transcoder_database_schema.png]]&lt;br /&gt;
&lt;br /&gt;
I think for the [[Format_policy_registry_requirements|Format Policy Registry (FPR)]] almost every table will need to replace the pk INT with a pk UUID, and the corresponding foreign keys. This is to aid in the creation/submission of new rules.&lt;br /&gt;
&lt;br /&gt;
We're also going to need to know what format the rules output to. &lt;br /&gt;
&lt;br /&gt;
Speaking to future iterations: We'll need to be able to identify what formats the original file, and preservation file are in. Determine the format risk of the data with both of those considered. We may choose to normalize a to a new preservation format from the the original file, or the preservation file. The reason for this may be that both formats risk obsolescence, but there are only tools available to handle the preservation format.&lt;br /&gt;
&lt;br /&gt;
To track changes/updates/new items, I would suggest the FPR keep track of the last modified date of all rows. Clients keep track of the last updated date. These dates are from the FPR. &lt;br /&gt;
Additional: add a marked for removal bool to each table in the FPR, to indicate to clients to remove that from their database.&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Fixity_checking_and_reporting&amp;diff=11712</id>
		<title>Fixity checking and reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Fixity_checking_and_reporting&amp;diff=11712"/>
		<updated>2017-03-23T19:35:03Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move to feature requirements category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Documentation]] &amp;gt; [[Requirements]] &amp;gt; Fixity checking and reporting&lt;br /&gt;
&lt;br /&gt;
This wiki page describes requirements for gathering fixity check information from the [https://github.com/artefactual/fixity | Fixity app] and reporting through the Archivematica Storage Service.&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature requirements]]&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
&lt;br /&gt;
* Modify Storage Service to record time and results of fixity checks by adding columns to packages tab&lt;br /&gt;
&lt;br /&gt;
* Add script to send email alerts to administrator(s) when a fixity check fails&lt;br /&gt;
&lt;br /&gt;
==Mockups==&lt;br /&gt;
&lt;br /&gt;
===Storage Service packages tab===&lt;br /&gt;
&lt;br /&gt;
[[File:Fixity_report_SS.png|700 px]]&lt;br /&gt;
&lt;br /&gt;
Two columns are added to the Storage Service packages tab:&lt;br /&gt;
&lt;br /&gt;
* Fixity Date, showing the date and time that the fixity check was run&lt;br /&gt;
* Fixity Result, showing the outcome (Succeeded or Failed) with links to tool output in cases of failures or errors (successful fixity scan reports are empty)&lt;br /&gt;
&lt;br /&gt;
===Fixity Results: Failed===&lt;br /&gt;
&lt;br /&gt;
Failures should be reported as such if they are actual fixity failures, or if there were errors in the tool.&lt;br /&gt;
&lt;br /&gt;
'''In the case of a fixity failure''' the report should have the following:&lt;br /&gt;
&lt;br /&gt;
* Date/time that fixity was run&lt;br /&gt;
* AIP UUID &lt;br /&gt;
* Which files (names, UUIDs) failed fixity check&lt;br /&gt;
&lt;br /&gt;
'''In the case of an error''' the report should have the following:&lt;br /&gt;
&lt;br /&gt;
* Date/time that fixity was run&lt;br /&gt;
* AIP UUID&lt;br /&gt;
* Nature of the error- for example:&lt;br /&gt;
 &lt;br /&gt;
&amp;quot;data/objects/no_such_file exists in manifest but not found on filesystem&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
(Source: https://github.com/artefactual/archivematica-storage-service/blob/stable/0.7.x/storage_service/locations/models/package.py#L742-L762)&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=File_Browser_Requirements&amp;diff=11711</id>
		<title>File Browser Requirements</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=File_Browser_Requirements&amp;diff=11711"/>
		<updated>2017-03-23T19:34:39Z</updated>

		<summary type="html">&lt;p&gt;Hbecker: Move to feature requirements category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; [[:Category:Development documentation|Development documentation]] &amp;gt; File Browser Requirements&lt;br /&gt;
&lt;br /&gt;
This page describes requirements for moving all Archivematica interface to the web dashboard, including file browser functionality for transfer and SIP configuration, normalization output review, and AIP and DIP review prior to upload to storage and access. (mockups forthcoming)&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature requirements]]&lt;br /&gt;
&lt;br /&gt;
= TRANSFER =&lt;br /&gt;
* Login Archivist - archivist's name will be attached to all processing actions. (PREMIS agent)&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;del&amp;gt;Create structured directory (create three directories: logs, metadata, objects)&lt;br /&gt;
-OR-&lt;br /&gt;
*Restructure transfer for processing (put all contents into objects directory and create an empty log and metadata directory)&amp;lt;/del&amp;gt; (This should be automated)&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;del&amp;gt;Run checksum on transfer and place checksum in folder called checksum.md5 in the metadata folder (checkbox) This is in case the transfer hasn't arrived with a checksum already.&amp;lt;/del&amp;gt; (This was discussed - currently, the checksum assigment and checksum check should occur upon beginning transfer, prior to backup. Process should be automated.) In fact, all transfers will go through all microservices for transfers before they are &amp;quot;backlogged&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*Backlog should be indexed&lt;br /&gt;
&lt;br /&gt;
*Assign transfer type (drop-down, user configurable: Generic, DSpace export, digitization output (Issue 713), VanDocs export, BagIt package (Issue 593))&lt;br /&gt;
&lt;br /&gt;
[[Image:0.9_Transfer.png]]&lt;br /&gt;
&lt;br /&gt;
Transfer backup requirements:&lt;br /&gt;
See [[Transfer_backlog_requirements]]&lt;br /&gt;
&lt;br /&gt;
= Create SIP =&lt;br /&gt;
&lt;br /&gt;
'''1.0 Mockup'''&lt;br /&gt;
&lt;br /&gt;
[[File:1.0_CreateSIP.png|1000px|thumb|center|]]&lt;br /&gt;
'''0.9 Mockup'''&lt;br /&gt;
This mockup is outdated.&lt;br /&gt;
&lt;br /&gt;
[[Image:0.9_CreateSIP.png|300px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
* Below the above contents, on the same page, would be the current 0.8 dashboard for Ingest, including popouts for tasks, etc, and decision points.&lt;br /&gt;
* original order and arrangement (issue 964) captured as logical &amp;lt;structMap&amp;gt; in SIP METS file.&lt;br /&gt;
* Report of actions in Create SIP is auto-generated&lt;br /&gt;
&lt;br /&gt;
= File Viewer =&lt;br /&gt;
* This will allow the user to see individual documents in the transfer to get a better idea of their contents and technical metadata before assigning them to SIPs.&lt;br /&gt;
* Viewers are browser-dependent; viewer option is greyed out if viewer is not supported in browser&lt;br /&gt;
* Examine Contents window allows for viewing technical MD and other metadata available after Transfer microservices as well as indexing MD&lt;br /&gt;
&lt;br /&gt;
= Examine Contents =&lt;br /&gt;
&lt;br /&gt;
[[File:1.0_ExamineContents.png|1000px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
* Opens in new tab&lt;br /&gt;
* This will allow the user to examine contents of a SIP for keywords, use visualization tools, and identify restricted records (by keyword or by type, cc number, SIN number, etc), tag records or groups of records and apply some basic metadata that will be carried over to the description&lt;br /&gt;
&lt;br /&gt;
= ADMINISTRATION TAB =&lt;br /&gt;
*Assign transfer backup location (what is it backing up? at which stage?) This could be a staging area, in case many transfers will become one SIP or more time is needed to begin processing ADMIN&lt;br /&gt;
&lt;br /&gt;
*Go to storage reports in DB on individual storage locations - see Issue 882&lt;br /&gt;
&lt;br /&gt;
*Transfer store = Backlog ; MD: name, accession #, uuid, transfer type, archivist, size of contents, number of files, date, file types? and other indexing results?, any reports? (FITS, clamAV, etc)&lt;br /&gt;
** Accessions managed in ICA-AtoM or other content management system, linked in DB and in tab&lt;br /&gt;
&lt;br /&gt;
[[File:0.9_AdministrationTab.png]]&lt;br /&gt;
&lt;br /&gt;
= More to come on this...=&lt;br /&gt;
* See Transfer indexing requirements [[Transfer_and_SIP_creation#Transfer_indexing_requirements_0.9_and_beyond]]&lt;br /&gt;
* See Issue 924&lt;br /&gt;
    &lt;br /&gt;
*Archivematica compliant SIP creation, including:&lt;br /&gt;
        log of original directory structure, diff to new structure (using METS &amp;lt;structMap&amp;gt; to represent both)&lt;br /&gt;
        use METS &amp;lt;structMap&amp;gt; (or physical directory arrangement of SIP?) to represent archival arrangement for rebuild in access system (see Issue 380)&lt;br /&gt;
&lt;br /&gt;
*Change permissions of directory contents recursively (or should this be integrated in every step to avoid problems?)&lt;/div&gt;</summary>
		<author><name>Hbecker</name></author>
	</entry>
</feed>